CircleCIからAWS Code Deployを実行する


前記事にてCodeDeployの設定は完了したので、それをCircleCIから実行します。

公式の手順ではS3に一度ソースコードを置いてからEC2に展開しているのですが、
できればS3は使いたくなかったのでこちらの記事を参考にしました。
CircleCI+AWS-CodedeployでStaging環境などに自動デプロイさせる

IAM準備

CircleCI用のIAMユーザーを作成します。
まず適当なユーザー名をつけ、アクセスの種類は『プログラムによるアクセス』にチェックをつけ次のステップへ進みます。

既存ポリシーの『AWSCodeDeployFullAccess』を付与して次のステップへ進みます。

タグは不要なので、そのまま次のステップに進んで大丈夫です。

ユーザーの作成をします。

作成したユーザーの「アクセスキーID」と「シークレットアクセスキー」をメモして終了です。
※シークレットアクセスキーはこのタイミングでしか確認できないので忘れないよう注意

CircleCIの設定ファイル作成

リポジトリ内に.circleci/config.ymlを作成し、以下のように記載します。

version: 2
jobs:
  deploy:
    docker:
      - image: cdssnc/aws-cli
    steps:
      - run:
          name: "Set AWS region"
          command: aws configure set region ap-northeast-1
      - run:
          name: "Run AWS CodeDeploy"
          command: aws deploy create-deployment --application-name ${DEPLOY_APPLICATION} --deployment-group-name ${DEPLOY_GROUP} --github-location repository="${DEPLOY_REPOSITORY}",commitId="${CIRCLE_SHA1}"
workflows:
  version: 2
  build_deploy:
    jobs:
      - deploy:
          filters:
            branches:
              only: master

AWS CodeDeployをキックすることしか記載していないので、他にも処理が必要な場合は追記してください。

なお、以下の値は後ほどCircleCIの環境変数にて設定するので変数にしています。
変数にせずに直接config.ymlに書き込んでも良いです。

変数名 内容
DEPLOY_APPLICATION 前記事にて設定したCodeDeployのアプリケーション名
DEPLOY_GROUP 前記事にて設定したCodeDeployのデプロイグループ
DEPLOY_REPOSITORY デプロイ対象のGitHubリポジトリ(「ユーザー名/リポジトリ名」形式)

作成できたらGitHubのmasterブランチにプッシュしておきます。

CircleCIの設定

まずCircleCIにさきほどのconfig.ymlに設定した環境変数を設定します。

CircleCIの基本的な設定はこちらを参照してください。

次に作成したAWSのIAMユーザーのキーを設定します。
CircleCIのプロジェクトの設定画面を開き(プロジェクト画面で歯車ボタンをクリック)
『PERMISSIONS > AWS Permissions』を開くと設定できます。

これで設定は完了です。
masterブランチにマージorプッシュされるとCircleCIとCodeDeployが走って自動デプロイされます。