付録 A: GitHub バージョン 1 のソースアクション - AWS CodePipeline

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

付録 A: GitHub バージョン 1 のソースアクション

この付録では、CodePipeline での GitHub アクションのバージョン 1 について説明します。

注記

GitHub バージョン 1 のアクションの使用はお勧めしませんが、GitHub バージョン 1 のアクションを持つ既存のパイプラインは、影響を与えずに引き続き機能します。GitHub バージョン 1 アクションを持つパイプラインの場合、CodePipeline は OAuth ベースのトークンを使用して GitHub リポジトリに接続します。対照的に、GitHub アクション (バージョン 2) は、接続リソースを使用してAWSリソースを GitHub リポジトリにアップロードします。接続リソースは、アプリケーションベースのトークンを使用して接続します。接続を使用する推奨の GitHub アクションにパイプラインを更新する方法の詳細については、」GitHub バージョン 1 のソースアクションを GitHub バージョン 2 のソースアクションに更新する。アプリベースの GitHub アクセスとは対照的に、OAuth ベースの GitHub アクセスの詳細については、https://docs.github.com/en/developers/apps/differences-between-github-apps-and-oauth-apps

GitHub と統合するため、CodePipeline はパイプラインの GitHub OAuth アプリケーションを使用します。CodePipeline は Webhook を使用して、GitHub バージョン 1 ソースアクションでパイプラインの変更検出を管理します。

注記

GitHub バージョン 2 のソースアクションをAWS CloudFormationでは、GitHub トークン情報を含めることも、Webhook リソースを追加することもありません。に示すように、接続リソースを設定します。AWS::CodeStarConnections::Connection() AWS CloudFormationユーザーガイド。

このリファレンスには、GitHub バージョン 1 のアクションに関する次のセクションが含まれています。

GitHub バージョン 1 のソースアクションを追加する

GitHub バージョン1のソースアクションをCodePipelineに追加するには、次のようにします。

GitHub バージョン1のソースアクション構造リファレンス

注記

GitHub バージョン 1 のアクションの使用はお勧めしませんが、GitHub バージョン 1 のアクションを持つ既存のパイプラインは、影響を与えずに引き続き機能します。GitHub バージョン 1 のソースアクションを持つパイプラインの場合、CodePipeline は OAuth ベースのトークンを使用して GitHub リポジトリに接続します。対照的に、新しい GitHub アクション (バージョン 2) では、接続リソースを使用してAWSリソースを GitHub リポジトリにアップロードします。接続リソースは、アプリケーションベースのトークンを使用して接続します。接続を使用する推奨の GitHub アクションにパイプラインを更新する方法の詳細については、」GitHub バージョン 1 のソースアクションを GitHub バージョン 2 のソースアクションに更新する

設定された GitHub リポジトリとブランチで新しいコミットが行われたときに、パイプラインをトリガーします。

GitHub と統合するため、CodePipeline はパイプラインの OAuth アプリケーションまたは個人用アクセストークンを使用します。コンソールを使用してパイプラインを作成または編集すると、CodePipeline は、リポジトリで変更が生じた場合にパイプラインを開始する GitHub ウェブフックを作成します。

GitHub アクションを介してパイプラインを接続する前に、GitHub アカウントとリポジトリを作成しておく必要があります。

CodePipeline がリポジトリに対するアクセスを制限する場合は、GitHub アカウントを作成し、CodePipeline と統合するリポジトリへのアクセスをアカウントに付与します。パイプラインのソースステージの GitHub リポジトリを使用するように CodePipeline を設定する場合は、そのアカウントを使用します。

詳細については、GitHub ウェブサイトの GitHub 開発者向けドキュメントを参照してください。

アクションの種類

  • カテゴリ: Source

  • 所有者: ThirdParty

  • プロバイダー: GitHub

  • バージョン: 1

設定パラメータ

所有者

必須: はい

GitHub リポジトリを所有する GitHub ユーザーまたは組織の名前。

Repo

必須: はい

ソースの変更が検出されるリポジトリの名前。

ブランチ

必須: はい

ソースの変更が検出されるブランチの名前。

OAuthToken

必須: はい

CodePipeline が GitHub リポジトリで操作を実行できるようにするための GitHub 認証トークンを表します。エントリは、常に 4 つのアスタリスクでマスクされた状態で表示されます。これは、次のいずれかの値を表します。

  • コンソールを使用してパイプラインを作成する場合、CodePipeline は OAuth トークンを使用して GitHub 接続を登録します。

  • AWS CLI を使用してパイプラインを作成する場合、このフィールドに GitHub 個人用アクセストークンを渡すことができます。アスタリスク (****) を GitHub からコピーした個人用アクセストークンに置き換えます。get-pipeline を実行してアクション設定を表示すると、この値の 4 つのアスタリスクマスクが表示されます。

  • AWS CloudFormation テンプレートを使用してパイプラインを作成する場合、最初にトークンをシークレットとして AWS Secrets Manager に保存する必要があります。このフィールドの値は、保存されたシークレットへの動的リファレンスとして含めます (など)。{{resolve:secretsmanager:MyGitHubSecret:SecretString:token}}

GitHub のスコープに関する詳細については、GitHub ウェブサイトの「GitHub 開発者 API リファレンス」を参照してください。

PollForSourceChanges

必須: いいえ

PollForSourceChangesは、CodePipeline が GitHub リポジトリをポーリングするかどうかを制御します。この方法の代わりに、ウェブフックを使用してソースの変更を検出することをお勧めします。ウェブフックの設定に関する詳細は、「プッシュイベント用にパイプラインを更新する (GitHub バージョン 1 ソースアクション) (CLI)」または「プッシュイベント用にパイプラインを更新する (GitHub バージョン 1 ソースアクション) (AWS CloudFormationテンプレート)」を参照してください。

重要

ウェブフックを設定する場合、パイプライン実行の重複を避けるため、PollForSourceChangesfalse に設定します。

このパラメータの有効な値:

  • True: 設定されている場合、CodePipeline は、ソースの変更についてリポジトリをポーリングします。

    注記

    省略するとPollForSourceChangesの場合、CodePipeline は、ソースの変更についてデフォルトでリポジトリをポーリングします。この動作は、PollForSourceChangestrue に設定されている場合と同じです。

  • False: 設定されている場合、CodePipeline は、ソースの変更についてリポジトリをポーリングしません。ソースの変更を検出するようにウェブフックを構成する場合は、この設定を使用します。

入力アーティファクト

  • アーティファクトの数: 0

  • 説明: 入力アーティファクトは、このアクションタイプには適用されません。

出力アーティファクト

  • アーティファクトの数: 1

  • 説明: このアクションの出力アーティファクトは、パイプライン実行のソースリビジョンとして指定されたコミットで設定されたリポジトリとブランチの内容を含む ZIP ファイルです。リポジトリから生成されたアーティファクトは、GitHub アクションの出力アーティファクトです。ソースコードのコミット ID は、トリガーされたパイプライン実行のソースリビジョンとして CodePipeline に表示されます。

出力変数

このアクションを設定すると、パイプライン内のダウンストリームアクションのアクション設定によって参照できる変数が生成されます。このアクションは、アクションに名前空間がない場合でも、出力変数として表示できる変数を生成します。名前空間を使用してアクションを設定し、これらの変数をダウンストリームアクションの設定で使用できるようにします。

CodePipeline の変数の詳細については、「」を参照してください。Variables

CommitId

パイプライン実行をトリガーした GitHub コミット ID。コミット ID は、コミットの完全な SHA です。

CommitMessage

パイプライン実行をトリガーしたコミットに関連付けられた説明メッセージ (存在する場合)。

CommitUrl

パイプラインをトリガーしたコミットの URL アドレス。

RepositoryName

パイプラインをトリガーしたコミットが実行された GitHub リポジトリの名前。

BranchName

ソースの変更が行われた GitHub リポジトリのブランチの名前。

AuthorDate

コミットが認証された日付 (タイムスタンプ形式)。

Git での著者とコミッターの違いに関する詳細については、Scott Chacon と Ben Straub による Pro Git の「コミット履歴の表示」を参照してください。

CommitterDate

コミットがコミットされた日付 (タイムスタンプ形式)。

Git での著者とコミッターの違いに関する詳細については、Scott Chacon と Ben Straub による Pro Git の「コミット履歴の表示」を参照してください。

アクションの宣言 (GitHub の例)

