Bitbucket Pipelines からそのままAWS CodeDeployをつかってAWSにデプロイする設定を解説します。
Bitbucket Pipelines のフローの中で、AWS S3 にデプロイ対象を配置するのと、AWS CodeDeploy を呼び出すところがポイントです。
前提条件は、3つです。
S3 バケットの作成は、S3 を有効にするだけです。
AWS 権限の設定は、連携で使用するユーザーに対して、S3 と CodeDeploy の権限を与えることを指します。
IAM のコンソールに移動し、ユーザーを新規に追加します。
私の環境では、 CodeDeployer というユーザーを作成しています。名前は任意で構いません。クリックすると、「アクセス許可」タブがありますので、クリックします。
[ポリシーのアタッチ] をクリックします。
「AmazonS3FullAccess」と「AWSCodeDeployFullAccess」の二つをアタッチします。ここで設定したポリシーは、あくまで最低限のものです。利用シナリオによってより多くの権限を必要とすることになりますので、適時追加しましょう。
Bitbucket Pipelines の設定に入ります。実施すべきは、以下になります。
Pipelines を有効にするには、リポジトリに何かファイルが格納されていることが前提となります。従って、Bitbucket でまずリポジトリを作成したら、そこになんらかのファイルを push します。
ファイルについては、先に紹介した AWS Labs に CodeDeploy のサンプルアプリケーション用のファイル一式がありますので、まずそれを登録してみましょう。
https://bitbucket.org/awslabs/aws-codedeploy-bitbucket-pipelines-python/
「ダウンロード」にてコードを取得できるので今回はこれで取得します。もちろん、リポジトリをフォークしたり、クローンしても構いません。
入手できたら、そのファイル一式を自分が作成したリポジトリに Push します。
リポジトリにファイルがあれば、Pipelines を有効にすることができます。リポジトリの設定をクリックします。
Pipelines の Settings をクリックします。「Enable Pipelines」を有効にします。
以上です。
Bitbucket Pipelines での環境変数の設定は、リポジトリの設定にあります。
今回利用したいリポジトリの「設定」をクリックします。
ここで設定する環境変数は、以下です。
これらの環境変数は、codedeploy_deploy.py の中で使われています。
AWS_ACCESS_KEY_ID と AWS_SECRET_ACCESS_KEY は、デプロイ用のユーザーのものを使用します。ユーザー作成時に提供されているのでそれをメモしておきましょう。[Secured] にチェックを入れることをお勧めします。
AWS_DEFAULT_REGION には、自分が使っている AWS のリージョンを指定します。私の場合は、東京リージョンなので、 ap-northeast-1 となります。リージョンのリストはこちらにあります。
残りは、各自の S3 の設定、AWS CodeDeploy サンプルアプリで定めたものを利用します。CodeDeploy の設定は私のは既定値を使っているので参考にしてください。
Bitbucket Pipelines では、コードなどをコミットした段階で継続的インテグレーションが実行されます。記述は、bitbucket-pipelines.yml にするだけというシンプルな構成ですが、これで Docker イメージを用いたビルドとテスト、そしてデプロイを行うことができます。
今回は、このデプロイのところで、AWS CodeDeploy を活用したという位置付けになります。
今回の yaml ファイルの中身は以下です。
image: python:3.5.1 pipelines: branches: master: - step: script: - apt-get update # required to install zip - apt-get install -y zip # required for packaging up the application - pip install boto3==1.3.0 # required for codedeploy_deploy.py - zip -r /tmp/artifact.zip * # package up the application for deployment - python codedeploy_deploy.py # run the deployment script
Docker イメージの python:3.5.1 を用いています。また、CI の実行は、master ブランチのみです。ステップとしてスクリプトを実行しています。
ちなみに、すべてのブランチを対象にしたい場合は、‘**’ と指定するとよいです。
今回のサンプルでは、codedeploy_deploy.py に ASW CodeDeploy 用の記述があります。そこでは、S3 Bucket へのビルド結果のアップロードと CodeDeploy へのデプロイ指示が含まれています。
こちらは、CI の結果の一覧です。ブランチ単位で結果をフィルタリングすることもできることがわかります。
また、プルリクエスト作成時にも CI の結果を確認することができますし、レビュワーにも CI 結果を知らせることができます。
Tomo
1 comment