

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# のセルフホスト型 GitHub Actions ランナー AWS CodeBuild
<a name="action-runner-overview"></a>

CodeBuild コンテナにセルフホスト型 GitHub Actions ランナーを設定して、GitHub Actions ワークフロージョブを処理するようにプロジェクトを構成できます。これは、CodeBuild プロジェクトを使用してウェブフックを設定し、CodeBuild マシンでホストされているセルフホスト型ランナーを使用するように GitHub Actions ワークフロー YAML を更新することによって実行できます。

GitHub Actions ジョブを実行するように CodeBuild プロジェクトを設定する大まかな手順は次のとおりです。

1. まだ行っていない場合は、個人用アクセストークンを作成するか、OAuth アプリに接続してプロジェクトを GitHub に接続します。

1. CodeBuild コンソールに移動し、ウェブフックを使用して CodeBuild プロジェクトを作成し、ウェブフックフィルタを設定します。

1. GitHub の GitHub Actions ワークフロー YAML を更新して、ビルド環境を設定します。

より詳細な手順については、「[チュートリアル: CodeBuild がホストする GitHub Actions ランナーを設定](action-runner.md)」を参照してください。

この機能を使用すると、GitHub Actions ワークフロージョブを とネイティブに統合できます。これにより AWS、IAM、統合、 AWS Secrets Manager Amazon VPC などの機能を通じてセキュリティ AWS CloudTrailと利便性が提供されます。ARM ベースのインスタンスなど、最新のインスタンスタイプにアクセスできます。

**Topics**
+ [CodeBuild がホストする GitHub Actions ランナーについて](action-runner-questions.md)
+ [チュートリアル: CodeBuild がホストする GitHub Actions ランナーを設定](action-runner.md)
+ [ウェブフックのトラブルシューティング](action-runner-troubleshoot-webhook.md)
+ [CodeBuild がホストする GitHub Actions ランナーでサポートされているラベルの上書き](sample-github-action-runners-update-labels.md)
+ [CodeBuild がホストする GitHub Actions ランナーでサポートされているコンピューティングイメージ](sample-github-action-runners-update-yaml.images.md)

# CodeBuild がホストする GitHub Actions ランナーについて
<a name="action-runner-questions"></a>

以下は、CodeBuild がホストする GitHub Actions ランナーに関する、よくある質問です。

## ラベルにイメージとインスタンスの上書きを含める必要があるのはいつですか。
<a name="action-runner-image-label"></a>

