2020/11/08

AWS CodeBuildのArtifactsをS3に保存する

この記事ではCodeBuildでビルド中に作成されたArtifactsをS3に出力させる方法を解説していきます。CodeBuildでビルド中に作成された資材を保存したい方、AWS認定試験を受けようとしている方必見です!

CodeBuildを使用したことがないという方やCodeBuild上にまでプロジェクトを作成していないという方はこちらの記事もご覧ください!

S3バケットを作成する

まずはCodeBuildのビルド中に作成されたArtifactsを保存するS3バケットを作成していきます。

S3のコンソール画面に遷移して、「バケットを作成する」ボタンをクリックしましょう。

S3コンソール画面

「バケット名」を入力していきます(今回自分は「cicd-codebuild-artifacts1234321」と入力しました)。バケット名はドメイン名のように全リージョン・AWSアカウントで一意のものを入力する必要があるため、他の人が使っていなさそうな名前を入力していきましょう。もし他の人が使っているバケット名であれば、入力後エラーが出ると思います。

「リージョン」は自分の希望するリージョン名を選択しましょう(自分は「アジアパシフィック(東京)」を選択しました)。

ここまで入力が完了したら、一旦「作成」ボタンをクリックします。

バケットの作成

バケットの作成が完了しました。

バケット作成完了

一応出力されるArtifactsは機密なもののため、暗号化もかけておきましょう。

作成したバケットのバケット設定を編集する画面に遷移し、「プロパティ」タブを選択します。

そこから「デフォルト暗号化」を選択します。

バケット設定を編集

「なし」、「AES-256」、「AWS-KMS」の三種類選択できるようになっていると思います。

「AWS-KMS」はAWSサービスの KMSというサービスを使用して暗号化する際に使用するキーを管理し、暗号化を実施する手法です。

「AES-256」はS3で暗号化する際に使用するキーを管理し、暗号化を実施する手法です。

KMSを使用するとそれはそれで若干コストがかかるため、今回は「AES-256」を選択し、保存します。

デフォルト暗号化

デフォルト暗号化設定が完了しました。

デフォルト暗号化完了

IAMロールの設定を確認する

次にIAMロールの設定を確認します。CodeBuildからS3にArtifactsを保存するということで、CodeBuildのIAMロールにS3への書き込み権限が当たっていないといけません。

CodeBuildで使用するIAMロールの詳細を確認し、アクセス権限にS3への書き込み権限が当たっていることを確認します。もし当たっていなければS3への書き込みができるように権限を付与しましょう。

IAMロール概要

IAMロール詳細

buildspec.ymlファイル設定

次に、buildspec.ymlファイルでArtifactsを出力させるように設定をします。

「artifacts」を追加し、出力させたいArtifactsのパスやファイル名を記述します。今回は動作確認ということで、自分は全ファイルを出力させてみることとします(「'**/*'」で全ファイル出力することができます)。

詳細はAWS公式ページにも記載されているので、こちらも参照してみてください。

version: 0.2

phases: 
    install:
        runtime-versions:
            nodejs: 10
        commands:
            - echo "installing something"
    pre_build:
        commands: 
            - echo "we are in the pre build phase"
    build:
        commands:
            - echo "we are in the build block"
            - echo "we will run some tests"
    post_build:
        commands:
            - echo "we are in the post build phase"
artifacts:
    files:
        - '**/*'

アーティファクトを編集する

次にCodeBuildコンソール画面でアーティファクト出力設定を実施します。

該当のビルドプロジェクトのコンソール画面に遷移したら、「編集」のプルダウンメニューを開き、「アーティファクト」を選択します。

アーティファクト

アーティファクトを編集する画面に遷移したら、「タイプ」で「Amazon S3」を選択し、「バケット名」で先ほど作成したバケット名を選択します。

「アーティファクトのパッケージ化」ではサイズを圧縮するため、「Zip」を選択しましょう。

その他は適宜入力する必要があれば入力します。

アーティファクトを編集する

「サービスロールのアクセス許可」セクションでは「AWS CodeBuildにこのサービスロールの編集を許可し、このビルドプロジェクトでの使用を可能にする」にチェックを入れます。

「暗号化キー」ではArtifactsを暗号化する際にKMSを使用して暗号化を実施するなら、ここで使用する暗号化キーを選択します。

一通り入力が完了したら、「アーティファクト」の更新ボタンをクリックします。

サービスロールのアクセス許可

ビルドしてみる

ここまできたらビルドをしてみましょう。

ビルドの開始ボタンからビルドを開始します。

ビルド

ビルドが完了したら、S3バケットにアーティファクトが出力されているかどうか確認しにいきます。

S3バケット確認

アーティファクトが出力されていますね!!!

Artifact出力成功

まとめ

CodeBuildでビルドした後に生成されたファイルをS3に出力し、保存する方法を解説してきました。

CodeBuild内で実施したテスト結果や環境構築した後のソースコードなどもこれなら出力させることができそうですね。