AWS へのデプロイ
このノウハウガイドでは、CircleCIをAmazon Web Servicesにデプロイするための設定方法について説明します。
はじめに
このページでは S3、ECR/ECS (Elastic Container Registry/Elastic Container Service) へのデプロイや AWS Code Deploy を使ったアプリのデプロイについて説明します。
AWS S3 Orb、ECS Orb、ECR Orb、CodeDeploy Orb の詳細については、下記の Orb レジストリのページを参照してください。
上記の Orb に加えて、デプロイに焦点をあてた AWS CircleCI イメージ cimg/aws を作成しました。
AWS S3 Orb を使用した S3 へのデプロイ
AWS S3 Orb の詳細については、 CircleCI AWS S3 Orb のページを参照してください。 このセクションでは、AWS S3 Orb と version: 2.1
の設定を使っで簡単にデプロイする方法の詳細を説明します。下記では、同じ例で Orb を使用せず version: 2
の設定を使った場合も紹介します。
1. IAM ユーザーを作成
セキュリティ上のベストプラクティスとして、CircleCI 専用の新しい IAM ユーザー を作成します。
2. AWSのアクセスキーを追加
AWS アクセスキー を CircleCI に追加します (アクセスキー ID を AWS_ACCESS_KEY_ID
という変数に保存し、シークレットアクセスキーを AWS_SECRET_ACCESS_KEY
という変数に保存します)。
3. Orb を使用してデプロイ
Orb の sync
コマンドを使ってデプロイします。 build
ジョブが終了し、現在のブランチが main
である場合にのみ、ワークフローを使用してデプロイしてください。
この例では必ずプレースホルダーのバージョンを置き換えてください。
version: 2.1
orbs:
aws-s3: circleci/aws-s3@x.y.z # use the AWS S3 orb in your configuration
workflows: # Define a Workflow running the build job, then the deploy job
version: 2
build-deploy: # Make a workflow to build and deploy your project
jobs:
- build
- deploy:
requires:
- build # Only run deploy job once the build job has completed
filters:
branches:
only: main # Only deploy when the commit is on the Main branch
jobs: # Define the build and deploy jobs
build:
docker: # Use the Docker executor for the build job
- image: <image-name-and-tag> # Specify the Docker image to use for the build job
auth:
username: mydockerhub-user
password: $DOCKERHUB_PASSWORD # context / project UI env-var reference
...
2.0 の設定を使用した AWS S3 へのデプロイ
1. IAM ユーザーを作成
セキュリティ上のベストプラクティスとして、CircleCI 専用の新しい IAM ユーザー を作成します。
2. AWSのアクセスキーを追加
AWS アクセスキー を CircleCI に追加します (アクセスキー ID を AWS_ACCESS_KEY_ID
という変数に保存し、シークレットアクセスキーを AWS_SECRET_ACCESS_KEY
という変数に保存します)。
3. デプロイジョブの作成
.circleci/config.yml
ファイルで、新しい deploy
ジョブを作成します。 deploy
ジョブで、プライマリコンテナに awscli
をインストールするステップを追加します。
4. AWS CLI のインストール
AWS CLI に関するドキュメント に従って、プライマリコンテナに awscli
をインストールします。
5. AWS CLIでデプロイ
AWS CLI を使用 して、アプリケーションを S3 にデプロイするか、他の AWS 操作を実行します。 build ジョブが終了し、現在のブランチが main
である場合にのみ、ワークフローを使用してデプロイしてください。
この例では必ずプレースホルダーのバージョンを置き換えてください。
version: 2.1
workflows: # Define a Workflow running the build job, then the deploy job
build-deploy:
jobs:
- build
- deploy:
requires:
- build
filters:
branches:
only: main # Only deploys when the commit is on the Main branch
jobs:
build:
docker: # Specify executor for running build job - this example uses a Docker container
- image: <docker-image-name-tag> # Specify docker image to use
auth:
username: mydockerhub-user
password: $DOCKERHUB_PASSWORD # context / project UI env-var reference
... # build job steps omitted for brevity
deploy:
docker: # Specify executor for running deploy job
- image: <docker-image-name-tag> # Specify docker image to use
auth:
username: mydockerhub-user
password: $DOCKERHUB_PASSWORD # context / project UI env-var reference
steps:
- run: # Install the AWS CLI if it is not already included in the docker image
name: Install awscli
command: sudo pip install awscli
- run: # Deploy to S3 using the sync command
name: Deploy to S3
command: aws s3 sync <path/to/bucket> <s3://location/in/S3-to-deploy-to>
AWS CLI のコマンドとオプションの全一覧は、 AWS CLI コマンドリファレンス でご覧いただけます。
AWS ECR への Docker イメージのデプロイ
AWS ECR Orb を使うと、最小限の設定で AWS へのログイン、ビルド、Docker イメージの AWS Elastic Container Registry へのプッシュが可能です。 すべてのパラメーター、ジョブ、コマンド、オプションのリストは、 Orb レジストリのページ を参照してください。
下記のように build-and-push-image
ジョブを使う場合は、環境変数 AWS_ECR_ACCOUNT_URL
、ACCESS_KEY_ID
、SECRET_ACCESS_KEY
、AWS_DEFAULT_REGION
を設定する必要があります。
この例では必ずプレースホルダーのバージョンを置き換えてください。
version: 2.1
orbs:
aws-ecr: circleci/aws-ecr@x.y.z # Use the AWS ECR orb in your configuration
workflows:
build_and_push_image:
jobs:
- aws-ecr/build-and-push-image: # Use the pre-defined `build-and-push-image` job
dockerfile: <my-Docker-file>
path: <path-to-my-Docker-file>
profile-name: <my-profile-name>
repo: <my-ECR-repo>
tag: <my-ECR-repo-tag> # default - latest
AWS ECS インスタンスのアップデート
下記のように build-and-push-image
ジョブを使う場合は、環境変数 AWS_ECR_ACCOUNT_URL
、ACCESS_KEY_ID
、SECRET_ACCESS_KEY
、AWS_DEFAULT_REGION
を設定する必要があります。
この例では必ずプレースホルダーのバージョンを置き換えてください。
version: 2.1
orbs:
aws-ecr: circleci/aws-ecr@x.y.z # Use the AWS ECR orb in your configuration
aws-ecs: circleci/aws-ecs@x.y.z # Use the AWS ECS orb in your configuration
workflows:
build-and-deploy:
jobs:
- aws-ecr/build-and-push-image:
dockerfile: <my-Docker-file>
path: <path-to-my-Docker-file>
profile-name: <my-profile-name>
repo: ${MY_APP_PREFIX}
tag: '${CIRCLE_SHA1}'
- aws-ecs/deploy-service-update:
requires:
- aws-ecr/build-and-push-image # only run the deployment job once the build and push image job has completed
family: '${MY_APP_PREFIX}-service'
cluster: '${MY_APP_PREFIX}-cluster'
container-image-name-updates: 'container=${MY_APP_PREFIX}-service,tag=${CIRCLE_SHA1}'
AWS CodeDeploy
AWS CodeDeploy Orb を使用すると、AWS CodeDeploy を通じてデプロイを実行できます。
この例では必ずプレースホルダーのバージョンを置き換えてください。
version: 2.1 # use 2.1 to make use of orbs and pipelines
orbs:
aws-code-deploy: circleci/aws-code-deploy@x.y.z # Use the AWS CodeDeploy orb in your configuration
workflows:
deploy_application:
jobs:
- aws-code-deploy/deploy:
application-name: <my-application> # The name of an AWS CodeDeploy application associated with the applicable IAM user or AWS account.
deployment-group: <my-deployment-group> # The name of a new deployment group for the specified application.
service-role-arn: <my-deployment-group-role-ARN> # The service role for a deployment group.
bundle-bucket: <my-application-S3-bucket> # The s3 bucket where an application revision will be stored.
bundle-key: <my-S3-bucket-key> # A key under the s3 bucket where an application revision will be stored.