YAML
Name: Source Actions: - InputArtifacts: [] ActionTypeId: Version: '1' Owner: ThirdParty Category: Source Provider: GitHub OutputArtifacts: - Name: SourceArtifact RunOrder: 1 Configuration: Owner: MyGitHubAccountName Repo: MyGitHubRepositoryName PollForSourceChanges: 'false' Branch: main OAuthToken: '{{resolve:secretsmanager:MyGitHubSecret:SecretString:token}}' Name: ApplicationSource
JSON
{ "Name": "Source", "Actions": [ { "InputArtifacts": [], "ActionTypeId": { "Version": "1", "Owner": "ThirdParty", "Category": "Source", "Provider": "GitHub" }, "OutputArtifacts": [ { "Name": "SourceArtifact" } ], "RunOrder": 1, "Configuration": { "Owner": "MyGitHubAccountName", "Repo": "MyGitHubRepositoryName", "PollForSourceChanges": "false", "Branch": "main", "OAuthToken": "{{resolve:secretsmanager:MyGitHubSecret:SecretString:token}}" }, "Name": "ApplicationSource" } ] },

GitHub (OAuth) への接続

初めて GitHub リポジトリをパイプラインに追加するコンソールを使用する場合、リポジトリへの CodePipeline アクセスを承認するように要求されます。トークンには、次の GitHub スコープが必要です。

  • repo スコープ。これは、パブリックおよびプライベートリポジトリからパイプラインにアーティファクトを読み込んでプルする完全制御に使用されます。

  • admin:repo_hook スコープ。これは、リポジトリフックの完全制御に使用されます。

CLI または AWS CloudFormation テンプレートを使用する場合は、すでに GitHub で作成した個人用アクセストークンの値を指定する必要があります。

パイプラインの CodePipeline OAuth アプリケーションを表示するには、「」を参照してください。認定された OAuth アプリを表示する

GitHub 個人用アクセストークンを作成および管理するには、「個人用のアクセストークンを使用するようにパイプラインを設定する (GitHub と CLI)」を参照してください。

このアクションを利用する際に役立つ関連リソースは以下の通りです。

ウェブフックを使用してパイプラインを開始する (GitHub バージョン 1 ソースアクション)

ウェブフックとは、GitHub リポジトリなど、別のツールにおけるイベントを検出し、この外部イベントをパイプラインに接続する HTTP 通知です。

コンソールを使用して GitHub ソースを含むパイプラインを作成または編集すると、CodePipeline によってウェブフックが作成されます。パイプラインを削除すると、CodePipeline によって Webhook が削除されます。GitHub でこれを管理する必要はありません。GitHub ソースを含むパイプラインの作成または編集に AWS CLI または AWS CloudFormation を使用する場合は、以下のセクションの情報を使用して各自でウェブフックを管理する必要があります。

GitHub ソースのウェブフックを作成する

AWS CLI を使用してウェブフックを手動で作成したら、ウェブフックを GitHub に登録する必要があります。指定された AAWSエンドポイントがウェブフックに使用され、put-webhookコマンド。

重要

コンソールを使用してパイプラインを作成または編集する場合は、ウェブフックが自動的に作成されます。

AWS CLI を使用してウェブフックを作成するには、put-webhook コマンドを呼び出し、以下を指定します。

  • ウェブフックを一意に識別する名前。この名前は、パイプラインのアカウントのリージョンで一意である必要があります。

  • GitHub 認証に使用される JSON ファイルのシークレット。

    -ウェブフックシークレットは、GitHub がCodePipelineにWebフック要求を行うときに使用されます。これにより、CodePipelineはWebフック要求が正常であり、GitHub から来ていることを検証できます。このフィールドには、ランダムに生成された長いシークレット値を指定することをお勧めします。CodePipeline がRegisterWebhookWithThirdPartyAPIが呼び出されると、WebhookシークレットはGitHub 作成Webhook APIを介してGitHubに渡されます。詳細については、「」を参照してください。https://developer.github.com/v3/repos/hooks/#create-hook-config-params

    GitHub OAuthまたはパーソナルトークンは、Webhookシークレットとして使用しないでください。

ウェブフックを作成して登録するには

注記

CLI または AWS CloudFormation を使用してパイプラインを作成して ウェブフックを追加する場合は、定期的なチェックを無効にする必要があります。定期的なチェックを無効にするには、以下の最終的な手順に詳述するとおり、PollForSourceChanges パラメータを明示的に追加して false に設定する必要があります。そうしないと、CLI または AWS CloudFormation パイプラインの既定により、PollForSourceChanges はデフォルトで true となり、パイプライン構造の出力に表示されません。PollForSourceChanges のデフォルトの詳細については、「PollForSourceChanges パラメータのデフォルト設定」を参照してください。

  1. テキストエディタで、作成するウェブフックの JSON ファイルを作成して保存します。「my-webhook」という名前のウェブフックには、このサンプルを使用します。

    {"webhook": {"name": "my-webhook", "targetPipeline": "pipeline_name", "targetAction": "source_action_name", "filters": [ { "jsonPath": "$.ref", "matchEquals": "refs/heads/{Branch}" } ], "authentication": "GITHUB_HMAC", "authenticationConfiguration": {"SecretToken":"secret"} } }
  2. put-webhook コマンドを呼び出し、--cli-input および --region パラメータを含めます。

    次のサンプルコマンドは、webhook_json JSON ファイルで ウェブフックを作成します。

    aws codepipeline put-webhook --cli-input-json file://webhook_json.json --region "eu-central-1"
  3. この例に示す出力では、my-webhook という名前のウェブフックに対して URL と ARN が返されます。

    { "webhook": { "url": "https://webhooks.domain.com/trigger111111111EXAMPLE11111111111111111", "definition": { "authenticationConfiguration": { "SecretToken": "secret" }, "name": "my-webhook", "authentication": "GITHUB_HMAC", "targetPipeline": "pipeline_name", "targetAction": "Source", "filters": [ { "jsonPath": "$.ref", "matchEquals": "refs/heads/{Branch}" } ] }, "arn": "arn:aws:codepipeline:eu-central-1:ACCOUNT_ID:webhook:my-webhook" }, "tags": [{ "key": "Project", "value": "ProjectA" }] }

    この例では、ウェブフックにProjectタグキーとProjectA値を含めることで、ウェブフックにタグ付けを追加します。CodePipeline でのリソースのタグ付けの詳細については、「」を参照してください。リソースのタグ付け

  4. register-webhook-with-third-party コマンドを呼び出し、--webhook-name パラメータを含めます。

    次のサンプルコマンドは、「my-webhook」という名前のウェブフックを登録します。

    aws codepipeline register-webhook-with-third-party --webhook-name my-webhook

ウェブフックを使用するようにパイプラインを更新する場合は、次の手順を使用して定期的なチェックを無効にする必要があります。

パイプラインの PollForSourceChanges パラメータを編集するには

重要

このメソッドを使用してパイプラインを作成すると、PollForSourceChanges パラメータはデフォルトで true になります (ただし、明示的に false に設定した場合は除きます)。イベントベースの変更検出を追加する場合は、このパラメータを出力に追加する必要があります。ポーリングを無効にするには、このパラメータを false に設定します。そうしないと、1 つのソース変更に対してパイプラインが 2 回起動されます。詳細については、「PollForSourceChanges パラメータのデフォルト設定」を参照してください。

  1. get-pipeline コマンドを実行して、パイプライン構造を JSON ファイルにコピーします。たとえば、MyFirstPipeline という名前のパイプラインの場合は、以下のコマンドを入力します。

    aws codepipeline get-pipeline --name MyFirstPipeline >pipeline.json

    このコマンドは何も返しませんが、作成したファイルは、コマンドを実行したディレクトリにあります。

  2. 任意のプレーンテキストエディタで JSON ファイルを開き、以下に示しているように、PollForSourceChanges パラメータを変更または追加してソースステージを編集します。この例では、UserGitHubRepo という名前のリポジトリで、パラメータを false に設定します。

    この変更を行う理由 このパラメータを変更すると、定期的チェックがオフになるため、イベントベースの変更検出のみ使用することができます。

    "configuration": { "Owner": "darlaker", "Repo": "UserGitHubRepo", "PollForSourceChanges": "false", "Branch": "main", "OAuthToken": "****" },
  3. get-pipeline コマンドを使用して取得されたパイプライン構造を操作している場合、ファイルから metadata 行を削除して JSON ファイルの構造を編集する必要があります。それ以外の場合は、update-pipeline コマンドで使用することはできません。JSON ファイルのパイプライン構造から "metadata" セクションを削除します ({ } 行と、"created""pipelineARN"、および "updated" フィールド)。

    たとえば、構造から以下の行を削除します。

    "metadata": { "pipelineArn": "arn:aws:codepipeline:region:account-ID:pipeline-name", "created": "date", "updated": "date" }

    ファイルを保存します。

  4. 変更を適用するには、以下のように、パイプライン JSON ファイルを指定して、update-pipeline コマンドを実行します。

    重要

    ファイル名の前に必ず file:// を含めてください。このコマンドでは必須です。

    aws codepipeline update-pipeline --cli-input-json file://pipeline.json

    このコマンドは、編集したパイプラインの構造全体を返します。

    注記

    update-pipeline コマンドは、パイプラインを停止します。update-pipeline コマンドを実行したときにパイプラインによりリビジョンが実行されている場合、その実行は停止します。更新されたパイプラインによりそのリビジョンを実行するには、パイプラインを手動で開始する必要があります。パイプラインを手動で開始するには start-pipeline-execution コマンドを使用します。

