

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

# チュートリアル: 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\"}]]"
```