イメージとインスタンスの上書きをラベルに含めることで、GitHub Actions ワークフロージョブごとに異なるビルド環境を指定できます。これは、複数の CodeBuild プロジェクトやウェブフックを作成しなくても実行できます。例えば、[ワークフロージョブにマトリックス](https://docs.github.com/en/actions/using-jobs/using-a-matrix-for-your-jobs)を使用する必要がある場合に便利です。

```
name: Hello World
on: [push]
jobs:
  Hello-World-Job:
    runs-on:
      - codebuild-myProject-${{ github.run_id }}-${{ github.run_attempt }}
        image:${{ matrix.os }}
        instance-size:${{ matrix.size }}
    strategy:
      matrix:
        include:
          - os: arm-3.0
            size: small
          - os: linux-5.0
            size: large
    steps:
      - run: echo "Hello World!"
```

**注記**  
`runs-on` に GitHub Actions コンテキストを含む複数のラベルがある場合、引用符が必要になる場合があります。

## この機能 CloudFormation に を使用できますか?
<a name="action-runner-cfn"></a>

はい。プロジェクトのウェブフックで GitHub Actions ワークフロージョブイベントフィルターを指定するフィルターグループを CloudFormation テンプレートに含めることができます。

```
Triggers:
  Webhook: true
  FilterGroups:
    - - Type: EVENT
        Pattern: WORKFLOW_JOB_QUEUED
```

詳細については、「[GitHub ウェブフックイベントのフィルタリング (CloudFormation)](github-webhook-events-cfn.md)」を参照してください。

 CloudFormation テンプレートでプロジェクト認証情報の設定に関するヘルプが必要な場合は、*AWS CloudFormation 「 ユーザーガイド*」の[AWS::CodeBuild::SourceCredential](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codebuild-sourcecredential.html)」を参照してください。

## この機能を使用する際にシークレットをマスクするにはどうすればよいですか。
<a name="action-runner-secrets"></a>

デフォルトでは、ログに出力されるシークレットはマスクされません。シークレットをマスクする場合は、次の構文を使用できます。`::add-mask::value`。次に、YAML でこの構文を使用する方法の例を示します。

```
name: Secret Job
on: [push]
jobs:
  Secret-Job:
    runs-on: codebuild-myProject-${{ github.run_id }}-${{ github.run_attempt }}
    env:
      SECRET_NAME: "secret-name"
    steps:
      - run: echo "::add-mask::$SECRET_NAME"
```

詳細については、GitHub の「[Masking a value in a log](https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#masking-a-value-in-a-log)」を参照してください。

## 単一プロジェクト内の複数のリポジトリから GitHub Actions ウェブフックイベントを受信することはできますか。
<a name="action-runner-webhooks"></a>

CodeBuild は、指定された組織またはエンタープライズからイベントを受信する、組織レベルおよびグローバルレベルのウェブフックをサポートします。詳細については、「[GitHub グローバルおよび組織のウェブフック](github-global-organization-webhook.md)」を参照してください。

## CodeBuild がホストする GitHub Actions ランナーの使用をサポートしているリージョンはどれですか。
<a name="action-runner-hosted-regions"></a>

CodeBuild がホストする GitHub Actions ランナーは、すべての CodeBuild リージョンでサポートされています。CodeBuild が利用可能な AWS リージョン 場所の詳細については、[AWS 「リージョン別のサービス](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/)」を参照してください。

## CodeBuild がホストする GitHub Actions ランナーの使用をサポートしているプラットフォームはどれですか。
<a name="action-runner-platform"></a>

CodeBuild がホストする GitHub Actions ランナーは、Amazon EC2 と [AWS Lambda](lambda.md) コンピューティングの両方でサポートされています。Amazon Linux 2、Amazon Linux 2023、Ubuntu、Windows Server Core 2019 のプラットフォームを使用できます。詳細については、「[EC2 コンピューティングイメージ](ec2-compute-images.md)」および「[Lambda コンピューティングイメージ](lambda-compute-images.md)」を参照してください。

# チュートリアル: CodeBuild がホストする GitHub Actions ランナーを設定
<a name="action-runner"></a>

このチュートリアルでは、CodeBuild プロジェクトを設定して GitHub Actions ジョブを実行する方法について説明します。CodeBuild で GitHub Actions を使用する方法の詳細については、「[チュートリアル: CodeBuild がホストする GitHub Actions ランナーを設定](#action-runner)」を参照してください。<a name="sample-github-action-runners-prerequisites"></a>

このチュートリアルを完了するには、まず以下を行う必要があります。
+ 個人用アクセストークン、Secrets Manager シークレット、OAuth アプリ、または GitHub アプリに接続します。OAuth アプリを使用して接続する場合は、CodeBuild コンソールを使用して接続する必要があります。個人用アクセストークンを作成する場合は、CodeBuild コンソールを使用するか、[ImportSourceCredentials API](https://docs.aws.amazon.com/codebuild/latest/APIReference/API_ImportSourceCredentials.html) を使用できます。詳細な手順については、「[CodeBuild の GitHub および GitHub Enterprise Server アクセス](access-tokens-github-overview.md)」を参照してください。
+ CodeBuild を GitHub アカウントに接続します。これを行うには、次のいずれかで実行できます。
  + コンソールで GitHub をソースプロバイダーとして追加できます。個人用アクセストークン、Secrets Manager シークレット、OAuth アプリ、または GitHub アプリのいずれかを使用して接続できます。手順については、「[CodeBuild の GitHub および GitHub Enterprise Server アクセス](access-tokens-github-overview.md)」を参照してください。
  + GitHub 認証情報は、[ImportSourceCredentials API](https://docs.aws.amazon.com/cli/latest/reference/codebuild/import-source-credentials.html) 経由でインポートできます。これは、個人用アクセストークンでのみ実行できます。OAuth アプリを使用して接続する場合は、代わりにコンソールを使用して接続する必要があります。手順については、「[GitHub をアクセストークンで接続する（CLI）](access-tokens-github.md#access-tokens-github-cli)」を参照してください。
**注記**  
これを行う必要があるのは、アカウントで GitHub に接続していない場合のみです。

## ステップ 1: ウェブフックを使用して CodeBuild プロジェクトを作成
<a name="sample-github-action-runners-create-project"></a>

このステップでは、ウェブフックを使用して CodeBuild プロジェクトを作成し、GitHub コンソールで確認します。ソースプロバイダとして GitHub Enterprise を選択することもできます。GitHub Enterprise 内でウェブフックを作成する方法の詳細については、「[GitHub 手動ウェブフック](github-manual-webhook.md)」を参照してください。

**ウェブフックを使用して CodeBuild プロジェクトを作成するには**

1. [https://console.aws.amazon.com/codesuite/codebuild/home](https://console.aws.amazon.com/codesuite/codebuild/home) で AWS CodeBuild コンソールを開きます。

1. ビルドプロジェクトを作成します。詳細については、「[ビルドプロジェクトの作成 (コンソール)](create-project.md#create-project-console)」および「[ビルドの実行 (コンソール)](run-build-console.md)」を参照してください。

1. **[プロジェクトタイプ]** で、**[ランナープロジェクト]** を選択します。

   **[ランナー]** で、次のようにします。

   1. **[ランナープロバイダー]** で **[GitHub]** を選択します。

   1. **[ランナーの場所]** で、**[リポジトリ]** を選択します。

   1. **[リポジトリ]** の下にあるリポジトリ URL で、**https://github.com/user-name/repository-name** を選択します。
**注記**  
デフォルトでは、プロジェクトは単一リポジトリの `WORKFLOW_JOB_QUEUED` イベントのみを受信します。組織またはエンタープライズ内のすべてのリポジトリのイベントを受信する場合は、「[GitHub グローバルおよび組織のウェブフック](github-global-organization-webhook.md)」を参照してください。

1. 
   +  [**環境**] で以下の操作を行います。
     + サポートされている **[環境イメージ]** と **[コンピューティング]** を選択します。GitHub Actions ワークフロー YAML のラベルを使用して、イメージとインスタンスの設定を上書きするオプションがあることに注意してください。詳細については、[ステップ 2: GitHub Actions ワークフロー YAML を更新](#sample-github-action-runners-update-yaml)を参照してください。
   +  [**Buildspec (Buildspec)**] で、次のようにします。
     + `buildspec-override:true` がラベルとして追加されない限り、buildspec は無視されることに注意してください。代わりに、CodeBuild は、セルフホスト型ランナーを設定するコマンドを使用するように上書きします。

1. デフォルト値のまま続行し、**[ビルドプロジェクトを作成する]** を選択します。

1. `https://github.com/user-name/repository-name/settings/hooks` で GitHub コンソールを開き、ウェブフックが作成され、**[ワークフロージョブ]** イベントの配信が有効になっていることを確認します。

## ステップ 2: GitHub Actions ワークフロー YAML を更新
<a name="sample-github-action-runners-update-yaml"></a>

このステップでは、[https://github.com/](https://github.com/) で GitHub Actions ワークフロー YAML ファイルを更新してビルド環境を設定し、CodeBuild で GitHub Actions セルフホスト型ランナーを使用します。詳細については、「[Using labels with self-hosted runners](https://docs.github.com/en/actions/hosting-your-own-runners/managing-self-hosted-runners/using-labels-with-self-hosted-runners)」および「[CodeBuild がホストする GitHub Actions ランナーでサポートされているラベルの上書き](sample-github-action-runners-update-labels.md)」を参照してください。

### GitHub Actions ワークフロー YAML を更新
<a name="sample-github-action-runners-update-yaml.setup"></a>

[https://github.com/](https://github.com/) に移動し、GitHub Actions ワークフロー YAML の [https://docs.github.com/en/actions/hosting-your-own-runners/managing-self-hosted-runners/using-labels-with-self-hosted-runners](https://docs.github.com/en/actions/hosting-your-own-runners/managing-self-hosted-runners/using-labels-with-self-hosted-runners) の設定を更新して、ビルド環境を設定します。これを行うには、次のいずれかで実行できます。
+ プロジェクト名と実行 ID を指定できます。その場合、ビルドはコンピューティング、イメージ、イメージバージョン、インスタンスサイズに既存のプロジェクト設定を使用します。GitHub Actions ジョブの AWS関連の設定を特定の CodeBuild プロジェクトにリンクするには、プロジェクト名が必要です。YAML にプロジェクト名を含めることで、CodeBuild は正しいプロジェクト設定でジョブを呼び出すことができます。実行 ID を指定することで、CodeBuild はビルドを特定のワークフロー実行にマッピングし、ワークフロー実行がキャンセルされたときにビルドを停止します。詳細については、「[`github` context](https://docs.github.com/en/actions/learn-github-actions/contexts#github-context)」を参照してください。

  ```
  runs-on: codebuild-<project-name>-${{ github.run_id }}-${{ github.run_attempt }}
  ```
**注記**  
*<project-name>* が、前のステップで作成したプロジェクトの名前と一致していることを確認してください。一致しない場合、CodeBuild はウェブフックを処理せず、GitHub Actions ワークフローがハングする可能性があります。

  次に、GitHub Actions ワークフロー YAML の例を示します。

  ```
  name: Hello World
  on: [push]
  jobs:
    Hello-World-Job:
      runs-on:
        - codebuild-myProject-${{ github.run_id }}-${{ github.run_attempt }}
      steps:
        - run: echo "Hello World!"
  ```
+ ラベル内のイメージとコンピューティングタイプを上書きすることもできます。選別されたイメージのリストについては、「[CodeBuild がホストする GitHub Actions ランナーでサポートされているコンピューティングイメージ](sample-github-action-runners-update-yaml.images.md)」を参照してください。カスタムイメージの使用については、「[CodeBuild がホストする GitHub Actions ランナーでサポートされているラベルの上書き](sample-github-action-runners-update-labels.md)」を参照してください。ラベル内のコンピューティングタイプとイメージは、プロジェクトの環境設定を上書きします。CodeBuild EC2 または Lambda コンピューティングビルドの環境設定を上書きするには、次の構文を使用します。

  ```
  runs-on:
    - codebuild-<project-name>-${{ github.run_id }}-${{ github.run_attempt }}
      image:<environment-type>-<image-identifier>
      instance-size:<instance-size>
  ```

  次に、GitHub Actions ワークフロー YAML の例を示します。

  ```
  name: Hello World
  on: [push]
  jobs:
    Hello-World-Job:
      runs-on:
        - codebuild-myProject-${{ github.run_id }}-${{ github.run_attempt }}
          image:arm-3.0
          instance-size:small
      steps:
        - run: echo "Hello World!"
  ```
+ ラベル内のビルドに使用するフリートを上書きできます。これにより、プロジェクトで設定されたフリート設定が上書きされ、指定されたフリートが使用されます。詳細については、「[リザーブドキャパシティキャパシティフリートでビルドを実行](fleets.md)」を参照してください。Amazon EC2 コンピューティングビルドのフリート設定を上書きするには、次の構文を使用します。

  ```
  runs-on:
    - codebuild-<project-name>-${{ github.run_id }}-${{ github.run_attempt }}
      fleet:<fleet-name>
  ```

  ビルドに使用されるフリートとイメージの両方を上書きするには、次の構文を使用します。

  ```
  runs-on:
    - codebuild-<project-name>-${{ github.run_id }}-${{ github.run_attempt }}
      fleet:<fleet-name>
      image:<environment-type>-<image-identifier>
  ```

  次に、GitHub Actions ワークフロー YAML の例を示します。

  ```
  name: Hello World
  on: [push]
  jobs:
    Hello-World-Job:
      runs-on:
        - codebuild-myProject-${{ github.run_id }}-${{ github.run_attempt }}
          fleet:myFleet
          image:arm-3.0
      steps:
        - run: echo "Hello World!"
  ```
+ カスタムイメージで GitHub Actions ジョブを実行するには、CodeBuild プロジェクトでカスタムイメージを設定し、イメージ上書きラベルを指定しないようにします。CodeBuild は、イメージ上書きラベルが指定されていない場合、プロジェクトで設定されたイメージを使用します。
+ 必要に応じて、CodeBuild がサポートするラベル以外のラベルを提供できます。これらのラベルは、ビルドの属性を上書きする目的で無視されますが、ウェブフックリクエストは失敗しません。例えば、`testLabel` をラベルとして追加しても、ビルドの実行は妨げられません。

**注記**  
GitHub がホストするランナーが提供する依存関係が CodeBuild 環境で利用できない場合は、ワークフロー実行時に GitHub アクションを使用して依存関係をインストールできます。例えば、[https://github.com/actions/setup-python](https://github.com/actions/setup-python) アクションを使用して、ビルド環境に Python をインストールできます。

### INSTALL、PRE\$1BUILD、POST\$1BUILD フェーズで buildspec コマンドを実行
<a name="sample-github-action-runners-update-yaml.buildspec"></a>

デフォルトでは、CodeBuild はセルフホスト型 GitHub Actions ビルドを実行するときに buildspec コマンドを無視します。ビルド中に buildspec コマンドを実行するには、ラベルにサフィックスとして `buildspec-override:true` を追加できます。

```
runs-on:
  - codebuild-<project-name>-${{ github.run_id }}-${{ github.run_attempt }}
    buildspec-override:true
```

このコマンドを使用すると、CodeBuild はコンテナのプライマリソースフォルダに `actions-runner` というフォルダを作成します。GitHub Actions ランナーが `BUILD` フェーズ中に起動すると、ランナーはその `actions-runner` ディレクトリで実行されます。

セルフホスト型 GitHub Actions ビルドで buildspec の上書きを使用する場合、いくつかの制限があります。
+ CodeBuild は、セルフホスト型ランナーが `BUILD` フェーズで実行されるため、`BUILD` フェーズ中は buildspec コマンドを実行しません。
+ CodeBuild は、`DOWNLOAD_SOURCE` フェーズ中はプライマリソースもセカンダリソースもダウンロードしません。buildspec ファイルが設定されている場合、プロジェクトのプライマリソースからそのファイルのみがダウンロードされます。
+ ビルドコマンドが `PRE_BUILD` または `INSTALL` フェーズで失敗した場合、CodeBuild はセルフホスト型ランナーを起動せず、GitHub Actions ワークフロージョブは手動でキャンセルする必要があります。
+ CodeBuild は、`DOWNLOAD_SOURCE` フェーズ中にランナートークンを取得します。有効期限は 1 時間です。`PRE_BUILD` または `INSTALL` フェーズが 1 時間を超えると、GitHub セルフホスト型ランナーが起動する前にランナートークンの有効期限が切れる可能性があります。

## ステップ 3: 結果を確認
<a name="sample-github-action-runners-verify"></a>

GitHub Actions ワークフローが実行されるたびに、CodeBuild はウェブフックを介してワークフロージョブイベントを受信します。ワークフロー内のジョブごとに、CodeBuild はビルドを開始して一時的な GitHub Actions ランナーを実行します。ランナーには、単一のワークフロージョブを実行する役割があります。ジョブが完了すると、ランナーおよび関連付けられたビルドプロセスは即座に終了します。

ワークフロージョブログを表示するには、GitHub のリポジトリに移動し、**[アクション]** を選択して、目的のワークフローを選択し、ログを確認する特定の **[ジョブ]** を選択します。

ジョブが CodeBuild のセルフホスト型ランナーによって取得されるのを待っている間に、リクエストされたラベルをログで確認できます。

![\[ジョブのログの読み込み。\]](http://docs.aws.amazon.com/ja_jp/codebuild/latest/userguide/images/hello-world-loading.png)


ジョブが完了すると、ジョブのログを表示できるようになります。

![\[ジョブのログ。\]](http://docs.aws.amazon.com/ja_jp/codebuild/latest/userguide/images/hello-world-log.png)


## GitHub Actions ランナー設定オプション
<a name="sample-github-action-runners-config"></a>

プロジェクト設定で次の環境変数を指定して、セルフホスト型ランナーのセットアップ設定を変更できます。

`CODEBUILD_CONFIG_GITHUB_ACTIONS_ORG_REGISTRATION_NAME`  
CodeBuild は、この環境変数の値として指定された組織名にセルフホスト型ランナーを登録します。ランナーを組織レベルで登録する方法と必要なアクセス許可の詳細については、「[組織のジャストインタイムランナーの設定を作成する](https://docs.github.com/en/rest/actions/self-hosted-runners?apiVersion=2022-11-28#create-configuration-for-a-just-in-time-runner-for-an-organization)」を参照してください。

`CODEBUILD_CONFIG_GITHUB_ACTIONS_ENTERPRISE_REGISTRATION_NAME`  
CodeBuild は、この環境変数の値として指定されたエンタープライズ名にセルフホスト型ランナーを登録します。ランナーをエンタープライズレベルで登録する方法と必要なアクセス許可の詳細については、「[エンタープライズのジャストインタイムランナーの設定を作成する](https://docs.github.com/en/enterprise-server/rest/actions/self-hosted-runners?apiVersion=2022-11-28#create-configuration-for-a-just-in-time-runner-for-an-enterprise)」を参照してください。  
エンタープライズランナーは、デフォルトでは組織リポジトリに使用できません。セルフホスト型ランナーがワークフロージョブを取得するには、場合によってはランナーグループのアクセス設定を構成する必要があります。詳細については、「[エンタープライズランナーをリポジトリで使用可能にする](https://docs.github.com/en/enterprise-server/actions/hosting-your-own-runners/managing-self-hosted-runners/adding-self-hosted-runners#making-enterprise-runners-available-to-repositories)」を参照してください。

`CODEBUILD_CONFIG_GITHUB_ACTIONS_RUNNER_GROUP_ID`  
CodeBuild は、この環境変数の値として保存されている整数ランナーグループ ID にセルフホスト型ランナーを登録します。デフォルトでは、この値は 1 です。セルフホスト型ランナーグループの詳細については、「[グループを使用したセルフホスト型ランナーへのアクセスの管理](https://docs.github.com/en/rest/actions/self-hosted-runners?apiVersion=2022-11-28#create-configuration-for-a-just-in-time-runner-for-an-organization)」を参照してください。

`CODEBUILD_CONFIG_GITHUB_ACTIONS_ORG_REGISTRATION_NAME`  
GitHub Actions ワークフロー YAML ファイルを使用して組織レベルのランナー登録を設定するには、次の構文を使用できます。  

```
name: Hello World
on: [push]
jobs:
  Hello-World-Job:
    runs-on:
      - codebuild-myProject-${{ github.run_id }}-${{ github.run_attempt }}
        organization-registration-name:myOrganization
    steps:
      - run: echo "Hello World!"
```

`CODEBUILD_CONFIG_GITHUB_ACTIONS_ENTERPRISE_REGISTRATION_NAME`  
GitHub Actions ワークフロー YAML ファイルを使用してエンタープライズレベルのランナー登録を設定するには、次の構文を使用できます。  

```
name: Hello World
on: [push]
jobs:
  Hello-World-Job:
    runs-on:
      - codebuild-myProject-${{ github.run_id }}-${{ github.run_attempt }}
        enterprise-registration-name:myEnterprise
    steps:
      - run: echo "Hello World!"
```

`CODEBUILD_CONFIG_GITHUB_ACTIONS_RUNNER_GROUP_ID`  
GitHub Actions ワークフロー YAML ファイルを使用して特定のランナーグループ ID へのランナーの登録を設定するには、次の構文を使用できます。  

```
name: Hello World
on: [push]
jobs:
  Hello-World-Job:
    runs-on:
      - codebuild-myProject-${{ github.run_id }}-${{ github.run_attempt }}
        registration-group-id:3
    steps:
      - run: echo "Hello World!"
```

## GitHub Actions ウェブフックイベントをフィルタリング (CloudFormation)
<a name="sample-github-action-runners-webhooks-cfn"></a>

 CloudFormation テンプレートの次の YAML 形式の部分は、true と評価されたときにビルドをトリガーするフィルタグループを作成します。次のフィルタグループは、正規表現 `\[CI-CodeBuild\]` に一致するワークフロー名を持つ GitHub Actions ワークフロージョブリクエストを指定します。

```
CodeBuildProject:
  Type: AWS::CodeBuild::Project
  Properties:
    Name: MyProject
    ServiceRole: service-role
    Artifacts:
      Type: NO_ARTIFACTS
    Environment:
      Type: LINUX_CONTAINER
      ComputeType: BUILD_GENERAL1_SMALL
      Image: aws/codebuild/standard:5.0
    Source:
      Type: GITHUB
      Location: CODEBUILD_DEFAULT_WEBHOOK_SOURCE_LOCATION
    Triggers:
      Webhook: true
      ScopeConfiguration:
        Name: organization-name
        Scope: GITHUB_ORGANIZATION
      FilterGroups:
        - - Type: EVENT
            Pattern: WORKFLOW_JOB_QUEUED
          - Type: WORKFLOW_NAME
            Pattern: \[CI-CodeBuild\]
```

## GitHub Actions ウェブフックイベントをフィルタリング (AWS CDK)
<a name="sample-github-action-runners-webhooks-cdk"></a>

次の AWS CDK テンプレートは、ビルドが true と評価されたときにビルドをトリガーするフィルターグループを作成します。次のフィルタグループは、GitHub Actions ワークフロージョブリクエストを指定します。

```
import { aws_codebuild as codebuild } from 'aws-cdk-lib';
import {EventAction, FilterGroup} from "aws-cdk-lib/aws-codebuild";

const source = codebuild.Source.gitHub({
      owner: 'owner',
      repo: 'repo',
      webhook: true,
      webhookFilters: [FilterGroup.inEventOf(EventAction.WORKFLOW_JOB_QUEUED)],
    })
```

## GitHub Actions ウェブフックイベントをフィルタリング (Terraform)
<a name="sample-github-action-runners-webhooks-terraform"></a>

次の Terraform テンプレートは、true と評価されたときにビルドをトリガーするフィルタグループを作成します。次のフィルタグループは、GitHub Actions ワークフロージョブリクエストを指定します。

```
resource "aws_codebuild_webhook" "example" {
  project_name = aws_codebuild_project.example.name
  build_type   = "BUILD"
  filter_group {
    filter {
      type    = "EVENT"
      pattern = "WORKFLOW_JOB_QUEUED"
    }
  }
}
```

## GitHub Actions ウェブフックイベントをフィルタリング (AWS CLI)
<a name="sample-github-action-runners-webhooks-cli"></a>

次の AWS CLI コマンドは、ビルドが true と評価されたときにビルドをトリガーする GitHub Actions ワークフロージョブリクエストフィルターグループを使用して、セルフホスト型の GitHub Actions ランナープロジェクトを作成します。

```
aws codebuild create-project \
--name <project name> \
--source "{\"type\":\"GITHUB\",\"location\":\"<repository location>\",\"buildspec\":\"\"}" \
--artifacts {"\"type\":\"NO_ARTIFACTS\""} \
--environment "{\"type\": \"LINUX_CONTAINER\",\"image\": \"aws/codebuild/amazonlinux-x86_64-standard:5.0\",\"computeType\": \"BUILD_GENERAL1_MEDIUM\"}" \
--service-role "<service role ARN>"
```

```
aws codebuild create-webhook \
--project-name <project name> \
--filter-groups "[[{\"type\":\"EVENT\",\"pattern\":\"WORKFLOW_JOB_QUEUED\"}]]"
```

# ウェブフックのトラブルシューティング
<a name="action-runner-troubleshoot-webhook"></a>

**問題:** [チュートリアル: CodeBuild がホストする GitHub Actions ランナーを設定](action-runner.md) で設定したウェブフックが機能していないか、ワークフロージョブが GitHub でハングしています。

**考えられる原因: **
+ ウェブフックの **[ワークフロージョブ]** イベントがビルドのトリガーに失敗している可能性があります。**[レスポンス]** ログを確認して、レスポンスまたはエラーメッセージを表示します。
+ ラベル設定のため、ジョブが誤ったランナーエージェントに割り当てられています。この問題は、1 つのワークフロー実行内のいずれかのジョブのラベルが別のジョブよりも少ない場合に発生する可能性があります。たとえば、同じワークフロー実行に次のラベルを持つ 2 つのジョブがある場合です。
  + **ジョブ 1**: `codebuild-myProject-${{ github.run_id }}-${{ github.run_attempt }}`
  + **ジョブ 2**: `codebuild-myProject-${{ github.run_id }}-${{ github.run_attempt }}`、`instance-size:medium`

  セルフホスト型 GitHub Actions ジョブをルーティングする場合、GitHub はジョブのすべての指定されたラベルを持つ任意のランナーにジョブをルーティングします。つまり、**ジョブ 1** は**ジョブ 1** または**ジョブ 2** 用に作成されたランナーによって取得できますが、**ジョブ 2** は、追加のラベルがあるため、**ジョブ 2** 用に作成されたランナーによってのみ取得できます。**ジョブ 1** が**ジョブ 2** 用に作成されたランナーによって取得された場合、**ジョブ 1** ランナーには `instance-size:medium` ラベルがないため、**ジョブ 2** はスタックします。

**推奨される解決策: **

同じワークフロー実行内で複数のジョブを作成する場合は、各ジョブに同じ数のラベル上書きを使用するか、`job1` や `job2` などのカスタムラベルを各ジョブに割り当てます。

エラーが解決されない場合は、次の手順を使用して問題をデバッグします。

1. `https://github.com/user-name/repository-name/settings/hooks` で GitHub コンソールを開き、リポジトリのウェブフック設定を表示します。このページには、リポジトリ用に作成されたウェブフックが表示されます。

1. **[編集]** を選択し、ウェブフックの **[ワークフロージョブ]** イベントの配信が有効になっていることを確認します。  
![\[ワークフロージョブイベントは、ウェブフックで有効になっています。\]](http://docs.aws.amazon.com/ja_jp/codebuild/latest/userguide/images/github-actions-workflow-jobs.png)

1.  **[最近の配信]** タブに移動し、対応する `workflow_job.queued` イベントを見つけて、イベントを展開します。

1.  **[ペイロード]** の **[ラベル]** フィールドを確認し、期待どおりに動作していることを確認します。

1.  最後に、**[レスポンス]** タブを確認します。このタブには、CodeBuild から返されたレスポンスまたはエラーメッセージが含まれています。  
![\[CodeBuild から返されたレスポンスまたはエラーメッセージ。\]](http://docs.aws.amazon.com/ja_jp/codebuild/latest/userguide/images/github-actions-workflow-jobs-response.png)

1.  または、GitHub の API を使用してウェブフックの障害をデバッグすることもできます。「[List deliveries for a repository webhook](https://docs.github.com/en/rest/repos/webhooks?apiVersion=2022-11-28#list-deliveries-for-a-repository-webhook)」API を使用して、ウェブフックの最近の配信を表示できます。

   ```
   gh api \
     -H "Accept: application/vnd.github+json" \
     -H "X-GitHub-Api-Version: 2022-11-28" \
     /repos/owner/repo/hooks/hook-id/deliveries
   ```

    デバッグするウェブフック配信を見つけて配信 ID をメモしたら、[Get a delivery for a repository webhook](https://docs.github.com/en/rest/repos/webhooks?apiVersion=2022-11-28#get-a-delivery-for-a-repository-webhook) API を使用できます。ウェブフックの配信ペイロードに対する CodeBuild のレスポンスは、`response` セクションにあります。

   ```
   gh api \
     -H "Accept: application/vnd.github+json" \
     -H "X-GitHub-Api-Version: 2022-11-28" \
     /repos/owner/repo/hooks/hook-id/deliveries/delivery-id
   ```

**問題:** [デプロイ保護](https://docs.github.com/en/actions/managing-workflow-runs-and-deployments/managing-deployments/reviewing-deployments)ルールが有効になっている GitHub Actions は、デプロイが承認される前に CodeBuild 内でビルドをトリガーします。

**考えられる原因:** CodeBuild は、承認されているかどうかを確認するため、GitHub Actions ジョブに関連付けられているデプロイと環境を取得します (存在する場合)。CodeBuild がデプロイまたは環境の取得に失敗すると、CodeBuild ビルドが早期にトリガーされる可能性があります。

**推奨される解決策:** CodeBuild プロジェクトに関連付けられた認証情報に、GitHub 内のデプロイとアクションに対する読み取りアクセス許可があることを確認します。

# CodeBuild がホストする GitHub Actions ランナーでサポートされているラベルの上書き
<a name="sample-github-action-runners-update-labels"></a>

GitHub Actions ワークフロー YAML では、セルフホスト型ランナーのビルドを変更するさまざまなラベルの上書きを指定できます。CodeBuild で認識されないビルドは無視されますが、ウェブフックリクエストは失敗しません。例えば、次のワークフロー YAML には、イメージ、インスタンスサイズ、フリート、および buildspec の上書きが含まれます。

```
name: Hello World
on: [push]
jobs:
  Hello-World-Job:
    runs-on:
      - codebuild-myProject-${{ github.run_id }}-${{ github.run_attempt }}
        image:${{ matrix.os }}
        instance-size:${{ matrix.size }}
        fleet:myFleet
        buildspec-override:true
    strategy:
      matrix:
        include:
          - os: arm-3.0
            size: small
          - os: linux-5.0
            size: large
    steps:
      - run: echo "Hello World!"
```

**注記**  
ワークフロージョブが GitHub でハングアップしている場合は、「[ウェブフックのトラブルシューティング](action-runner-troubleshoot-webhook.md)」および「[カスタムラベルを使用してジョブをルーティングする](https://docs.github.com/en/enterprise-server@3.12/actions/hosting-your-own-runners/managing-self-hosted-runners/using-self-hosted-runners-in-a-workflow?learn=hosting_your_own_runners&learnProduct=actions#using-custom-labels-to-route-jobs)」を参照してください。

`codebuild-<project-name>-${{github.run_id}}-${{github.run_attempt}}` (必須)
+ 例: `codebuild-fake-project-${{ github.run_id }}-${{ github.run_attempt }}`
+ すべての GitHub Actions ワークフロー YAML に必須です。*<project name>* は、セルフホスト型ランナーウェブフックが設定されているプロジェクトの名前と同じである必要があります。

`image:<environment-type>-<image-identifier>`
+ 例: `image:arm-3.0`
+ 選別されたイメージを使用したセルフホスト型ランナーのビルドの開始時に使用するイメージと環境タイプを上書きします。サポートされている値については、「[CodeBuild がホストする GitHub Actions ランナーでサポートされているコンピューティングイメージ](sample-github-action-runners-update-yaml.images.md)」を参照してください。
  + カスタムイメージで使用されるイメージと環境タイプを上書きするには、「`image:custom-<environment-type>-<custom-image-identifier>`」を使用します。
  + 例: `image:custom-arm-public.ecr.aws/codebuild/amazonlinux-aarch64-standard:3.0`
**注記**  
カスタムイメージがプライベートレジストリにある場合は、「[セルフホスト型ランナーのプライベートレジストリ認証情報を設定する](private-registry-sample-configure-runners.md)」を参照してください。

`instance-size:<instance-size>`
+ 例: `instance-size:medium`
+ セルフホスト型ランナーのビルドの開始時に使用するインスタンスタイプを上書きします。サポートされている値については、「[CodeBuild がホストする GitHub Actions ランナーでサポートされているコンピューティングイメージ](sample-github-action-runners-update-yaml.images.md)」を参照してください。

`fleet:<fleet-name>`
+ 例: `fleet:myFleet`
+ 指定されたフリートを使用するために、プロジェクトに設定されたフリート設定を上書きします。詳細については、「[リザーブドキャパシティキャパシティフリートでビルドを実行](fleets.md)」を参照してください。

`buildspec-override:<boolean>`
+ 例: `buildspec-override:true`
+ `true` に設定されている場合、ビルドが `INSTALL`、`PRE_BUILD`、および `POST_BUILD` フェーズで buildspec コマンドを実行できるようにします。

## 単一ラベルの上書き (レガシー)
<a name="sample-github-action-runners-update-single-labels"></a>

CodeBuild では、以下を使用して、単一のラベルに複数の上書きを指定できます。
+ Amazon EC2/Lambda コンピューティングビルドの環境設定を上書きするには、次の構文を使用します。

  ```
  runs-on: codebuild-<project-name>-${{ github.run_id }}-${{ github.run_attempt }}-<environment-type>-<image-identifier>-<instance-size>
  ```
+ Amazon EC2 コンピューティングビルドのフリート設定を上書きするには、次の構文を使用します。

  ```
  runs-on: codebuild-<project-name>-${{ github.run_id }}-${{ github.run_attempt }}-fleet-<fleet-name>
  ```
+ ビルドに使用されるフリートとイメージの両方を上書きするには、次の構文を使用します。

  ```
  runs-on: codebuild-<project-name>-${{ github.run_id }}-${{ github.run_attempt }}-image-<image-version>-fleet-<fleet-name>
  ```
+ ビルド中に buildspec コマンドを実行するには、ラベルにサフィックスとして `-with-buildspec` を追加できます。

  ```
  runs-on: codebuild-<project-name>-${{ github.run_id }}-${{ github.run_attempt }}-<image>-<image-version>-<instance-size>-with-buildspec
  ```
+ オプションで、イメージを上書きせずにインスタンスサイズの上書きを指定できます。Amazon EC2 ビルドでは、環境タイプとイメージ識別子の両方を除外できます。Lambda ビルドでは、イメージ識別子を除外できます。

# CodeBuild がホストする GitHub Actions ランナーでサポートされているコンピューティングイメージ
<a name="sample-github-action-runners-update-yaml.images"></a>

「[チュートリアル: CodeBuild がホストする GitHub Actions ランナーを設定](action-runner.md)」で設定したラベルでは、最初の 3 つの列の値を使用して Amazon EC2 環境設定を上書きできます。CodeBuild では、次の Amazon EC2 コンピューティングイメージが用意されています。詳細については、以下を参照してください。

<a name="build-env-ref.supported-images"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/codebuild/latest/userguide/sample-github-action-runners-update-yaml.images.html)

さらに、次の値を使用して Lambda 環境設定を上書きできます。CodeBuild Lambda コンピューティングの詳細については、「[AWS Lambda コンピューティングでビルドを実行する](lambda.md)」を参照してください。CodeBuild は、次の Lambda コンピューティングイメージをサポートしています。

<a name="lambda.supported-images"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/codebuild/latest/userguide/sample-github-action-runners-update-yaml.images.html)

詳細については、「[ビルド環境のコンピューティングモードおよびタイプ](build-env-ref-compute-types.md)」および「[CodeBuild に用意されている Docker イメージ](build-env-ref-available.md)」を参照してください。