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

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

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

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

注記

GitHub バージョン 1 アクションの使用はお勧めしませんが、 GitHub バージョン 1 アクションを持つ既存のパイプラインは何の影響なく引き続き動作します。 GitHubバージョン 1 アクションを持つパイプラインの場合、OAuth CodePipeline GitHub ベースのトークンを使用してリポジトリに接続します。対照的に、 GitHub アクション (バージョン 2)AWS GitHub は接続リソースを使用してリソースをリポジトリへに関連付けます。接続リソースは、アプリベースのトークンを使用して接続します。 GitHub 接続を使用する推奨されるアクションにパイプラインを更新する方法の詳細については、「」を参照してくださいGitHub バージョン 1 のソースアクションを GitHub バージョン 2 のソースアクションに更新する。アプリベースのアクセスとは対照的な OAuth GitHub GitHub ベースのアクセスの詳細については、「」を参照してくださいhttps://docs.github.com/en/developers/apps/differences-between-github-apps-and-oauth-apps

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

注記

GitHub でバージョン 2 のソースアクションを設定する場合AWS CloudFormation、 GitHub トークン情報を含めたり、ウェブフックリソースを追加することはありません。接続リソースは、『AWS CloudFormationユーザーガイド』AWS::CodeStarConnections::Connectionに示されているように設定します。

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

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

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

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

注記

GitHub バージョン 1 アクションの使用はお勧めしませんが、 GitHub バージョン 1 アクションを持つ既存のパイプラインは何の影響なく引き続き動作します。 GitHub GitHub バージョン 1 のソースアクションを持つパイプラインの場合、OAuth CodePipeline GitHub ベースのトークンを使用してリポジトリに接続します。対照的に、 GitHub 新しいアクション (バージョン 2)AWS GitHub は接続リソースを使用してリソースをリポジトリへに関連付けます。接続リソースは、アプリベースのトークンを使用して接続します。 GitHub 接続を使用する推奨されるアクションにパイプラインを更新する方法の詳細については、「」を参照してくださいGitHub バージョン 1 のソースアクションを GitHub バージョン 2 のソースアクションに更新する

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

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

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

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

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

アクションタイプ

  • カテゴリ:Source

  • 所有者: ThirdParty

  • プロバイダー: GitHub

  • バージョン: 1

設定パラメータ

所有者

必須: はい

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

Repo

必須: はい

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

ブランチ

必須: はい

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

OAuthToken

必須: はい

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

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

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

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

GitHub スコープの詳細については、 GitHub Web サイトのGitHub Developer API リファレンスを参照してください

PollForSourceChanges

必須: いいえ

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

重要

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

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

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

    注記

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

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

入力アーティファクト

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

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

出力アーティファクト

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

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

出力変数

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

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

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 スコープ。これは、リポジトリフックの完全制御に使用されます。

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

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

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

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

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

Webhook は、 GitHubリポジトリなどの別のツールのイベントを検出し、それらの外部イベントをパイプラインに接続する HTTP 通知です。

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

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

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

重要

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

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

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

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

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

    GitHub OAuth またはパーソナルトークンはウェブフックシークレットとして使用すべきではありません。

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

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 コンソールを使用してパイプラインのソースアクションを編集すると、Webhook が自動的に更新されます (必要に応じて再登録されます)。

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

  • Webhook GitHub 名またはリポジトリ名を変更する場合は、コンソールでソースアクションを編集するか、CLI で Webhook を削除して再作成する必要があります。ウェブフックを作成したら、それも登録します。例 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ソースのウェブフックを削除しますの手順を使用して、古い Webhook GitHub 名またはリポジトリに関連付けられている既存の Webhook を登録解除して削除します。

  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 でウェブフックにタグを付けることができます。タグは、AWS リソースに関連付けられているキーと値のペアです。 CodePipeline リソースのタグ付け、ユースケース、タグのキーと値の制約、サポートされているリソースタイプの詳細については、「」を参照してくださいリソースのタグ付け

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

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

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

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

ターミナルまたはコマンドラインで、タグを追加するウェブフックの Amazon リソースネーム (ARN) と、追加するタグのキーと値を指定して、tag-resource コマンドを実行します。ウェブフックに複数のタグを追加できます。たとえば、MyWebhook名前の Webhook に 2 つのタグを付け、1 つに Project という名前のタグキーにタグ値がでNewProjectApplicationNameタグキーにタグ値がというタグキーをタグ付けするには、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 コマンドを実行します。たとえば、ARN MyWebhookがのという名前のウェブフックのタグキーとタグ値のリストを表示するには、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 と、削除するタグのタグキーを指定します。たとえば、Project MyWebhookというタグキーが付いた名前の Webhook のタグを削除するには:

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テンプレート) の Webhook を作成する

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

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

AWS Secrets Manager を使用して認証情報を保存することを強くお勧めします。Secrets Manager を使用する場合は、Secrets Manager でシークレットパラメータをすでに設定して保存しておく必要があります。この例では、 GitHubウェブフックの認証情報に 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 プロパティと一致する必要があります。

    RegisterWithThirdPartyがに設定されている場合はtrueOAuthTokenに関係するユーザーがで必要なスコープを設定できることを確認してください GitHub。 GitHub トークンとウェブフックには以下のスコープが必要です。

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

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

    それ以外の場合は 404 GitHub を返します。返される 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 ソースアクション) (conol)

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

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

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

