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

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

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

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

注記
注記

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

GitHub と統合するには、 CodePipeline を使用するを使用する GitHub パイプラインの OAuth アプリケーション。CodePipeline は、ウェブフックを使用して、パイプラインの変更検出を管理する 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 GitHub バージョン 1 のソースアクション CodePipeline OAuth ベースのトークンを使用して GitHub repository. 対照的に、新しい GitHub アクション (バージョン 2) は接続リソースを使用して関連付けます。AWSリソースへのアクセス GitHub repository. 接続リソースは、アプリベースのトークンを使用して接続します。パイプラインを推奨に更新する方法の詳細については、 GitHub 接続を使用するアクションについては、を参照してください。GitHub バージョン 1 のソースアクションを GitHub バージョン 2 のソースアクションに更新する

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

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

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

アクセスを制限する場合 CodePipeline リポジトリが必要で、 GitHub アカウントを作成し、CodePipeline と統合するリポジトリのみにアカウントへのアクセスを許可します。設定時にそのアカウントを使用する CodePipeline を使用するバージョン GitHub パイプライン内のソースステージのリポジトリー。

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

アクションタイプ

  • カテゴリ:Source

  • 所有者: ThirdParty

  • プロバイダー: GitHub

  • バージョン: 1

設定パラメータ

所有者

必須: はい

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

Repo

必須: はい

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

ブランチ

必須: はい

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

OAuthToken

必須: はい

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

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

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

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

の詳細 GitHub スコープ、を参照してください。GitHub 開発者の API リファレンスで GitHub ウェブサイト.

PollForSourceChanges

必須: いいえ

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

重要

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

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

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

    注記

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

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

入力アーティファクト

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

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

出力アーティファクト

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

  • 説明: このアクションの出力アーティファクトは、パイプライン実行のソースリビジョンとして指定されたコミットで設定されたリポジトリとブランチの内容を含む ZIP ファイルです。リポジトリから生成されたアーティファクトは、の出力アーティファクトです。 GitHub action. ソースコードのコミット 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 スコープ。これは、リポジトリフックの完全制御に使用されます。

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

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

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

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

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

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

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

のウェブフックを作成します。 GitHub ソース

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

重要

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

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

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

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

    -Webhook の秘密は次の場合に使用されます。 GitHub Webhook リクエストを CodePipeline そのため、 CodePipeline Webhookリクエストが本物であり、GitHub から来ていることを検証できます。このフィールドには、ランダムに生成された長いシークレット値を指定することをお勧めします。使用するバージョン CodePipeline RegisterWebhookWithThirdPartyAPI が呼び出されると、Webhook シークレットが渡されます。 GitHub を介したバージョン GitHub ウェブフック API を作成します。詳細については、「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 パイプラインのソースアクションを使用すると、ウェブフックが更新されます (そして、必要に応じて再登録されます)。

  • ウェブフック名を更新せず、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 repository.

  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 という名前のウェブフックに、Project というタグキーと NewProject というタグ値、ApplicationName というタグキーと MyApplication というタグ値の2つのタグを付けると、以下のようになります。

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 という名前のタグキー Project を持つウェブフックのタグを削除するには、次のようにします。

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

    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 ソースアクション) (consol)

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

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

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

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

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

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

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

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

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

  5. 拡張検出オプションの変更を選択し、Amazon を使用する CloudWatch 変更が発生したときにパイプラインを自動的に開始するイベント (推奨)

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

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

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

    CodePipeline は、ウェブフック を GitHub に登録します。これによって、レポジトリのイベントを受信するための 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 source) は、定期的なチェック (ポーリング) から、ウェブフックを使用したイベントベースの変更検出まで。

でイベント駆動型パイプラインを構築するにはAWS CodeCommitで編集すると、PollForSourceChangesパイプラインのパラメータを追加し、 GitHub ウェブフックリソースをテンプレートに追加します。

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 プロパティと一致する必要があります。

    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 repository. パイプラインはコミット時にトリガーされます。

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

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

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

  8. プレーンテキストエディタでファイルを開き、OAuthTokenFieldの GitHub action.

    使用するバージョンAWS CLIパイプラインを作成するには、 GitHub このフィールド内の個人用アクセストークンを指定します。アスタリスク (****) を 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. を含むパイプラインごとにステップ 6 ~ 8 を繰り返します。 GitHub action.

  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. プレーンテキストエディタでファイルを開き、OAuthTokenFieldの GitHub action.

    使用するバージョンAWS CLIパイプラインを作成するには、 GitHub このフィールド内の個人用アクセストークンを指定します。アスタリスク (****) を 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 のアクション CodePipeline OAuth ベースのトークンを使用して GitHub repository. 対照的に、 GitHub アクション (バージョン 2) は接続リソースを使用して関連付けます。AWSリソースに関するリソース GitHub repository. 接続リソースは、アプリベースのトークンを使用して接続します。パイプラインを推奨に更新する方法の詳細については、 GitHub 接続を使用するアクションについては、を参照してください。GitHub バージョン 1 のソースアクションを GitHub バージョン 2 のソースアクションに更新する

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

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

重要

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

前提条件:

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

  • ある CodeDeploy アプリケーションおよびデプロイグループ。♪ CodeDeploy 「」で作成したリソースチュートリアル: シンプルなパイプラインを作成する (CodeCommit リポジトリ)

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

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

  • 上記のbullet のサンプルテンプレートは、 GitHub に格納されているトークンへの動的リファレンスを含むシークレットトークンAWS Secrets Manager: {{resolve:secretsmanager:MyGitHubSecret:SecretString:token}}。 を作成する必要があります。 GitHub テンプレートの動的リファレンスを使用するには、トークンを使用してSecrets Managerに保存します。OAuthTokenそしてSecretTokenフィールド。

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

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

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

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

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

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

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

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

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

    2. In (イン)betaFleetで、の名前を入力します。 CodeDeploy デプロイグループ。

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

    4. In (イン)GitHubOAuthTokenの個人用アクセスキーを入力します。 GitHub repository.

    5. In (イン)GitHubOwner[] に [] と入力します GitHub リポジトリの所有者のユーザー名。

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

    7. In (イン)RepositoryNameで、の名前を入力します。 GitHub ソースリポジトリ。

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

  6. In (イン)機能の場合は、を選択します。それを認めますAWS CloudFormation IAM リソースを作成するかもしれない[] を選択してから、作成

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

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

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

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

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

パイプラインエラー: MY 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 つのトラブルシューティングオプションがあります。

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

  • デフォルトの 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)を参照してください。