アカウントのウェブフックを一覧表示する

AWS CLI を使用して、アカウントのウェブフックを一覧表示できます。

アカウントのウェブフックを一覧表示するには

  1. ウェブフックを一覧表示するには、list-webhooks コマンドを呼び出し、--endpoint-url および --region パラメータを含めます。

    次のサンプルコマンドは、「eu-central-1」エンドポイント URL のウェブフックを一覧表示します。

    aws codepipeline list-webhooks --endpoint-url "https://codepipeline.eu-central-1.amazonaws.com" --region "eu-central-1"
  2. ウェブフックのリストと各ウェブフック名および ARN が一覧表示されます。

    { "webhooks": [ { "url": "https://webhooks.domain.com/trigger111111111EXAMPLE11111111111111111": { "authenticationConfiguration": { "SecretToken": "Secret" }, "name": "my-webhook", "authentication": "GITHUB_HMAC", "targetPipeline": "my-Pipeline", "targetAction": "Source", "filters": [ { "jsonPath": "$.ref", "matchEquals": "refs/heads/{Branch}" } ] }, "arn": "arn:aws:codepipeline:eu-central-1:ACCOUNT_ID:webhook:my-webhook" } ] }
  3. GitHub でリポジトリを選択します。

  4. [設定]、[ウェブブック] の順に選択します。

    リポジトリのウェブフック情報を表示します。

GitHub ソースのウェブフックを編集する

AWS CLI を使用して、リポジトリのウェブフックを編集します。

  • コンソールを使用してパイプラインの GitHub ソースアクションを編集すると、ウェブフックが更新されます (必要に応じて再登録されます)。

  • ウェブフック名を更新せず、GitHub リポジトリを変更しない場合、AWS CLI を使用してウェブフックを更新できます。例 1 を参照してください。

  • ウェブフック名あるいは GitHub リポジトリを変更する場合、コンソールでソースアクションを編集するか、CLI でウェブフックを削除して再度作成する必要があります。ウェブフックを作成したら、それも登録します。例 2 を参照してください。

例 1: ウェブフックシークレットを更新するには

  1. テキストエディタで、更新するウェブフックの JSON ファイルを編集します。この例では、「GitHub ソースのウェブフックを作成する」でウェブフックの作成に使用したのと同じファイルに変更を加えます。このサンプルは、「"my-webhook"」という名前のウェブフックを更新します。

    {"webhook": {"name": "my-webhook", "targetPipeline": "pipeline_name", "targetAction": "source_action_name", "filters": [ { "jsonPath": "$.ref", "matchEquals": "refs/heads/{Branch}" } ], "authentication": "GITHUB_HMAC", "authenticationConfiguration": {"SecretToken":"new_secret"} } }
  2. put-webhook コマンドを呼び出し、--cli-input および --region パラメータを含めます。

    次のサンプルコマンドは、変更を加えた JSON ファイル「"webhook_json"」でウェブフックを更新します。

    aws codepipeline put-webhook --cli-input-json file://webhook_json.json --region "eu-central-1"
  3. ウェブフックの詳細と新しいシークレットが出力で返ります。

    注記

    コンソールで GitHub ソースアクションを編集できます。これにより、CodePipeline はウェブフックを管理できます。

例 2: ウェブフック名または GitHub リポジトリを更新するには

  1. GitHub ソースのウェブフックを削除する」のステップを使用して、古いウェブフック名または GitHub リポジトリに関連付けられている既存のウェブフックの登録を解除して削除します。

  2. ウェブフックを再作成するには、GitHub ソースのウェブフックを作成する のステップを行います。

    注記

    コンソールで GitHub ソースアクションを編集できます。これにより、CodePipeline はウェブフックを管理できます。

GitHub ソースのウェブフックを削除する

AWS CLI を使用してウェブフックを削除するには

  1. ウェブフックを削除する前に、その登録を解除する必要があります。deregister-webhook-with-third-party コマンドを呼び出し、--webhook-name パラメータを含めます。

    次のサンプルコマンドは、「"my-webhook"」という名前のウェブフックの登録を解除します。

    aws codepipeline deregister-webhook-with-third-party --webhook-name my-webhook
  2. delete-webhook コマンドを呼び出し、--name パラメータを含めます。

    次のサンプルコマンドは、「"my-webhook"」という名前のウェブフックを削除します。

    aws codepipeline delete-webhook --name my-webhook

CodePipeline でウェブフックにタグ

CodePipeline で Webhook にタグを適用できます。タグは、AWS リソースに関連付けられるキーと値です。CodePipeline リソースのタグ付け、ユースケース、タグのキーと値の制約、サポートされているリソースタイプの詳細については、「」を参照してください。リソースのタグ付け

ウェブフックを作成するときにタグを指定できます。ウェブフックのタグの値を追加、削除、更新することができます。ウェブフックごとに最大 50 個のタグを追加できます。

既存のウェブフックにタグを追加する

AWS CLI を使用してウェブフックにタグを追加するには、以下の手順に従ってください。ウェブフックを作成したときにそのタグを追加するには、GitHub ソースのウェブフックを作成する を参照してください。

以下の手順では、AWS CLI の最新版をすでにインストールしているか、最新版に更新しているものとします。詳細については、「AWS Command Line Interface のインストール」を参照してください。

ターミナルまたはコマンドラインで、タグを追加するウェブフックの Amazon リソースネーム (ARN) と、追加するタグのキーと値を指定して、tag-resource コマンドを実行します。ウェブフックに複数のタグを追加できます。たとえば、という名前の Webhook をタグ付けするにはMyWebhookという名前のタグキーを 2 つのタグでプロジェクトのタグ値を持つNewProjectという名前のタグキー、ApplicationNameのタグ値を持つMyApplication:

aws codepipeline tag-resource --resource-arn arn:aws:codepipeline:us-west-2:account-id:webhook:MyWebhook --tags key=Project,value=NewProject key=ApplicationName,value=MyApplication

成功すると、このコマンドは何も返しません。

ウェブフックのタグを表示する

AWS CLI を使用してウェブフックの AWS タグを表示するには、以下の手順に従ってください。タグが追加されていない場合、返されるリストは空になります。

ターミナルまたはコマンドラインで、list-tags-for-resource コマンドを実行します。たとえば、MyWebhookという名前のウェブフックのタグキーとタグ値のリストを ARN arn:aws:codepipeline:us-west-2:account-id:webhook:MyWebhook で表示するには、次のように入力します。

aws codepipeline list-tags-for-resource --resource-arn arn:aws:codepipeline:us-west-2:account-id:webhook:MyWebhook

成功した場合、このコマンドは次のような情報を返します。

{ "tags": { "Project": "NewProject", "ApplicationName": "MyApplication" } }

ウェブフックのタグを編集する

AWS CLI を使用してウェブフックのタグを更新するには、次の手順に従います。既存のキーの値を変更したり、別のキーを追加できます。次のセクションに示すように、ウェブフックからタグを削除することもできます。

ターミナルまたはコマンドラインで、tag-resource コマンドを実行して、タグを更新するウェブフックの ARN を指定し、タグキーとタグ値を指定します。

aws codepipeline tag-resource --resource-arn arn:aws:codepipeline:us-west-2:account-id:webhook:MyWebhook --tags key=Project,value=UpdatedProject

ウェブフックからタグを削除する

AWS CLI を使用してウェブフックからタグを削除するには、次の手順に従います。関連付けられているリソースからタグを削除すると、そのタグが削除されます。

注記

ウェブフックを削除すると、すべてのタグの関連付けがウェブフックから削除されます。ウェブフックを削除する前にタグを削除する必要はありません。

ターミナルまたはコマンドラインで、untag-resource コマンドを実行して、タグを削除するウェブフックの ARN と、削除するタグのタグキーを指定します。たとえば、という名前のウェブフックでタグを削除するにはMyWebhookタグキーでプロジェクト:

aws codepipeline untag-resource --resource-arn arn:aws:codepipeline:us-west-2:account-id:webhook:MyWebhook --tag-keys Project

成功すると、このコマンドは何も返しません。ウェブフックに関連付けられたタグを確認するには、 list-tags-for-resource コマンドを実行します。

GitHub ソースのウェブフックを作成する (AWS CloudFormation テンプレート)

AWS CloudFormation を使用してウェブフックを作成するには、ここで説明しているようにテンプレートを更新します。

テンプレートにパラメータを追加してウェブフックを作成するには

AWS Secrets Manager を使用して認証情報を保存することを強くお勧めします。Secrets Manager を使用する場合は、Secrets Manager でシークレットパラメータをすでに設定して保存しておく必要があります。この例では、Webhook の GitHub 認証情報に AWS Secrets Manager への動的な参照を使用します。詳細については、「動的な参照を使用してテンプレート値を指定する」を参照してください。

重要

