[アップデート] AWS CodeBuild の Buildspec で Steps フェーズが追加され、GitHub Actions が使えるようになりました

2023.07.08

いわさです。

AWS CodeBuild では Buildspec というビルド定義を YAML 形式で記述することで、CodeBuild が実行するステップを構成することが出来ます。
これまでは主に Build/Commands で独自にビルド用のコマンドを実行することで構築していました。

本日のアップデートで、CodeBuild の Buildspec に Steps フェーズが追加され、GitHub Marketplace で公開されているアクションが使えるようになりました。

これによって、独自にコマンドを定義するのではなく事前にコミュニティやサードパーティプロバイダーによって提供されているアクションを再利用し、簡単にビルドやデプロイの定義を行うことが出来るようになりそうです。

仕様について

GitHub Actions の実行は追加料金なしでサポートされています。
従来と同様に CodeBuild 上のコンテナ内で実行されます。

ただし、利用にあたっていくつか制限事項があります。

  • Pull Request や Issue を操作する(デプロイやテスト後にアップデートやクローズするとか)ようなアクションは機能しないと解説されている
  • 実行環境が Windows の CodeBuild プロジェクトではサポートされていない
  • CodeBuild 実行コンテナがインターネットアクセス出来る必要がある
  • CodeBuild 実行コンテナの特権付与モードでは利用不可
  • Job 機能は未サポート

詳細は以下も確認してください。

Limitations of the GitHub action runner in CodeBuild

使ってみる

GitHub Marketplace の適当なコマンドで早速試してみました。

Setup .NET Core SDK を使ってみる

今回はビルド環境に指定した .NET SDK バージョンを導入してくれる次のアクションを使ってみます。

まず、使わなかった場合の動作を確認してみます。
Buildspec に次のように定義しました。ちなみに今回はマネジメントコンソール上で直書きしています。

CodeBuild 実行環境は Amazon Linux 2 イメージの最新版を使っています。
プロジェクトを実行してみると次のような結果となりました。

デフォルトで6.0.408がセットアップされていました。

では、次のように Steps を追加して .NET 7.0.203 をセットアップさせてみます。

version: 0.2

phases:
  build:
    steps:
      - uses: actions/setup-dotnet@v3
        id: stepid
        with:
          dotnet-version: 7.0.203
    commands:
      - dotnet --version

stepscommandsどちらが先に実行されるんだろう?という疑問はありつつあえてこのままやってみましょう。
結果は次のようになりました。

Each build phase supports either a list of commands or a list of steps, but both cannot be used in the same phase.

上記のようにstepscommandsは併用が出来ないです。
このあたりは公式ドキュメント上も記述されています。

各ステップでrunはサポートされているので、従来commandsで実行していた内容でそのままsteps内で使いたいものはrunで定義してやると良さそうです。

version: 0.2

phases:
  build:
    steps:
      - uses: actions/setup-dotnet@v3
        id: stepid
        with:
          dotnet-version: 7.0.203
      - run: dotnet --version

実行してみると次のように7.0.203がセットアップされていることが確認出来ました。

アクションのダウンロードに失敗して苦しむ

任意のアクションを使おうとした際に、最初次のようなエラーが出てビルドに失敗し続けていました。
同じようにうまく動かない方のために解決方法を共有しておきます。

[warning]Failed to download action 'https://api.github.com/repos/actions/setup-dotnet/tarball/v3'. Error: Response status code does not indicate success: 401 (Unauthorized).

今回の機能で GitHub Actions を使う場合、匿名ダウンロードによるレート制限を回避するために、CodeBuild を GitHub アカウントへ接続する必要があります。

CodeBuild のソースプロバイダが GitHub の場合はそのまま接続が使われるので問題ありません。
GitHub 以外のソースプロバイダー、例えば CodeCommit を使っている場合などは次のように個別に GitHub に接続する必要があります。

さいごに

本日は AWS CodeBuild の Buildspec で Steps フェーズが追加され、GitHub Actions が使えるようになったので使ってみました。

利用にあたっていくつか制限事項もあるのですが、今後の CodeBuild での Buildspec 定義方針が変わる可能性のあるアップデートだと思います。
最初 GitHub 接続なしの状態で CodeCommit で試してうまくいかなくてつらかった。