AWS日記38 (AWS CodeBuild)

# はじめに
今回は [AWS CodeBuild](https://aws.amazon.com/jp/codebuild/) を試します。
GitHubのリポジトリからソースコードを取得し、ビルドし、出力されたアーティファクトファイルをS3に配置します。
[コンソールを使用した AWS CodeBuild の開始方法](https://docs.aws.amazon.com/ja_jp/codebuild/latest/userguide/getting-started.html)を参考にします。

# 準備
 - GitHubのリポジトリを作成
 - buildspec.ymlを作成
 - 出力先のS3バケットを作成

### buildspec.ymlを作成
 - ランタイムやビルドコマンドを記述します
 - 作成したファイルをリポジトリのルートに保存します
 - 参考
   - [ステップ 2: buildspec ファイルを作成する](https://docs.aws.amazon.com/ja_jp/codebuild/latest/userguide/getting-started-create-build-spec-console.html)
   - [ステップ 4: ソースコードと buildspec ファイルをアップロードする](https://docs.aws.amazon.com/ja_jp/codebuild/latest/userguide/getting-started-upload-source-code-console.html)
   - [使用可能なランタイム](https://docs.aws.amazon.com/ja_jp/codebuild/latest/userguide/available-runtimes.html)

```yml
version: 0.2

phases:
  install:
    runtime-versions:
      golang: 1.16
  pre_build:
    commands:
      - go mod tidy
      - /bin/bash scripts/create_template.sh
      - apt-get update
      - DEBIAN_FRONTEND=noninteractive apt-get -y install libgtk-3-dev libwebkit2gtk-4.0-dev
  build:
    commands:
      - echo Build started on `date`
      - cd src
      - GOOS=linux GOARCH=amd64 go build -ldflags="-s -w" -o `pwd`/../SimpleWebView
  post_build:
    commands:
      - echo Build completed on `date`
artifacts:
  files:
    - SimpleWebView
```

# CodeBuildのプロジェクト作成・ビルド実行

### プロジェクト作成
 - デベロッパー用ツール > CodeBuild > ビルドプロジェクト から 「ビルドプロジェクトを作成する」
![01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/586707/c3c0e1e9-b163-b98c-f16e-32e5a7296d3b.jpeg)

### プロジェクト名を入力
![02.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/586707/19ab541c-b19d-d8f0-6a5c-85e0c597b24c.jpeg)

### ソースの設定
 - ソースプロバイダをGitHubに設定
![03.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/586707/07d6e4d9-7f4b-4c20-374a-01abbef70654.jpeg)

 - リポジトリを「OAuthを使用して接続する」にして「GitHubに接続」をクリック
![05.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/586707/7a806b8d-67c9-f637-a31a-3f4835eeb425.jpeg)

 - 「Authorize aws-codesuite」をクリック
![06.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/586707/04f86c34-d321-32a3-cdc4-f4cb4ff82a4d.jpeg)

 - 「確認」をクリック
![07.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/586707/9429fa26-4311-05f8-56d7-295f42898d65.jpeg)

 - ソースの設定を確認
![08.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/586707/1b4ca242-fa1d-165a-8009-9957c5bb5938.jpeg)


### 環境の設定
 - buildspec.ymlで設定したランタイムから適切な値を設定します
   - 今回はruntime-versionsを「golang: 1.16」を設定したため
   オペレーティングシステムを「Ubuntu」
   ランタイムを「Standard」
   イメージを「aws/codebuild/standard:5.0」に設定します
 - 参考 [使用可能なランタイム](https://docs.aws.amazon.com/ja_jp/codebuild/latest/userguide/available-runtimes.html)
![09.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/586707/7b45c973-5615-5f80-14e4-cc93782318a7.jpeg)


### アーティファクトの設定
 - タイプを「Amazon S3」に設定します
 - 「準備」で作成したS3バケットのバケット名を設定します

![10.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/586707/dea95348-cda9-05c1-c607-4d94c9012b00.jpeg)


### 作成
![11.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/586707/779bd0b3-f0f0-fbd9-784c-cedbb082a21b.jpeg)


### 実行
 - 「ビルドを開始」をクリックします
![12.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/586707/8977bc59-5500-682c-b731-226f1e597d36.jpeg)

 - ビルド進行中の画面
   - 長時間経過しても終了しない場合や、出力されるログからビルドが完了しないと判断される場合は「ビルドの停止」をクリックします
   - 参考 [Docs » Docker Engine » よくある質問と回答(FAQ)](https://docs.docker.jp/v1.11/engine/faq.html#dockerfile-debian-frontend-noninteractive)
![13.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/586707/43786cad-ac0f-3b40-bc5c-77b1bd799764.jpeg)


# 確認
 - ビルドが完了すると、「準備」で作成したS3バケットにアーティファクトファイルが配置されます
![14.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/586707/c352a9bf-252e-84c0-814e-aabefda08873.jpeg)




# 終わりに
AWS CodeBuild を試しました。
CI/CD関連のサービスで[CodeCommit](https://aws.amazon.com/jp/codecommit/)、[CodeDeploy](https://aws.amazon.com/jp/codedeploy/)、[CodePipeline](https://aws.amazon.com/jp/codepipeline/)などがあるので、今後試していこうと思います。

##### 料金・無料利用枠
[AWS CodeBuild の料金](https://aws.amazon.com/jp/codebuild/pricing/)

##### 以下のイベントが記事作成の動機になりました
[AWS DevAx::connect シーズン 3 「rethink CI/CD」](https://pages.awscloud.com/JP2022_DevAxconnect_Season3.html?trk=aws_event_page_devaxconnect_s3)