[AWS][CI/CD]BitbucketからビルドしてS3への自動デプロイ


CodePipelineを使ってBitbucketからS3への自動デプロイした手順の忘備録。
あとソースファイルがGitHubでもデプロイ先がEC2でもそんなに手順変わらないと思う。

公式のチュートリアル↓
チュートリアル 使用するパイプラインを作成する Amazon S3 導入プロバイダーとして - AWS CodePipeline

事前準備

  • Bitbucketレポジトリの作成
  • S3バケットの作成

CodePipelineの作成

CodePipelineにアクセスしてパイプライを作成をクリック

サービス > CodePipeline へアクセス
リージョンを東京に選択したのち、パイプラインを作成をクリックする。
(ここでリージョンを選択し忘れて再作成したら、ロールのリージョンが違って権限拒否されたりして酷い目にあった・・・)

パイプラインの設定を選択する

パイプライン名を入力する。
それ以外はデフォルトで次に。

ソースステージを追加する

Bitbucketを選択すると、以下のような画面が表示される。
Bitbucketに接続をクリック。

Bitbucketに接続する

接続名を入力して、Bitbucketに接続をクリック。

ローディング表示がされないけど(多分バグだと思う)、しばらく経つと次の画面に行く。


新しいアプリをインストールするをクリック。

新しいアプリをインストールする

接続したいワークスペース管理者の名前を選択して、アクセスを許可するをクリック。
(ワークスペース管理者じゃないとリポジトリ接続できない)

前の画面に戻るので、必要な情報を入力する。
リポジトリ名に候補が表示されない場合、手打ちで入力すると接続できたりする。(しばらくこれに気づかなくて試行錯誤してた・・・)

次にをクリック。

ビルドステージを追加する

※特にビルドするものがない場合、ビルドステージはスキップできる。

AWS CodeBuildを選択すると、以下のような画面が表示される。
プロジェクトを作成するをクリック。

CodeBuildの作成

プロジェクト名を入力する。

ビルドを実行するためのイメージを選択する。
OSは執筆時点でAmazon Linux2とubuntuが選べる。好きなの選べばいいと思う。

それ以外はデフォルト。


CodePipelineに進むをクリック。
すると前の画面に戻るので次にをクリック。

デプロイステージを追加する

Amazon S3、リージョン、バケットを入力してデプロイする前にファイルを抽出するをチェックする。(これをチェックしないと展開されずにzipファイルが出力されてしまう)
次にをクリック。

確認画面が表示される。
パイプラインを作成するをクリック。

ビルド&デプロイしてみる

ビルド設定ファイルの作成

ビルドのための設定ファイルbuildspec.ymlをプロジェクトのルートディレクトリに作成する。
記事では省略したけど、実際にはCloudFrontも使ってたのでディストリビューションのキャッシュ削除の処理を入れた。

ファイルの書き方は一般的なCI設定と同じような感じ。
artifactsでデプロイしたいファイルを指定する。今回は全てのファイル。
環境変数はAWSコンソールのCodePipelineもしくはCodeBuildの画面から設定できる。

buildspec.yml
version: 0.2

phases:
  build:
    commands:
      - echo Build started on `date`
      - aws cloudfront create-invalidation --distribution-id ${DISTRIBUTION_ID} --paths "/*"
artifacts:
  files:
    - '**/*'

リモートリポジトリにPush

上記をコミットしてGitbuketのリモートリポジトリにgit pushする。

デプロイされているかを確認

CodePipeline へアクセスし、履歴を確認する。

成功したら、S3へデプロイされているか確認。


OK。

これでgit pushするたびにビルド&デプロイされるようになります。

おしまい。

追記

なんか情報少ないなーと思ったら、2020/11に機能追加したばっかりだったみたいです。
AWS CodeCommit の AWS CodePipeline ソースアクションで git クローンのサポートを開始