AWS CodeBuild で AWS S3 にアップロードする方法

AWS CodeBuild で AWS S3 にアップロードする方法

CI/CD

近年、 CI/CD により自動で本番環境を用意するプロジェクトが多く見られます。
CI/CD のサービスも多くありますが、 AWS にも AWS CodePipeline が用意されており、弊社でも利用しています。
一度環境を整えると、あとは全て自動なので非常に便利なサービスです。
特に AWS CodePipeline の一つの機能に位置する AWS CodeBuild は、 Linux コマンドで開発者の自由に扱えるので重宝しています。

一方、軽量なプロジェクトの場合、 AWS CodeBuild は大袈裟なサービスのように思えます。
例えば、 HTML のような静的なファイルだけで完結するものの場合、 AWS S3 にアップロードするだけで終わるため、 AWS CodeBuild を用意する方が面倒に感じることもあります。しかし、それでも AWS CodeBuild で環境を整えておく方が、将来を見据えてトータルで見ると楽になるでしょう。

今回は、ただ単純に Git に Push されたファイルを AWS S3 にアップロードする AWS CodeBuild の設定を紹介します。ただしウェブフックを利用するため、 Git リポジトリは Bitbucket または GitHub を利用するようにしましょう。

手順

AWS S3

まずは AWS S3 にバケットを作成しておきましょう。今回は「xxx.yyy.zzz」バケットを例にします。


buildspec.yml

Git に Push するソースコードに buildspec.yml を追加します。

version: 0.2

phases:
  post_build:
    commands:
      - aws s3 sync --exact-timestamps ./ s3://xxx.yyy.zzz

AWS CodeBuild

それでは AWS CodeBuild でビルドプロジェクトを作成しましょう。


ソースプロバイダに Bitbucket または GitHub を Git リポジトリのサービスを指定します。

「プライマリソースのウェブフックイベント」の「ウェブフック」にチェックを入れます。またイベントタイプに「プッシュ」を選択しておけばいいでしょう。

しかし、まだこの段階では AWS S3 にアップロードする権限がない状態です。
ビルドプロジェクト作成後、プロジェクトのビルド詳細を確認します。その中の環境にあるサービスロールをクリックし、IAMへ移動してください。

IAM

インラインポリシーを作成し、AWS S3 に対する権限を付与します。

名前: S3_xxx.yyy.zzz

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "SidS3XXXYYYZZZ",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:ListBucket",
                "s3:GetBucketAcl",
                "s3:GetBucketLocation",
                "s3:GetObjectVersion"
            ],
            "Resource": [
                "arn:aws:s3:::xxx.yyy.zzz/*",
                "arn:aws:s3:::xxx.yyy.zzz"
            ]
        }
    ]
}
以上で設定は完了です。 Git に Push するなどし、 AWS CodeBuild を動かしてみましょう。無事 AWS S3 にアップロードできるでしょう。

まとめ

Git に Push されたファイルを AWS S3 にアップロードする AWS CodeBuild の設定を紹介しました。
設定前は、ただ AWS S3 にアップロードするだけだから手動でする方が多くみられますが、これが何度も何度もとなるとトータルで見ると自動でアップロードされるほうが圧倒的に効率的です。ぜひこれで作業を楽にしてください。
» エンジニア登録はこちら