シークレットパラメータを渡すときは、値をテンプレートに直接入力しないでください。値はプレーンテキストとしてレンダリングされるため、読み取り可能です。セキュリティ上の理由から、AWS CloudFormation テンプレートでプレーンテキストを使用して認証情報を保存しないでください。

CLI または AWS CloudFormation を使用してパイプラインを作成して ウェブフックを追加する場合は、定期的なチェックを無効にする必要があります。

注記

定期的なチェックを無効にするには、以下の最終的な手順に詳述するとおり、PollForSourceChanges パラメータを明示的に追加して false に設定する必要があります。そうしないと、CLI または AWS CloudFormation パイプラインの既定により、PollForSourceChanges はデフォルトで true となり、パイプライン構造の出力に表示されません。PollForSourceChanges のデフォルトの詳細については、「PollForSourceChanges パラメータのデフォルト設定」を参照してください。

  1. テンプレートの Resources に、パラメータを追加します。

    YAML
    Parameters: GitHubOwner: Type: String ...
    JSON
    { "Parameters": { "BranchName": { "Description": "GitHub branch name", "Type": "String", "Default": "main" }, "GitHubOwner": { "Type": "String" }, ...
  2. AWS::CodePipeline::Webhook AWS CloudFormation リソースを使用して、ウェブフックを追加します。

    注記

    指定した TargetAction は、パイプラインで定義したソースアクションの Name プロパティと一致する必要があります。

    RegisterWithThirdPartytrue に設定されている場合は、OAuthToken に関連付けられたユーザーが GitHub で必要なスコープを設定できることを確認してください。トークンとウェブフックには、以下の GitHub スコープが必要となります。

    • repo - パブリックおよびプライベートリポジトリからパイプラインにアーティファクトを読み込んでプルする完全制御に使用されます。

    • admin:repo_hook - リポジトリフックの完全制御に使用されます。

    それ以外の場合、GitHub から 404 が返されます。返される 404 の詳細については、「https://help.github.com/articles/about-webhooks」を参照してください。

    YAML
    AppPipelineWebhook: Type: AWS::CodePipeline::Webhook Properties: Authentication: GITHUB_HMAC AuthenticationConfiguration: SecretToken: {{resolve:secretsmanager:MyGitHubSecret:SecretString:token}} Filters: - JsonPath: "$.ref" MatchEquals: refs/heads/{Branch} TargetPipeline: !Ref AppPipeline TargetAction: SourceAction Name: AppPipelineWebhook TargetPipelineVersion: !GetAtt AppPipeline.Version RegisterWithThirdParty: true ...
    JSON
    "AppPipelineWebhook": { "Type": "AWS::CodePipeline::Webhook", "Properties": { "Authentication": "GITHUB_HMAC", "AuthenticationConfiguration": { "SecretToken": "{{resolve:secretsmanager:MyGitHubSecret:SecretString:token}}" }, "Filters": [ { "JsonPath": "$.ref", "MatchEquals": "refs/heads/{Branch}" } ], "TargetPipeline": { "Ref": "AppPipeline" }, "TargetAction": "SourceAction", "Name": "AppPipelineWebhook", "TargetPipelineVersion": { "Fn::GetAtt": [ "AppPipeline", "Version" ] }, "RegisterWithThirdParty": true } }, ...
  3. 更新したテンプレートをローカルコンピュータに保存し、AWS CloudFormation コンソールを開きます。

  4. スタックを選択し、[既存スタックの変更セットの作成] を選択します。

  5. テンプレートをアップロードし、AWS CloudFormation に示された変更を表示します。これらがスタックに加えられる変更です。新しいリソースがリストに表示されています。

  6. [Execute] を選択します。

パイプラインの PollForSourceChanges パラメータを編集するには

重要

このメソッドを使用してパイプラインを作成すると、PollForSourceChanges パラメータはデフォルトで true になります (ただし、明示的に false に設定した場合は除きます)。イベントベースの変更検出を追加する場合は、このパラメータを出力に追加する必要があります。ポーリングを無効にするには、このパラメータを false に設定します。そうしないと、1 つのソース変更に対してパイプラインが 2 回起動されます。詳細については、「PollForSourceChanges パラメータのデフォルト設定」を参照してください。

  • テンプレートで、PollForSourceChangesfalse に変更します。パイプライン定義に PollForSourceChanges が含まれていなかった場合は、追加して false に設定します。

    この変更を行う理由 このパラメータを false に変更すると、定期的チェックがオフになるため、イベントベースの変更検出のみ使用することができます。

    YAML
    Name: Source Actions: - Name: SourceAction ActionTypeId: Category: Source Owner: ThirdParty Version: 1 Provider: GitHub OutputArtifacts: - Name: SourceOutput Configuration: Owner: !Ref GitHubOwner Repo: !Ref RepositoryName Branch: !Ref BranchName OAuthToken: {{resolve:secretsmanager:MyGitHubSecret:SecretString:token}} PollForSourceChanges: false RunOrder: 1
    JSON
    { "Name": "Source", "Actions": [ { "Name": "SourceAction", "ActionTypeId": { "Category": "Source", "Owner": "ThirdParty", "Version": 1, "Provider": "GitHub" }, "OutputArtifacts": [ { "Name": "SourceOutput" } ], "Configuration": { "Owner": { "Ref": "GitHubOwner" }, "Repo": { "Ref": "RepositoryName" }, "Branch": { "Ref": "BranchName" }, "OAuthToken": "{{resolve:secretsmanager:MyGitHubSecret:SecretString:token}}", "PollForSourceChanges": false }, "RunOrder": 1 }

GitHub バージョン 1 のソースアクションのポーリングパイプラインを更新する

GitHub バージョン 1 のソースアクションのポーリングパイプラインを更新する

プッシュイベント用にパイプラインを更新する (GitHub バージョン 1 ソースアクション) (コンソール)

CodePipeline コンソールを使用してウェブフックを使用して CodeCommit ソースリポジトリの変更を検出するように、CodeMit ソースリポジトリでパイプラインを更新できます。

Amazon CloudWatch Events を使用するためにポーリング (定期的なチェック) を使用しているパイプラインを編集するには、次の手順を使用します。パイプラインを作成する場合は、「CodePipeline でパイプラインを作成する」を参照してください。

コンソールを使用すると、パイプラインの PollForSourceChanges パラメータが変更されます。GitHub ウェブフックが作成され、登録されます。

パイプラインソースステージを編集するには

  1. にサインインします。AWS Management Consoleを開き、CodePipeline コンソールをhttp://console.aws.amazon.com/codesuite/codepipeline/home

    AWS アカウントに関連付けられているすべてのパイプラインの名前が表示されます。

  2. [Name] で、編集するパイプラインの名前を選択します。これにより、パイプラインの詳細ビューが開いて、パイプラインの各ステージの各アクションの状態などがわかります。

  3. パイプライン詳細ページで、[編集] を選択します。

  4. [Edit (編集)] ステージで、ソースアクションの編集アイコンを選択します。

  5. [Change detection options (変更検出オプション)] を展開し、[Use Amazon CloudWatch Events to automatically start my pipeline when a change occurs (recommended)] を選択します。

    ソースの変更を検出する CodePipeline が GitHub のウェブフックを作成することを伝えるメッセージが表示されます。AWSCodePipeline はウェブフックを作成します。以下のオプションでオプトアウトできます。[Update (更新)] を選択します。ウェブフックに加えて、CodePipeline は以下を作成します。

    • シークレット。ランダムに生成され、GitHub への接続を承認するために使用されます。

    • ウェブフック URL。リージョンのパブリックエンドポイントを使用して生成されます。

    CodePipeline は WebhookGitHub で。これによって、レポジトリのイベントを受信するための URL がサブスクライブされます。

  6. パイプラインの編集が終わったら、[パイプラインの変更を保存] を選択して概要ページに戻ります。

    パイプラインに対して作成されるウェブフックの名前を示すメッセージが表示されます。[Save and continue] を選択します。

  7. アクションをテストするには、AWS CLI を使用して、パイプラインのソースステージで指定されたソースに変更をコミットすることで、変更をリリースします。

プッシュイベント用にパイプラインを更新する (GitHub バージョン 1 ソースアクション) (CLI)

ウェブフックを使用するために定期的なチェックを使用しているパイプラインを編集するには、次の手順を使用します。パイプラインを作成する場合は、「CodePipeline でパイプラインを作成する」を参照してください。

イベント駆動型パイプラインを構築するには、パイプラインの PollForSourceChanges パラメータを編集してから、以下のリソースを手動で作成します。

  • GitHub のウェブフックと承認パラメータ

ウェブフックを作成して登録するには

注記

CLI または AWS CloudFormation を使用してパイプラインを作成して ウェブフックを追加する場合は、定期的なチェックを無効にする必要があります。定期的なチェックを無効にするには、以下の最終的な手順に詳述するとおり、PollForSourceChanges パラメータを明示的に追加して false に設定する必要があります。そうしないと、CLI または AWS CloudFormation パイプラインの既定により、PollForSourceChanges はデフォルトで true となり、パイプライン構造の出力に表示されません。PollForSourceChanges のデフォルトの詳細については、「PollForSourceChanges パラメータのデフォルト設定」を参照してください。

  1. テキストエディタで、作成するウェブフックの JSON ファイルを作成して保存します。「my-webhook」という名前のウェブフックには、このサンプルを使用します。

    {"webhook": {"name": "my-webhook", "targetPipeline": "pipeline_name", "targetAction": "source_action_name", "filters": [ { "jsonPath": "$.ref", "matchEquals": "refs/heads/{Branch}" } ], "authentication": "GITHUB_HMAC", "authenticationConfiguration": {"SecretToken":"secret"} } }
  2. put-webhook コマンドを呼び出し、--cli-input および --region パラメータを含めます。

    次のサンプルコマンドは、webhook_json JSON ファイルで ウェブフックを作成します。

    aws codepipeline put-webhook --cli-input-json file://webhook_json.json --region "eu-central-1"
  3. この例に示す出力では、my-webhook という名前のウェブフックに対して URL と ARN が返されます。

    { "webhook": { "url": "https://webhooks.domain.com/trigger111111111EXAMPLE11111111111111111", "definition": { "authenticationConfiguration": { "SecretToken": "secret" }, "name": "my-webhook", "authentication": "GITHUB_HMAC", "targetPipeline": "pipeline_name", "targetAction": "Source", "filters": [ { "jsonPath": "$.ref", "matchEquals": "refs/heads/{Branch}" } ] }, "arn": "arn:aws:codepipeline:eu-central-1:ACCOUNT_ID:webhook:my-webhook" }, "tags": [{ "key": "Project", "value": "ProjectA" }] }

    この例では、ウェブフックにProjectタグキーとProjectA値を含めることで、ウェブフックにタグ付けを追加します。CodePipeline でのリソースのタグ付けの詳細については、「」を参照してください。リソースのタグ付け

  4. register-webhook-with-third-party コマンドを呼び出し、--webhook-name パラメータを含めます。

    次のサンプルコマンドは、「my-webhook」という名前のウェブフックを登録します。

    aws codepipeline register-webhook-with-third-party --webhook-name my-webhook

パイプラインの PollForSourceChanges パラメータを編集するには

重要

このメソッドを使用してパイプラインを作成すると、PollForSourceChanges パラメータはデフォルトで true になります (ただし、明示的に false に設定した場合は除きます)。イベントベースの変更検出を追加する場合は、このパラメータを出力に追加する必要があります。ポーリングを無効にするには、このパラメータを false に設定します。そうしないと、1 つのソース変更に対してパイプラインが 2 回起動されます。詳細については、「PollForSourceChanges パラメータのデフォルト設定」を参照してください。

  1. get-pipeline コマンドを実行して、パイプライン構造を JSON ファイルにコピーします。たとえば、MyFirstPipeline という名前のパイプラインの場合は、以下のコマンドを入力します。

    aws codepipeline get-pipeline --name MyFirstPipeline >pipeline.json

    このコマンドは何も返しませんが、作成したファイルは、コマンドを実行したディレクトリにあります。

  2. 任意のプレーンテキストエディタで JSON ファイルを開き、以下に示しているように、PollForSourceChanges パラメータを変更または追加してソースステージを編集します。この例では、UserGitHubRepo という名前のリポジトリで、パラメータを false に設定します。

    この変更を行う理由 このパラメータを変更すると、定期的チェックがオフになるため、イベントベースの変更検出のみ使用することができます。

    "configuration": { "Owner": "darlaker", "Repo": "UserGitHubRepo", "PollForSourceChanges": "false", "Branch": "main", "OAuthToken": "****" },
  3. get-pipeline コマンドを使用して取得されたパイプライン構造を操作している場合、ファイルから metadata 行を削除して JSON ファイルの構造を編集する必要があります。それ以外の場合は、update-pipeline コマンドで使用することはできません。JSON ファイルのパイプライン構造から "metadata" セクションを削除します ({ } 行と、"created""pipelineARN"、および "updated" フィールド)。

    たとえば、構造から以下の行を削除します。

    "metadata": { "pipelineArn": "arn:aws:codepipeline:region:account-ID:pipeline-name", "created": "date", "updated": "date" }

    ファイルを保存します。

  4. 変更を適用するには、以下のように、パイプライン JSON ファイルを指定して、update-pipeline コマンドを実行します。

    重要

    ファイル名の前に必ず file:// を含めてください。このコマンドでは必須です。

    aws codepipeline update-pipeline --cli-input-json file://pipeline.json

    このコマンドは、編集したパイプラインの構造全体を返します。

    注記

    update-pipeline コマンドは、パイプラインを停止します。update-pipeline コマンドを実行したときにパイプラインによりリビジョンが実行されている場合、その実行は停止します。更新されたパイプラインによりそのリビジョンを実行するには、パイプラインを手動で開始する必要があります。パイプラインを手動で開始するには start-pipeline-execution コマンドを使用します。

プッシュイベント用にパイプラインを更新する (GitHub バージョン 1 ソースアクション) (AWS CloudFormationテンプレート)

以下の手順に従って、GitHub ソースを含むパイプラインを、定期的なチェック (ポーリング) から、ウェブフックを使用したイベントベースの変更検出に更新します。

イベント駆動型パイプラインを構築するにはAWS CodeCommitで編集するには、PollForSourceChangesパラメーターを作成し、テンプレートに GitHub Webhook リソースを追加します。

AWS CloudFormation でパイプラインを作成して管理する場合、テンプレートには以下のような内容が含まれます。

注記

ソースステージ内の PollForSourceChanges 設定プロパティを書き留めます。テンプレートにプロパティが含まれていない場合、PollForSourceChanges はデフォルトで true に設定されます。

YAML
Resources: AppPipeline: Type: AWS::CodePipeline::Pipeline Properties: Name: github-polling-pipeline RoleArn: !GetAtt CodePipelineServiceRole.Arn Stages: - Name: Source Actions: - Name: SourceAction ActionTypeId: Category: Source Owner: ThirdParty Version: 1 Provider: GitHub OutputArtifacts: - Name: SourceOutput Configuration: Owner: !Ref GitHubOwner Repo: !Ref RepositoryName Branch: !Ref BranchName OAuthToken: {{resolve:secretsmanager:MyGitHubSecret:SecretString:token}} PollForSourceChanges: true RunOrder: 1 ...
JSON
"AppPipeline": { "Type": "AWS::CodePipeline::Pipeline", "Properties": { "Name": "github-polling-pipeline", "RoleArn": { "Fn::GetAtt": [ "CodePipelineServiceRole", "Arn" ] }, "Stages": [ { "Name": "Source", "Actions": [ { "Name": "SourceAction", "ActionTypeId": { "Category": "Source", "Owner": "ThirdParty", "Version": 1, "Provider": "GitHub" }, "OutputArtifacts": [ { "Name": "SourceOutput" } ], "Configuration": { "Owner": { "Ref": "GitHubOwner" }, "Repo": { "Ref": "RepositoryName" }, "Branch": { "Ref": "BranchName" }, "OAuthToken": "{{resolve:secretsmanager:MyGitHubSecret:SecretString:token}}", "PollForSourceChanges": true }, "RunOrder": 1 } ] }, ...

テンプレートにパラメータを追加してウェブフックを作成するには

AWS Secrets Manager を使用して認証情報を保存することを強くお勧めします。Secrets Manager を使用する場合は、Secrets Manager でシークレットパラメータをすでに設定して保存しておく必要があります。この例では、Webhook の GitHub 認証情報に AWS Secrets Manager への動的な参照を使用します。詳細については、「動的な参照を使用してテンプレート値を指定する」を参照してください。

重要

シークレットパラメータを渡すときは、値をテンプレートに直接入力しないでください。値はプレーンテキストとしてレンダリングされるため、読み取り可能です。セキュリティ上の理由から、AWS CloudFormation テンプレートでプレーンテキストを使用して認証情報を保存しないでください。

CLI または AWS CloudFormation を使用してパイプラインを作成して ウェブフックを追加する場合は、定期的なチェックを無効にする必要があります。

注記

定期的なチェックを無効にするには、以下の最終的な手順に詳述するとおり、PollForSourceChanges パラメータを明示的に追加して false に設定する必要があります。そうしないと、CLI または AWS CloudFormation パイプラインの既定により、PollForSourceChanges はデフォルトで true となり、パイプライン構造の出力に表示されません。PollForSourceChanges のデフォルトの詳細については、「PollForSourceChanges パラメータのデフォルト設定」を参照してください。

  1. テンプレートの Resources に、パラメータを追加します。

    YAML
    Parameters: GitHubOwner: Type: String ...
    JSON
    { "Parameters": { "BranchName": { "Description": "GitHub branch name", "Type": "String", "Default": "main" }, "GitHubOwner": { "Type": "String" }, ...
  2. AWS::CodePipeline::Webhook AWS CloudFormation リソースを使用して、ウェブフックを追加します。

    注記

    指定した TargetAction は、パイプラインで定義したソースアクションの Name プロパティと一致する必要があります。

    RegisterWithThirdPartytrue に設定されている場合は、OAuthToken に関連付けられたユーザーが GitHub で必要なスコープを設定できることを確認してください。トークンとウェブフックには、以下の GitHub スコープが必要となります。

    • repo - パブリックおよびプライベートリポジトリからパイプラインにアーティファクトを読み込んでプルする完全制御に使用されます。

    • admin:repo_hook - リポジトリフックの完全制御に使用されます。

    それ以外の場合、GitHub から 404 が返されます。返される 404 の詳細については、「https://help.github.com/articles/about-webhooks」を参照してください。

    YAML
    AppPipelineWebhook: Type: AWS::CodePipeline::Webhook Properties: Authentication: GITHUB_HMAC AuthenticationConfiguration: SecretToken: {{resolve:secretsmanager:MyGitHubSecret:SecretString:token}} Filters: - JsonPath: "$.ref" MatchEquals: refs/heads/{Branch} TargetPipeline: !Ref AppPipeline TargetAction: SourceAction Name: AppPipelineWebhook TargetPipelineVersion: !GetAtt AppPipeline.Version RegisterWithThirdParty: true ...
    JSON
    "AppPipelineWebhook": { "Type": "AWS::CodePipeline::Webhook", "Properties": { "Authentication": "GITHUB_HMAC", "AuthenticationConfiguration": { "SecretToken": "{{resolve:secretsmanager:MyGitHubSecret:SecretString:token}}" }, "Filters": [ { "JsonPath": "$.ref", "MatchEquals": "refs/heads/{Branch}" } ], "TargetPipeline": { "Ref": "AppPipeline" }, "TargetAction": "SourceAction", "Name": "AppPipelineWebhook", "TargetPipelineVersion": { "Fn::GetAtt": [ "AppPipeline", "Version" ] }, "RegisterWithThirdParty": true } }, ...
  3. 更新したテンプレートをローカルコンピュータに保存し、AWS CloudFormation コンソールを開きます。

  4. スタックを選択し、[既存スタックの変更セットの作成] を選択します。

  5. テンプレートをアップロードし、AWS CloudFormation に示された変更を表示します。これらがスタックに加えられる変更です。新しいリソースがリストに表示されています。

  6. [Execute] を選択します。

パイプラインの PollForSourceChanges パラメータを編集するには

重要

このメソッドを使用してパイプラインを作成すると、PollForSourceChanges パラメータはデフォルトで true になります (ただし、明示的に false に設定した場合は除きます)。イベントベースの変更検出を追加する場合は、このパラメータを出力に追加する必要があります。ポーリングを無効にするには、このパラメータを false に設定します。そうしないと、1 つのソース変更に対してパイプラインが 2 回起動されます。詳細については、「PollForSourceChanges パラメータのデフォルト設定」を参照してください。

  • テンプレートで、PollForSourceChangesfalse に変更します。パイプライン定義に PollForSourceChanges が含まれていなかった場合は、追加して false に設定します。

    この変更を行う理由 このパラメータを false に変更すると、定期的チェックがオフになるため、イベントベースの変更検出のみ使用することができます。

    YAML
    Name: Source Actions: - Name: SourceAction ActionTypeId: Category: Source Owner: ThirdParty Version: 1 Provider: GitHub OutputArtifacts: - Name: SourceOutput Configuration: Owner: !Ref GitHubOwner Repo: !Ref RepositoryName Branch: !Ref BranchName OAuthToken: {{resolve:secretsmanager:MyGitHubSecret:SecretString:token}} PollForSourceChanges: false RunOrder: 1
    JSON
    { "Name": "Source", "Actions": [ { "Name": "SourceAction", "ActionTypeId": { "Category": "Source", "Owner": "ThirdParty", "Version": 1, "Provider": "GitHub" }, "OutputArtifacts": [ { "Name": "SourceOutput" } ], "Configuration": { "Owner": { "Ref": "GitHubOwner" }, "Repo": { "Ref": "RepositoryName" }, "Branch": { "Ref": "BranchName" }, "OAuthToken": "{{resolve:secretsmanager:MyGitHubSecret:SecretString:token}}", "PollForSourceChanges": false }, "RunOrder": 1 }

これらのリソースを AWS CloudFormation で作成すると、定義したウェブフックが GitHub の指定したリポジトリに作成されます。パイプラインはコミット時にトリガーされます。

YAML
Parameters: GitHubOwner: Type: String Resources: AppPipelineWebhook: Type: AWS::CodePipeline::Webhook Properties: Authentication: GITHUB_HMAC AuthenticationConfiguration: SecretToken: {{resolve:secretsmanager:MyGitHubSecret:SecretString:token}} Filters: - JsonPath: "$.ref" MatchEquals: refs/heads/{Branch} TargetPipeline: !Ref AppPipeline TargetAction: SourceAction Name: AppPipelineWebhook TargetPipelineVersion: !GetAtt AppPipeline.Version RegisterWithThirdParty: true AppPipeline: Type: AWS::CodePipeline::Pipeline Properties: Name: github-events-pipeline RoleArn: !GetAtt CodePipelineServiceRole.Arn Stages: - Name: Source Actions: - Name: SourceAction ActionTypeId: Category: Source Owner: ThirdParty Version: 1 Provider: GitHub OutputArtifacts: - Name: SourceOutput Configuration: Owner: !Ref GitHubOwner Repo: !Ref RepositoryName Branch: !Ref BranchName OAuthToken: {{resolve:secretsmanager:MyGitHubSecret:SecretString:token}} PollForSourceChanges: false RunOrder: 1 ...
JSON
{ "Parameters": { "BranchName": { "Description": "GitHub branch name", "Type": "String", "Default": "main" }, "RepositoryName": { "Description": "GitHub repository name", "Type": "String", "Default": "test" }, "GitHubOwner": { "Type": "String" }, "ApplicationName": { "Description": "CodeDeploy application name", "Type": "String", "Default": "DemoApplication" }, "BetaFleet": { "Description": "Fleet configured in CodeDeploy", "Type": "String", "Default": "DemoFleet" } }, "Resources": { ... }, "AppPipelineWebhook": { "Type": "AWS::CodePipeline::Webhook", "Properties": { "Authentication": "GITHUB_HMAC", "AuthenticationConfiguration": { "SecretToken": { "{{resolve:secretsmanager:MyGitHubSecret:SecretString:token}}" } }, "Filters": [ { "JsonPath": "$.ref", "MatchEquals": "refs/heads/{Branch}" } ], "TargetPipeline": { "Ref": "AppPipeline" }, "TargetAction": "SourceAction", "Name": "AppPipelineWebhook", "TargetPipelineVersion": { "Fn::GetAtt": [ "AppPipeline", "Version" ] }, "RegisterWithThirdParty": true } }, "AppPipeline": { "Type": "AWS::CodePipeline::Pipeline", "Properties": { "Name": "github-events-pipeline", "RoleArn": { "Fn::GetAtt": [ "CodePipelineServiceRole", "Arn" ] }, "Stages": [ { "Name": "Source", "Actions": [ { "Name": "SourceAction", "ActionTypeId": { "Category": "Source", "Owner": "ThirdParty", "Version": 1, "Provider": "GitHub" }, "OutputArtifacts": [ { "Name": "SourceOutput" } ], "Configuration": { "Owner": { "Ref": "GitHubOwner" }, "Repo": { "Ref": "RepositoryName" }, "Branch": { "Ref": "BranchName" }, "OAuthToken": "{{resolve:secretsmanager:MyGitHubSecret:SecretString:token}}", "PollForSourceChanges": false }, "RunOrder": 1 ...

認証の構成 (GitHub バージョン 1 のソースアクション)

CodePipeline は、GitHub OAuth トークンと個人用のアクセストークンを使用して GitHub リポジトリにアクセスし、最新の変更を取得します。GitHub で認証を設定するには、2 つの方法があります。

  • AWSデフォルトが作成されます。AWSコンソールを使用してパイプラインを作成または更新すると、管理の OAuth トークンになります。

  • 独自の顧客生成の個人アクセストークンを作成して管理することができます。CLI、SDK、または AWS CloudFormation を使用してパイプラインを作成または更新する場合は、個人アクセストークンが必要です。

認定された OAuth アプリを表示する

CodePipeline は OAuth トークンを使用して GitHub と統合します。GitHub は、CodePipeline の OAuth トークンのアクセス許可を追跡します。

GitHub で認証済みの統合を表示するには

  1. GitHub で、プロフィール写真のドロップダウンオプションから、[Settings] を選択します。

  2. [Applications (アプリケーション)] を選択してから、[Authorized OAuth Apps (認証済み OAuth アプリ)] を選択します。

  3. 認証されたアプリを確認します。

個人用のアクセストークンを使用するようにパイプラインを設定する (GitHub と CLI)

個人用のアクセストークンを使用して GitHub に接続するようにパイプラインを設定できます。スクリプトのパスワードの代わりにトークンを使用する利点は、トークンは取り消したりローテーションさせたりできることです。また、個人用のアクセストークンに特定の権限とアクセス許可を与えることもできます。個人用のアクセストークンはそれぞれ、アカウントではなく、パイプラインのレベルで関連付けられています。

注記

同じ個人用のアクセストークンを使用している場合は、他のアプリケーションの更新が必要になる場合があります。セキュリティのベストプラクティスとして、複数のアプリケーション間で単一のトークンを共有しないでください。アプリケーションごとに個人用のアクセストークンを 1 つ作成します。詳細については、GitHub ウェブサイトの「コマンドライン用の個人アクセストークンの作成」を参照してください。

GitHub 個人用アクセストークンを作成し、パイプライン構造を新しいトークンで更新します。

  1. GitHub で、プロフィール写真のドロップダウンオプションから、[Settings] を選択します。

  2. [Developer settings] を選択してから [Personal access tokens] を選択します。

  3. [Generate new token] を選択します。

    -新しい個人用のアクセストークンページが表示されます。

  4. [Select scopes] で、[admin:repo_hook] および [repo] を選択します。

  5. [Generate token] を選択します。

  6. 生成されたトークンの横にあるコピーアイコンをクリックします。

    注記

    ここで、生成されたトークンを確実にコピーします。このページを閉じた後でトークンを表示することはできません。

  7. ターミナル (Linux、macOS、UNIX) またはコマンドプロンプト (Windows) で、get-pipelineコマンドを実行し、コマンドの出力を JSON ファイルにコピーします。たとえば、MyFirstPipeline という名前のパイプラインに対しては、以下のようなコマンドを入力します。

    aws codepipeline get-pipeline --name MyFirstPipeline >pipeline.json

    コマンドの出力は、pipeline.json ファイルに送られます。

  8. プレーンテキストエディタでファイルを開き、GitHub アクションの OAuthTokenField の値を編集します。

    AWS CLI を使用してパイプラインを作成する場合、このフィールドに GitHub 個人用アクセストークンを渡すことができます。アスタリスク (****) を GitHub からコピーしたトークンに置き換えます。get-pipeline を実行してアクション設定を表示すると、この値の 4 つのアスタリスクマスクが表示されます。たとえば、値 111222333444555666777888EXAMPLE を持つ個人用アクセストークンの場合。

    "configuration": { "Owner": "MyGitHubUserName", "Repo": "test-repo", "Branch": "main", "OAuthToken": "111222333444555666777888EXAMPLE" }
    注記

    AWS CloudFormation テンプレートを使用してパイプラインを作成する場合、最初にトークンをシークレットとして AWS Secrets Manager に保存する必要があります。このフィールドの値は、保存されたシークレットへの動的リファレンスとして含めます。例については、「GitHub バージョン1のソースアクション構造リファレンス」を参照してください。

  9. get-pipeline コマンドを使用して取得されたパイプライン構造を使用している場合、ファイルから metadata 行を削除して JSON ファイルの構造を修正する必要があります。それ以外の場合は、update-pipeline コマンドで使用することはできません。JSON ファイルのパイプライン構造からセクションを削除します ("metadata": { } 行と、"created""pipelineARN"、および "updated" フィールド)。

    たとえば、構造から以下の行を削除します。

    "metadata": { "pipelineArn": "arn:aws:codepipeline:region:account-ID:pipeline-name", "created": "date", "updated": "date" }
  10. ファイルを保存したら、先ほど編集した JSON ファイルを --cli-input-json パラメータで指定して、update-pipeline を実行します。

    たとえば、MyFirstPipeline という名前のパイプラインを更新するには、以下のように入力します。

    aws codepipeline update-pipeline --cli-input-json file://pipeline.json
    重要

    ファイル名の前に必ず file:// を含めてください。このコマンドでは必須です。

  11. GitHub アクションを含むパイプラインごとにステップ 6 〜 8 を繰り返します。

  12. 完了したら、それらのパイプラインの更新に使用した JSON ファイルを削除します。

GitHub と CodePipeline CLI を使用して、GitHub 個人用アクセストークンを作成し、定期的に更新する

スクリプトのパスワードの代わりにトークンを使用する利点は、トークンは取り消したりローテーションさせたりできることです。また、個人用のアクセストークンに特定の権限とアクセス許可を与えることもできます。トークンは安全に保管し、定期的にローテーションまたは再生成する必要があります。トークンローテーションは、RFC-6819 (OAuth 2.0 の脅威モデルとセキュリティ上の考慮事項)、セクション 5.1.5.3 で推奨されています。

詳細については、GitHub ウェブサイトの「コマンドライン用の個人アクセストークンの作成」を参照してください。

新しい個人用アクセストークンを再生成したら、AWS CLI または API を使用するか、AWS CloudFormation を使用して UpdatePipeline を呼び出すことで、トークンをローテーションすることができます。

注記

同じ個人用のアクセストークンを使用している場合は、他のアプリケーションの更新が必要になる場合があります。セキュリティのベストプラクティスとして、複数のアプリケーション間で単一のトークンを共有しないでください。各アプリケーションに対して新しい個人用のアクセストークンを作成します。

これらの手順を使用して、GitHub 個人用アクセストークンをローテーションし、パイプライン構造を新しいトークンで更新します。

注記

個人用アクセストークンをローテーションした後は、古いトークン情報を含む AWS CLI スクリプトまたは AWS CloudFormation テンプレートを必ず更新してください。

  1. GitHub で、プロフィール写真のドロップダウンオプションから、[Settings] を選択します。

  2. [Developer settings] を選択してから [Personal access tokens] を選択します。

  3. GitHub の個人用アクセストークンの横にある [編集] を選択します。

  4. [Regenerate token] を選択します。

  5. 再生成されたトークンの横にあるコピーアイコンをクリックします。

  6. ターミナル (Linux、macOS、UNIX) またはコマンドプロンプト (Windows) で、get-pipelineコマンドを実行して、個人用アクセストークンを変更し、コマンドの出力を JSON ファイルにコピーします。たとえば、MyFirstPipeline という名前のパイプラインに対しては、以下のようなコマンドを入力します。

    aws codepipeline get-pipeline --name MyFirstPipeline >pipeline.json

    コマンドの出力は、pipeline.json ファイルに送られます。

  7. プレーンテキストエディタでファイルを開き、GitHub アクションの OAuthTokenField の値を編集します。

    AWS CLI を使用してパイプラインを作成する場合、このフィールドに GitHub 個人用アクセストークンを渡すことができます。アスタリスク (****) を GitHub からコピーしたトークンに置き換えます。get-pipeline を実行してアクション設定を表示すると、この値の 4 つのアスタリスクマスクが表示されます。たとえば、値 111222333444555666777888EXAMPLE を持つ個人用アクセストークンの場合。

    "configuration": { "Owner": "MyGitHubUserName", "Repo": "test-repo", "Branch": "main", "OAuthToken": "111222333444555666777888EXAMPLE" }
    注記

    AWS CloudFormation テンプレートを使用してパイプラインを更新する場合、最初にトークンをシークレットとして AWS Secrets Manager に保存する必要があります。このフィールドの値は、保存されたシークレットへの動的リファレンスとして含めます。例については、「GitHub バージョン1のソースアクション構造リファレンス」を参照してください。

  8. get-pipeline コマンドを使用して取得されたパイプライン構造を使用している場合、ファイルから metadata 行を削除して JSON ファイルの構造を修正する必要があります。それ以外の場合は、update-pipeline コマンドで使用することはできません。JSON ファイルのパイプライン構造からセクションを削除します ("metadata": { } 行と、"created""pipelineARN"、および "updated" フィールド)。

    たとえば、構造から以下の行を削除します。

    "metadata": { "pipelineArn": "arn:aws:codepipeline:region:account-ID:pipeline-name", "created": "date", "updated": "date" }
  9. ファイルを保存したら、先ほど編集した JSON ファイルを --cli-input-json パラメータで指定して、update-pipeline を実行します。たとえば、MyFirstPipeline という名前のパイプラインを更新するには、以下のように入力します。

    重要

    ファイル名の前に必ず file:// を含めてください。このコマンドでは必須です。

    aws codepipeline update-pipeline --cli-input-json file://pipeline.json
  10. パイプラインの更新が終了したら、JSON ファイルを削除します。

詳細については、「パイプラインエラー: 「GitHub リポジトリにアクセスできませんでした」または「GitHub リポジトリに接続できませんでした」(GitHub バージョン 1 ソースアクション)」を参照してください。

チュートリアル: でパイプラインを作成します。AWS CloudFormation(GitHub バージョン1のソースアクション)

注記

GitHub バージョン 1 のアクションはお勧めしません。GitHub バージョン 1 アクションを持つパイプラインの場合、CodePipeline は OAuth ベースのトークンを使用して GitHub リポジトリに接続します。対照的に、GitHub アクション (バージョン 2) は、接続リソースを使用してAWSリソースを GitHub リポジトリにアップロードします。接続リソースは、アプリケーションベースのトークンを使用して接続します。接続を使用する推奨の GitHub アクションにパイプラインを更新する方法の詳細については、」GitHub バージョン 1 のソースアクションを GitHub バージョン 2 のソースアクションに更新する

このチュートリアルでは、使用する方法を示します。AWS CloudFormationコンソールを使用して、GitHub ソースリポジトリに接続されたパイプラインを含むインフラストラクチャを作成します。このチュートリアルでは、提供されたサンプルテンプレートファイルを使用して、アーティファクトストア、パイプライン、変更検出リソース (ウェブフック) を含むリソーススタックを作成します。AWS CloudFormation でリソーススタックを作成したら、AWS CodePipeline コンソールでパイプラインを表示することができます。パイプラインは、GitHub ソースステージと CodeDeploy デプロイステージの 2 ステージパイプラインになります。

AWS Secrets Manager を使用して認証情報を保存することを強くお勧めします。Secrets Manager を使用する場合は、Secrets Manager でシークレットパラメータをすでに設定して保存しておく必要があります。この例では、動的参照を使用してAWSウェブフックの GitHub 認証情報のSecrets Manager。詳細については、「動的な参照を使用してテンプレート値を指定する」を参照してください。

重要

シークレットパラメータを渡すときは、値をテンプレートに直接入力しないでください。値はプレーンテキストとしてレンダリングされるため、読み取り可能です。セキュリティ上の理由から、AWS CloudFormation テンプレートでプレーンテキストを使用して認証情報を保存しないでください。

前提条件:

AWS CloudFormation サンプルテンプレートで使用する以下のリソースを作成しておく必要があります。

  • CodeDeploy アプリケーションおよびデプロイグループ。[CodeDeploy] リソースは、チュートリアル: シンプルなパイプラインを作成する (CodeCommit リポジトリ)

  • 以下のリンクのいずれかを選択して、サンプルをダウンロードします。AWS CloudFormationテンプレートファイルを作成します。YAML|JSON

    ファイルを解凍し、ローカルコンピュータに配置します。

  • 上記の箇条書きのサンプルテンプレートは、GitHub シークレットトークンを使用して、AWS Secrets Manager: {{resolve:secretsmanager:MyGitHubSecret:SecretString:token}}。 テンプレートで動的リファレンスを使用するには、GitHub トークンを作成し、Secrets Manager に保存する必要があります。OAuthTokenおよびSecretTokenフィールド。

  • SampleApp_Linux.zip をダウンロードします。

  • ソースに使用する GitHub リポジトリとブランチ。

  • GitHub リポジトリの個人用アクセスキー。これは、リポジトリに接続するための OAuth トークンの提供に使用されます。

でスタックを作成するにはAWS CloudFormation

  1. SampleApp_Linux.zip からファイルを解凍し、GitHub リポジトリにアップロードします。解凍したファイルをリポジトリのルートディレクトリにアップロードする必要があります。

  2. AWS CloudFormation コンソールを開き、[スタックの作成] を選択します。

  3. [テンプレートの選択] で、[テンプレートを Amazon S3 にアップロード] を選択します。[参照] を選択後、ローカルコンピュータからテンプレートファイルを選択します。[Next (次へ)] を選択します。

  4. [スタック名] に、パイプラインの名前を入力します。サンプルテンプレートで指定されたパラメータが表示されます。以下のパラメータを入力します。

    1. EclipseApplicationName[CodeDeploy アプリケーションの名前] を入力します。

    2. EclipseBetaFleet[CodeDeploy デプロイグループの名前を入力します。

    3. [BranchName] に、使用するリポジトリブランチを入力します。

    4. [GitHubOAuthToken] に GitHub リポジトリの個人用アクセスキーを入力します。

    5. [GitHubOwner] にリポジトリの所有者の GitHub ユーザー名を入力します。

    6. [GitHubSecret] に、AWS CloudFormation によって作成されるウェブフックに使用するシークレットを入力します。

    7. [RepositoryName] に GitHub ソースリポジトリの名前を入力します。

  5. [Next (次へ)] を選択します。以下のページのデフォルト値を受け入れ、[次へ] を選択します。

  6. Eclipse機能[] で [私はそれを認めます。AWSCloudFormation が IAM リソースを作成する可能性がある[] を選択してから、[作成

  7. スタックの作成が完了したら、イベントリストを表示して、エラーがないか確認します。

  8. にサインインします。AWS Management Consoleを開き、CodePipeline コンソールをhttps://console.aws.amazon.com/codepipeline/

    [パイプライン] で、パイプラインを選択してから、[表示] を選択します。この図では、パイプラインのソースとデプロイのステージを示しています。

  9. ソースリポジトリで、変更をコミットしてプッシュします。変更検出リソースが変更を受け取り、パイプラインが開始されます。

トラブルシューティング (GitHub バージョン 1 のソースアクション)

パイプラインエラー: GitHub ソースステージに Git サブモジュールが含まれていますが、CodePipeline によって初期化されません (GitHub バージョン1 ソースアクション)

問題: CodePipeline は git サブモジュールをサポートしていません。CodePipeline は GitHub のアーカイブリンク API に依存しており、サブモジュールをサポートしていません。

解決方法: GitHub リポジトリを別のスクリプトの一部として直接クローンすることを検討してください。たとえば、Jenkins スクリプトにクローンアクションを含めることができます。

パイプラインエラー: 「GitHub リポジトリにアクセスできませんでした」または「GitHub リポジトリに接続できませんでした」(GitHub バージョン 1 ソースアクション)

問題: CodePipeline は OAuth トークンを使用して GitHub と統合します。GitHub ソースプロバイダーを使用してパイプラインを作成すると、CodePipeline はデフォルトの OAuth トークンを作成して GitHub の認証情報を管理します。パイプラインがリポジトリに接続すると、GitHub 認証情報を使用して GitHub に接続します。OAuth トークンの認証情報は CodePipeline によって管理されています。トークンを表示または管理することは一切ありません。GitHub への接続に使用できるその他の種類の認証情報は、OAuth アプリではなくユーザーが作成した個人用アクセストークンです。個人用アクセストークンは、CodePipeline ではなく、ユーザーが管理します。

これらのアクセス権限が取り消されたり、無効になったりした場合は、GitHub トークンを使用してリポジトリに接続できないと、パイプラインは失敗します。

セキュリティのベストプラクティスは、個人アクセストークンを定期的にローテーションすることです。詳細については、「GitHub と CodePipeline CLI を使用して、GitHub 個人用アクセストークンを作成し、定期的に更新する」を参照してください。

解決方法:

CodePipeline が GitHub リポジトリに接続できない場合は、2 つのトラブルシューティングのオプションがあります。

  • パイプラインをリポジトリに手動で再接続するだけで済む場合があります。CodePipeline の OAuth トークンのアクセス許可を取り消した可能性があり、それらを復元するだけで済みます。これを行うには、以下の手順を参照してください。

  • デフォルトの OAuth トークンを個人用アクセストークンに変更する必要がある場合があります。OAuth トークンの数には制限があります。詳細については、GitHub のドキュメントを参照してください。CodePipeline がその制限に達すると、古いトークンは機能しなくなり、そのトークンに依存するパイプラインのアクションは失敗します。

  1. CodePipeline のアクセス許可が取り消されたかどうかを確認してください。GitHub の Authorized OAuth Apps リストを確認する手順については、「認定された OAuth アプリを表示する」を参照してください。リストに CodePipeline が表示されない場合は、コンソールを使用してパイプラインを GitHub に再接続する必要があります。

    1. コンソールでパイプライン開き、[編集] を選択します。GitHub ソースアクションを含むソースステージで、[ステージの編集] を選択します。

    2. GitHub のソースアクションで、編集アイコンを選択します。

    3. [アクションの編集] ページで、[GitHub に接続] を選択して認証を復元します。

      プロンプトが表示された場合は、アクションのリポジトリブランチを再入力する必要があります。[Done] (完了) をクリックします。ステージ編集ページで [完了] を選択してから、パイプライン編集ページで [保存] を選択します。パイプラインを実行します。

  2. エラーは修正されませんが、CodePipeline認定された OAuth アプリリストGitHub 許容されるトークン数を超えている可能性があります。この問題を解決するには、1 つの OAuth トークンを個人用アクセストークンとして手動で構成し、AWS アカウントのすべてのパイプラインでそのトークンを使用するように構成します。詳細については、「個人用のアクセストークンを使用するようにパイプラインを設定する (GitHub と CLI)」を参照してください。