AWS CodePipelineを使って、Githubで管理しているソースコードをCodeBuildでビルドしElasticBeanstalkのEC2上にデプロイする


はじめに

AWSのCodePipelineを使って、Githubで管理しているPHPのソースコードをCodeBuildでビルドし、ElasticBeanstalkで管理しているEC2上にデプロイする一連の作業の流れと注意するポイントを紹介します。

前提

  • ソースコードをGithubで管理している
  • ElasticBeanstalkでEC2インスタンスを管理している

流れ

  • CodePipelineでパイプラインを作成
    • ソースステージ(Github)を追加
    • AWS CodeBuildでビルドプロジェクトを作成し追加
    • デプロイステージ(ElasticBeanstalk)を追加

事前準備

buildspec.yml

プロジェクトのルートディレクトリ(Githubで管理しているリポジトリのルート)にbuildspec.ymlファイルを作成します。
buildspec.ymlファイルはCodeBuildでビルド時に自動で読み込まれ、さまざまなコマンドを実行することができます。

今回下記のような内容でbuildspec.ymlを用意しました。

  • ビルド時のコマンドの概要
    • composer.lockファイルを削除
    • vendorディレクトリを削除
    • composerを実行し各ライブラリを取得
  • ビルドで生成されたファイル(build artifact)の設定
buildspec.yml
version: 0.2
phases:
  build:
    commands:
      - |
        if [ -e composer.lock ]; then
          rm -r composer.lock
        fi
      - |
        if [ -e vendor ]; then
          rm -rf vendor
        fi
      - php -dmemory_limit=-1 composer.phar update --no-scripts --prefer-dist --no-interaction
      - |

artifacts:
  files:
    - ./**/*

buildspec.ymlの注意点

下記のartifactsのfilesに関する記述がないとビルド生成物を任意の場所に配置できず、正しく生成されないのでご注意ください。

artifacts:
  files:
    - ./**/*

詳細

パイプラインを作成

下記の内容でパイプラインを作成します。Service roleは新規作成していますが、既存のものを使う場合はExisting Service roleを選択してください。

ソースステージを追加

ソースステージを追加します。ソースプロバイダにGithubを選択します。この他AWS CodeCommit等も選択することもできます。

Githubに接続完了すると自分が管理しているリポジトリリストが表示され、リポジトリを選択するとブランチリストが表示されます。
変更検出オプションは、Github等で指定したブランチに変更が発生した際に自動でパイプラインを起動してくれます。

CodeBuildのプロジェクトを作成

次にCodeBuildでビルドするためのビルドプロジェクトを作成します。Project nameはパイプラインの名前と合わせておくと管理しやすいです。

ビルド環境を設定

ビルド環境の設定ですが、GithubのソースコードがPHP7なので、
CodeBuildがデフォルトで用意している下記の環境を選択しています。

  • Operating system: Ubuntu
  • Runtime: PHP
  • Runtime Version: aws/codebuid/php7.1

CodeBuildで用意されていない環境が必要な場合は、Custom Imageを選択し自前でDockerImageを用意する必要があります。

ビルドスペックを設定

ビルドスペックファイルは、ビルド時に様々なカスタムコマンドを実行することができます。

今回は"Use a buildspec file"を選択することで、ルートディレクトリに置いたbuildspec.ymlが使用されるように設定しています。

デプロイステージを追加

最後にデプロイステージを選択します。

デプロイプロバイダにElasticBeanstalkを選択すると、自分が管理しているアプリケーションリストと環境が表示されるのでデプロイ先を指定します。

内容を確認

以上で完了です。


これで正常にデプロイまで終了すればOKです。