無料でビルドを開始
CircleCI.comアカデミーブログコミュニティサポート

AWS へのデプロイ

1+ year ago1 min read
クラウド
Server v4.x
Server v3.x
このページの内容

このノウハウガイドでは、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_URLACCESS_KEY_IDSECRET_ACCESS_KEYAWS_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 インスタンスのアップデート

AWS ECR Orb と ECS Orb を使って既存の AWS ECS インスタンスを簡単にアップデートすることができます。

下記のように build-and-push-image ジョブを使う場合は、環境変数 AWS_ECR_ACCOUNT_URLACCESS_KEY_IDSECRET_ACCESS_KEYAWS_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.

Suggest an edit to this page

Make a contribution
Learn how to contribute