CircleCI+AWS-CodedeployでStaging環境などに自動デプロイさせる

やりたいこと

CircleCI+AWS-CodedeployでStaging環境などに自動デプロイさせたい。

AWS-Codedeploy

AWS-Codedeployは現在、以下の2つの方法でデプロイができます。

  • S3に上げたソースコードを展開
  • Github上のソースのcommitハッシュを指定して展開

CircleCIでAWS-Codedeployというと大抵の場合はS3方式を利用しています。
ちなみに本家のdocもそうなってます。他のqiita記事もたいていは。
https://circleci.com/docs/1.0/continuous-deployment-with-aws-codedeploy/

ここではS3に固めて上げる冗長な作業は抜きでGithub+コミット番号から直接デプロイする方法で行います。

AWS-Codedeployにて(ConsoleUIとか)

  1. デプロイ対象のサーバにcodedeploy-agentをインストールしておく。
  2. アプリケーションを作成する(割愛)。
  3. appspec.ymlでデプロイコマンドなどを用意する(割愛)。
  4. 一度、デプロイメントを作成して、Github経由で更新が出来ることを確認しておく。
    ※説明の便宜上、アプリケーションネームをappA-name、デプロイグループをappA-deploy-groupとします。
aws deploy create-deployment --application-name appA-name --deployment-group-name appA-deploy-group --github-location repository="your/repository",commitId="0a684afc0c38e97f35023e404cff543d825f43b4"

CLIがだめだったらWebUI上でデプロイメントを作成して試す。

CircleCIにて

  1. AWS IAMロールを作成する。(Codedeployのポリシーつける)
  2. デプロイするユーザに紐付ける。
  3. aws_access_key_idaws_secret_access_keyを発行する。
  4. CircleCIのWebUIで設定する。画像参照。
    Project settingsCircleCI.png

FYI: https://circleci.com/docs/1.0/continuous-deployment-with-aws-codedeploy/

config.yml の作成

あとは .circleci/config.yml からaws-cliコマンド叩けばOK。

version: 2
jobs:
  build:
      〜省略〜
  deploy:
    docker:
      - image: cdssnc/aws-cli
    steps:
      - run:
          name: "Set AWS region"
          command: aws configure set region ap-northeast-1
      - run:
          name: "Deploy Staging"
          command: aws deploy create-deployment --application-name appA-name --deployment-group-name appA-deploy-group --github-location repository="your/repository",commitId="$CIRCLE_SHA1"
workflows:
  version: 2
  build_deploy:
    jobs:
      - build
      - deploy:
          requires:
            - build
          filters:
            branches:
              only: master

※ regionはセットしないとエラーになるので、必須です。

これでmasterブランチに何かがマージされた場合、
circleCIからAWS-Codedeployが実行されてStagingなどが自動で更新されます。
AWS-Codedeployだけあれば、踏み台サーバも要らないのでセキュリティ的にも安全なのでオススメです。

おしまい。