やりたいこと
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とか)
- デプロイ対象のサーバにcodedeploy-agentをインストールしておく。
- アプリケーションを作成する(割愛)。
- appspec.ymlでデプロイコマンドなどを用意する(割愛)。
- 一度、デプロイメントを作成して、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にて
- AWS IAMロールを作成する。(Codedeployのポリシーつける)
- デプロイするユーザに紐付ける。
-
aws_access_key_id
とaws_secret_access_key
を発行する。 - CircleCIのWebUIで設定する。画像参照。
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だけあれば、踏み台サーバも要らないのでセキュリティ的にも安全なのでオススメです。
おしまい。