https://docs.docker.jp/engine/reference/builder.html?highlight=arg#using-arg-variables
アプリケーションの環境変数はSSMのパラメータストアで管理している。その際、 npx prisma generate
を実行する場合は値が環境変数ではなく、値が展開されている前提となる。なので、GitHub Actionsでのコンテナbuild時にARGでそれぞれのパラメータをGitHub Actionsの環境変数に設定する必要がある。
- stg/app/Dockerfile
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# Stage 1: Build stage FROM node:18.18-alpine AS builder ENV APP_ROOT /var/www/app WORKDIR $APP_ROOT # Accept build arguments and set them as environment variables ARG API_KEY ENV API_KEY=$API_KEY ARG DATABASE_URL ENV DATABASE_URL=$DATABASE_URL ~省略~ # Install packages RUN apk update && \ apk upgrade && \ apk add --update --no-cache \ bash \ tzdata \ vim # Copy application files COPY package.json yarn.lock ./ RUN yarn install COPY . . # Generate Prisma Client RUN npx prisma generate --schema=./prisma/schema.prisma # Stage 2: Production stage FROM node:18.18-alpine ENV APP_ROOT /var/www/app WORKDIR $APP_ROOT # Install packages RUN apk update && \ apk upgrade && \ apk add --update --no-cache \ bash \ tzdata \ vim # Copy build artifacts from builder stage COPY --from=builder $APP_ROOT $APP_ROOT EXPOSE 3000 CMD ["yarn", "dev"] |
- docker/stg/task-definitions/retrieve_ssm_params.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#!/bin/bash PARAMS=( "arn:aws:ssm:ap-northeast-1:${AWS_ACCOUNT_ID}:parameter/stg_api_key" "arn:aws:ssm:ap-northeast-1:${AWS_ACCOUNT_ID}:parameter/stg_db_url" ~省略~ ) for param in "${PARAMS[@]}" do name=$(echo $param | awk -F'/' '{print $NF}') value=$(aws ssm get-parameter --name "$param" --with-decryption --query "Parameter.Value" --output text) echo "$name=$value" >> $GITHUB_ENV done |
- .github/workflows/deploy-stg.yaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
~省略~ - name: Retrieve SSM Parameters run: | docker/stg/task-definitions/retrieve_ssm_params.sh env: AWS_ACCOUNT_ID: ${{ secrets.AWS_ACCOUNT_ID }} - name: Build, tag, and push image to ECR id: build-image run: | docker build -f docker/stg/app/Dockerfile -t $ECR_REGISTRY/$ECR_REPOSITORY_APP:$IMAGE_TAG \ --build-arg API_KEY=$stg_api_key \ --build-arg DATABASE_URL=$stg_db_url \ ~省略~ docker build -f docker/stg/nginx/Dockerfile -t $ECR_REGISTRY/$ECR_REPOSITORY_NGINX:$IMAGE_TAG . docker push $ECR_REGISTRY/$ECR_REPOSITORY_APP:$IMAGE_TAG docker push $ECR_REGISTRY/$ECR_REPOSITORY_NGINX:$IMAGE_TAG echo "::set-output name=image-app::$ECR_REGISTRY/$ECR_REPOSITORY_APP:$IMAGE_TAG" echo "::set-output name=image-nginx::$ECR_REGISTRY/$ECR_REPOSITORY_NGINX:$IMAGE_TAG" env: ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }} IMAGE_TAG: ${{ github.sha }} ECR_REPOSITORY_APP: stg-hoge-app ECR_REPOSITORY_NGINX: stg-hoge-nginx |
Was this helpful?
0 / 0
1989年生まれのFindy/SRE。ホスティングから大規模なアドテクなどのインフラエンジニアとして携わる。現在はサービスの信頼性向上、DevOps、可用性、レイテンシ、パフォーマンス、モニタリング、オブザーバビリティ、緊急対応、AWSでのインフラ構築、Docker開発環境の提供、IaC、新技術の検証、リファクタリング、セキュリティ強化、分析基盤の運用などを担当している。個人事業主では数社サーバー保守とベンチャー企業のSREインフラコンサルティングやMENTA/TechBullで未経験者にインフラのコーチング/コミュニティマネージャーとして立ち上げと運営をしている。また、過去「脆弱性スキャナVuls」のOSS活動もしており、自称エバンジェリスト/技術広報/テクニカルサポート/コントリビュータでもある。