Bitbucket Pipelines で AWS CodeDeploy する

Bitbucket Pipelines からそのままAWS CodeDeployをつかってAWSにデプロイする設定を解説します。

47f0de8f8c4fe90386fa7cde4936fd91

Bitbucket Pipelines のフローの中で、AWS S3 にデプロイ対象を配置するのと、AWS CodeDeploy を呼び出すところがポイントです。

 

前提条件

前提条件は、3つです。

  • S3 バケットを作成する
  • AWS CodeDeploy アプリケーションデプロイを用意する
  • AWS 権限の設定

S3 バケットの作成は、S3 を有効にするだけです。

 

AWS 権限の設定

AWS 権限の設定は、連携で使用するユーザーに対して、S3 と CodeDeploy の権限を与えることを指します。

IAM のコンソールに移動し、ユーザーを新規に追加します。

2016-10-28-17.19.40

私の環境では、 CodeDeployer というユーザーを作成しています。名前は任意で構いません。クリックすると、「アクセス許可」タブがありますので、クリックします。

2016-10-28-17.22.16[ポリシーのアタッチ] をクリックします。

7099402eedacd09027629e581245226b

「AmazonS3FullAccess」と「AWSCodeDeployFullAccess」の二つをアタッチします。ここで設定したポリシーは、あくまで最低限のものです。利用シナリオによってより多くの権限を必要とすることになりますので、適時追加しましょう。

Bitbucket Pipelines の設定

Bitbucket Pipelines の設定に入ります。実施すべきは、以下になります。

  • Pipelines の有効化
  • 環境変数の設定

 

Pipelines の有効化

Pipelines を有効にするには、リポジトリに何かファイルが格納されていることが前提となります。従って、Bitbucket でまずリポジトリを作成したら、そこになんらかのファイルを push します。

ファイルについては、先に紹介した AWS Labs に  CodeDeploy のサンプルアプリケーション用のファイル一式がありますので、まずそれを登録してみましょう。

https://bitbucket.org/awslabs/aws-codedeploy-bitbucket-pipelines-python/

 

「ダウンロード」にてコードを取得できるので今回はこれで取得します。もちろん、リポジトリをフォークしたり、クローンしても構いません。

入手できたら、そのファイル一式を自分が作成したリポジトリに Push します。

リポジトリにファイルがあれば、Pipelines を有効にすることができます。リポジトリの設定をクリックします。

2016-10-28-17.32.39

Pipelines の Settings をクリックします。「Enable Pipelines」を有効にします。

2016-10-28-18.04.36

以上です。

 

環境変数の設定

Bitbucket Pipelines での環境変数の設定は、リポジトリの設定にあります。

今回利用したいリポジトリの「設定」をクリックします。

2016-10-28-18.05.40

ここで設定する環境変数は、以下です。

  • AWS_SECRET_ACCESS_KEY
  • AWS_ACCESS_KEY_ID
  • AWS_DEFAULT_REGION
  • APPLICATION_NAME
  • DEPLOYMENT_CONFIG
  • DEPLOYMENT_GROUP_NAME
  • S3_BUCKET

これらの環境変数は、codedeploy_deploy.py の中で使われています。

AWS_ACCESS_KEY_ID  AWS_SECRET_ACCESS_KEY は、デプロイ用のユーザーのものを使用します。ユーザー作成時に提供されているのでそれをメモしておきましょう。[Secured] にチェックを入れることをお勧めします。

AWS_DEFAULT_REGION には、自分が使っている AWS のリージョンを指定します。私の場合は、東京リージョンなので、 ap-northeast-1 となります。リージョンのリストはこちらにあります。

残りは、各自の S3 の設定、AWS CodeDeploy サンプルアプリで定めたものを利用します。CodeDeploy の設定は私のは既定値を使っているので参考にしてください。

2016-10-28-18.17.00

 

Pipelines で実行

 

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 へのデプロイ指示が含まれています。

26d0f9d91d18d5a1a9372f4db0d21a8a

こちらは、CI の結果の一覧です。ブランチ単位で結果をフィルタリングすることもできることがわかります。

c12c7c093c7d127aca340b24f074102cまた、プルリクエスト作成時にも CI の結果を確認することができますし、レビュワーにも CI 結果を知らせることができます。

10a473ab3e9744203aa52ee7afd6026c

1 comment

Oleksandr Kyrdan
Atlassian Team
Atlassian Team members are employees working across the company in a wide variety of roles.
August 9, 2019

Hi @Tomo ,


if you need AWS CodeDeploy in your Bitbucket Pipelines you can use pipe aws-code-deploy 

Also, more available pipes you can discover on the Bitbucket Pipes page.

Cheers,
Alex

Comment

Log in or Sign up to comment
TAGS
AUG Leaders

Atlassian Community Events