Upgrade to Pro — share decks privately, control downloads, hide ads and more …

UBICの食材管理APIを作った話

 UBICの食材管理APIを作った話

Yuto Takamune

January 30, 2022
Tweet

More Decks by Yuto Takamune

Other Decks in Programming

Transcript

  1. 自己紹介 • 人間 • 会津大学学部一年 • LINE API Expert ←

    New! • 認証/アイデンティティ管理まわりが好き • 最近はGoでバックエンドを書いてる @shinbunbun_ ¥3993 マイナビ出版 ポートフォリオ(shinbunbun.info)
  2. 技術スタック • 言語: Go • クラウド: • AWS SAM(Lambda, API

    Gateway) • DynamoDB • S3 • 認証: LINEログイン • その他使ったもの • Swagger, GitHub Actions, Mergify, Docker etc…
  3. AWS SAM • AWSでサーバレスアプリケーションを構築するためのフレーム ワーク • 今回SAMでやったこと • Lambdaの構築 •

    Open APIからAPI Gatewayエンドポイント作成 • API Gatewayにドメイン割り当て • Lambda, API Gatewayにアタッチするロールの生成 • Lambda Authorizerの構築(後述) • ローカルでAPIを立ち上げる(後述) • GitHub Actionsからデプロイ
  4. DynamoDB dynamodb-local: container_name: dynamodb-local image: amazon/dynamodb-local:latest user: root command: -jar

    DynamoDBLocal.jar -sharedDb -dbPath /data volumes: - dynamodb-local-data:/data ports: - 8000:8000 networks: - dynamodb-local-network dynamodb-admin: container_name: dynamodb-admin image: aaronshaf/dynamodb-admin:latest environment: - DYNAMO_ENDPOINT=dynamodb-local:8000 ports: - 8001:8001 depends_on: - dynamodb-local networks: - dynamodb-local-network
  5. S3 localstack: container_name: localstack image: localstack/localstack environment: - SERVICES=s3 -

    DEFAULT_REGION=ap-northeast-1 - DATA_DIR=/tmp/localstack/data ports: - 4566:4566 networks: - dynamodb-local-network
  6. Lambda sam build sam local start-api --env-vars ./env.json --docker-network docker.internal

    • 普通にbuildしてからlocalで実行 • 環境変数はjsonから読み込み • DynamoDB, S3と同じnetworkで立ち上げる
  7. go testとか結構大変 go-test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 -

    name: Up dynamodb & localstack run: docker-compose up -d dynamodb-local localstack working-directory: local_resource - name: Copy aws config run: cp -r ./.aws ~/ working-directory: local_resource - name: Create table run: sh create_table.sh working-directory: local_resource - name: Create bucket run: sh create_bucket.sh working-directory: local_resource - name: Add dummy data run: sh add_dummy_data.sh working-directory: local_resource - name: Run test run: docker-compose run go-test working-directory: local_resource 1. DynamoDBとS3のDockerを立ち上げる 2. ダミーのaws configを配置 3. DynamoDBのテーブルを作成 4. S3のバケットを作成 5. DynamoDBにテスト用のデータをPut 6. ようやくテストがまわせる
  8. 今後の展望 • LINEログイン用のエンドポイントに対してもテストを書きたい • 正常終了以外のAPIテストを書きたい • Unit testちゃんと書きたい • DIしたい

    • Lambda関数を適切に切り分けたい • 誰でも使えるOSSの在庫管理ツールにしたい • LINEログインのRPをちゃんとフルスクラッチで実装したい • base64とかsha256とかライブラリ使ってるのが気に食わない • これはC言語でLINEログインRP実装フラグ...?