パイプラインソースステージを編集するには
  1. にサインインしてAWS Management Console、http://console.aws.amazon.com/codesuite/codepipeline/home CodePipeline でコンソールを開きます。

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

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

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

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

  5. [変更検出オプション] を展開し、[Amazon CloudWatch Events を使用する] を選択すると、変更が発生したときにパイプラインが自動的に開始されます (推奨)

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

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

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

    CodePipeline GitHubウェブフックをに登録します。これにより、レポジトリのイベントを受信するための URL がサブスクライブされます。

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

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

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

プッシュイベント用にパイプラインを更新する (CLI)GitHub

ウェブフックを使用するために定期的なチェックを使用しているパイプラインを編集するには、次の手順を使用します。パイプラインを作成する場合は、「でパイプラインを作成 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 ソースとともに) 定期的なチェック (ポーリング) から Webhook を使用したイベントベースの変更検出に更新してください。

でイベント駆動型パイプラインを構築するには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 でシークレットパラメータをすでに設定して保存しておく必要があります。この例では、 GitHubウェブフックの認証情報に 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 プロパティと一致する必要があります。

    RegisterWithThirdPartyがに設定されている場合はtrueOAuthTokenに関係するユーザーがで必要なスコープを設定できることを確認してください GitHub。 GitHub トークンとウェブフックには以下のスコープが必要です。

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

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

    それ以外の場合は 404 GitHub を返します。返される 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、定義された Webhook 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 トークンと個人用アクセストークンを使用してリポジトリにアクセスし、最新の変更を取得します。で認証を設定するには 2 つの方法があります GitHub。

  • AWS はコンソールを使用してパイプラインを作成または更新際に、デフォルトの AWS マネージド OAuth トークンを作成します。

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

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

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

認証済みのインテグレーションを確認するには GitHub
  1. で GitHub、プロフィール写真のドロップダウンオプションから、[Settings] (設定) を選択します。

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

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

パーソナルアクセストークン (GitHub および CLI) を使用するようにパイプラインを設定する

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

注記

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

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)で、OAuth トークンを変更したいパイプライン上で get-pipeline コマンドを実行し、コマンドの出力を JSON ファイルにコピーしてください。例えば、という名前のパイプラインに対しては MyFirstPipeline、以下のようなコマンドを入力します。

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

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

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

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

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

    AWS CloudFormation テンプレートを使用してパイプラインを作成する場合、最初にトークンをシークレットとして AWS Secrets Manager に保存する必要があります。このフィールドの値は、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 ウェブサイトの Creating a personal access token for the command line を参照してください。

新しい個人用アクセストークンを再生成したら、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. プレーンテキストエディタでファイルを開き、OAuthTokenField GitHub アクションの値を編集します。

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

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

    AWS CloudFormation テンプレートを使用してパイプラインを更新する場合、最初にトークンをシークレットとして AWS Secrets Manager に保存する必要があります。このフィールドの値は、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 アクションを持つパイプラインの場合、OAuth CodePipeline 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 でシークレットパラメータをすでに設定して保存しておく必要があります。この例では、 GitHub ウェブフックの認証情報にAWS Secrets Manager への動的な参照を使用します。詳細については、「動的な参照を使用してテンプレート値を指定する」を参照してください。

重要

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

前提条件:

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

  • CodeDeploy アプリケーションとデプロイグループを作成します。 CodeDeploy で作成したリソースを使用できますチュートリアル: シンプルなパイプラインを作成する (CodeCommit リポジトリ)

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

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

  • 上のbullet のサンプルテンプレートは、 GitHub AWS Secrets Manager{{resolve:secretsmanager:MyGitHubSecret:SecretString:token}}次の場所に保存されているトークンを動的に参照するシークレットトークンを使用するように設定されています。SecretTokenとフィールドのテンプレートで動的参照を使用するには、 GitHub OAuthTokenトークンを作成し、Secrets Manager に保存する必要があります。

  • SampleApp_Linux.zip をダウンロードしてください。

  • GitHub ソースに使用したいリポジトリとブランチ。

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

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

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

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

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

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

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

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

    4. GitHubO にAuthToken、 GitHub リポジトリの個人アクセスキーを入力します。

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

    6. GitHubSecret、WebhookAWS CloudFormation の作成に使用するシークレットを入力します。

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

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

  6. [機能] で [IAMAWS CloudFormation リソースが作成される可能性があることを確認する] を選択し、[作成] を選択します。

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

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

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

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

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

パイプラインのエラーです。 GitHub ソースステージに Git サブモジュールが含まれていますが、 CodePipeline それらを初期化しません(GitHub バージョン 1 のソースアクション)。

問題点:Git CodePipeline サブモジュールをサポートしていません。 CodePipelineのアーカイブリンク API を使用しており GitHub、サブモジュールをサポートしていません。

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

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

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

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

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

解決方法:

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

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

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

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

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

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

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

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

  2. それでもエラーが修正されず、の Authorized OAuth Apps CodePipeline の一覧に表示される場合 GitHub、トークンの許容数を超えている可能性があります。この問題を解決するには、1 つの OAuth トークンを個人用アクセストークンとして手動で構成し、AWS アカウントのすべてのパイプラインでそのトークンを使用するように構成します。詳細については、パーソナルアクセストークン (GitHub および CLI) を使用するようにパイプラインを設定するを参照してください。