AWS CodeCommit
ユーザーガイド (API バージョン 2015-04-13)

例: 既存の AWS Lambda 関数のトリガーを AWS CodeCommit に作成する

Lambda 関数を呼び出すトリガーを作成する最も簡単な方法は、Lambda コンソールでトリガーを作成することです。この組み込みの統合を使用すると、この関数を実行するために必要なアクセス許可を CodeCommit に付与することができます。既存の Lambda 関数のトリガーを追加するには、Lambda コンソールに移動し、この関数を選択します。関数の [トリガー] タブで、[Add trigger (トリガーの追加)] のステップに従います。これらのステップは、「Lambda 関数を作成する」に示されている手順と似ています。

また、Lambda 関数のトリガーを CodeCommit リポジトリに作成することもできます。そのためには、既存の Lambda 関数を選択して呼び出す必要があります。また、関数を実行するために CodeCommit に必要なアクセス許可を手動設定する必要があります。

CodeCommit で Lambda 関数を実行することを許可するアクセス許可を手動で設定する

CodeCommit に Lambda 関数を呼び出すトリガーを作成する場合は、CodeCommit で Lambda 関数を実行できるようにするアクセス許可を手動で設定する必要があります。この手動設定を避けるには、代わりに Lambda コンソールで関数のトリガーを作成することを検討してください。

CodeCommit で Lambda 関数を実行できるようにするには

  1. プレーンテキストエディタを開いて、Lambda 関数名、CodeCommit リポジトリの詳細、Lambda で実行するアクションを指定した JSON ファイルを作成します。次のようになります。

    { "FunctionName": "MyCodeCommitFunction", "StatementId": "1", "Action": "lambda:InvokeFunction", "Principal": "codecommit.amazonaws.com", "SourceArn": "arn:aws:codecommit:us-east-1:80398EXAMPLE:MyDemoRepo", "SourceAccount": "80398EXAMPLE" }
  2. 覚えやすい名前 (例: AllowAccessfromMyDemoRepo.json) を付けて、JSON ファイルを保存します。

  3. 前の手順で作成した JSON ファイルを使用して、ターミナル (Linux, macOS, or Unix) またはコマンドライン (Windows) で、aws lambda add-permissions コマンドを実行して、Lambda 関数に関連付けられたリソースポリシーに対するアクセス許可を追加します。

    aws lambda add-permission - -cli-input-json file://AllowAccessfromMyDemoRepo.json

    このコマンドでは、先ほど追加したポリシーステートメントの JSON が返ります。次のようになります。

    { "Statement": "{\"Condition\":{\"StringEquals\":{\"AWS:SourceAccount\":\"80398EXAMPLE\"},\"ArnLike\":{\"AWS:SourceArn\":\"arn:aws:codecommit:us-east-1:80398EXAMPLE:MyDemoRepo\"}},\"Action\":[\"lambda:InvokeFunction\"],\"Resource\":\"arn:aws:lambda:us-east-1:80398EXAMPLE:function:MyCodeCommitFunction\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"codecommit.amazonaws.com\"},\"Sid\":\"1\"}" }

    Lambda 関数のリソースポリシーの詳細については、『AWS Lambda ユーザーガイド』の「AddPermission」および「プル/プッシュイベントモデル」を参照してください。

  4. AWS マネジメントコンソール にサインインし、IAM コンソール(https://console.aws.amazon.com/iam/)を開きます。

  5. [ダッシュボード] ナビゲーションペインで、[ロール] を選択し、ロールのリストで、[lambda_basic_execution] を選択します。

  6. ロールの [Summary] ページで、[Permissions (アクセス許可)] タブを選択し、[Inline Policies (インラインポリシー)] セクションで、[Create Role Policy (ロールポリシーの作成)] を選択します。

  7. [Set Permissions (アクセス許可の設定)] ページで、[Custom Generator (カスタムジェネレーター)] を選択し、次に [選択] をクリックします。

  8. [Edit Permissions] ページで、以下を実行します。

    • [Effect] で、[Allow] を選択します。

    • [AWS のサービス] で、[AWS CodeCommit] を選択します。

    • [アクション] で、GetRepository を選択します。

    • [Amazon リソースネーム (ARN)] に、リポジトリの ARN (例: arn:aws:codecommit:us-east-1:80398EXAMPLE:MyDemoRepo) を入力します。

    [Add Statement]、[Next Step] の順に選択します。

  9. [Review Policy] ページで、[Apply Policy] を選択します。

    ポリシーステートメントは、次の例のようになります。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt11111111", "Effect": "Allow", "Action": [ "codecommit:GetRepository" ], "Resource": [ "arn:aws:codecommit:us-east-1:80398EXAMPLE:MyDemoRepo" ] } ] }

Lambda 関数のトリガーを CodeCommit リポジトリに作成する (コンソール)

Lambda 関数を作成したら、指定したリポジトリのイベントに対してこの関数を実行できるようにするトリガーを CodeCommit に作成することができます。

注記

トリガーをテストまたは実行する前に、CodeCommit で Lambda 関数を呼び出して、この関数でリポジトリに関する情報を取得できるようにするポリシーを設定する必要があります。詳細については、「CodeCommit で Lambda 関数を実行できるようにするには」を参照してください。

Lambda 関数のトリガーを作成するには

  1. https://console.aws.amazon.com/codesuite/codecommit/home にある CodeCommit コンソールを開きます。

  2. リポジトリで、リポジトリイベントのトリガーを作成するリポジトリを選択します。

  3. リポジトリのナビゲーションペインで、[設定] を選択し、[トリガー] を選択します。

  4. [Create trigger (トリガーの作成)] を選択します。

  5. [Create trigger (トリガーの作成)] で、以下の操作を行います。

    • [Trigger name (トリガー名)] に、トリガーの名前 (例: MyLambdaFunctionTrigger) を入力します。

    • [Events (イベント)] で、Lambda 関数をトリガーするリポジトリイベントを選択します。

      [すべてのリポジトリイベント] を選択すると、他のイベントは選択できません。イベントのサブセットを選択する場合は、[すべてのリポジトリイベント] の選択を解除してから、使用するイベントをリストから選択します。たとえば、ユーザーが CodeCommit リポジトリにタグまたはブランチを作成する場合にのみトリガーが実行されるようにするには、[All repository events (すべてのリポジトリイベント)] の選択を解除し、[Create branch or tag (ブランチまたはタグを作成する)] を選択します。

    • トリガーをリポジトリのすべてのブランチに適用する場合は、[ブランチ] で選択を空白のままにします。このデフォルトのオプションでは、トリガーがすべてのブランチに自動的に適用されます。このトリガーを特定のブランチにのみ適用する場合は、リポジトリブランチのリストから最大 10 個のブランチ名を選択します。

    • [Choose the service to use (使用するサービスを選択する)] で、[AWS Lambda] を選択します。

    • [Lambda 関数] で、リストから関数名を選択するか、関数の ARN を入力します。

    • (オプション) [Custom data (カスタムデータ)] に、Lambda 関数に含める情報 (例: 開発者がリポジトリでの開発に関するやり取りに使用する IRC チャネルの名前) を入力します。このフィールドは文字列です。これは動的パラメータを渡すために使用することはできません。

  6. (オプション) [トリガーのテスト] を選択します。このオプションでは、リポジトリの最新コミット ID など、リポジトリに関するサンプルデータを使用して、関数を呼び出します。(コミット履歴が存在しない場合は、ゼロで構成されるサンプル値が生成されます。) これにより、CodeCommit と Lambda 関数の間のアクセスが正しく設定されていることを確認しやすくなります。

  7. [Create trigger (トリガーを作成する)] を選択して、トリガーの作成を完了します。

  8. トリガーの機能を検証するには、コミットを作成し、トリガーを設定したリポジトリに対してプッシュします。その関数の [モニタリング] タブの Lambda 関数からの応答が Lambda コンソールに表示されます。

CodeCommit リポジトリで使用する Lambda 関数のトリガーを作成する (AWS CLI)

コマンドラインを使用して、CodeCommit リポジトリイベントに応答する Lambda 関数のトリガーを作成することもできます (リポジトリにコミットをプッシュする場合など)。

Lambda 関数のトリガーを作成するには

  1. プレーンテキストエディタを開き、次を指定する JSON ファイルを作成します。

    • Lambda 関数名。

    • このトリガーで監視するリポジトリとブランチ。(ブランチを指定しない場合、トリガーはリポジトリのすべてのブランチに適用されます。)

    • このトリガーをアクティブ化するイベントです。

    ファイルを保存します。

    たとえば、リポジトリ (MyDemoRepo) のトリガーを作成して、2 つのブランチ (master および preprod) の Lambda 関数 (MyCodeCommitFunction) にすべてのリポジトリイベントをパブリッシュするには、次のように行います。

    { "repositoryName": "MyDemoRepo", "triggers": [ { "name": "MyLambdaFunctionTrigger", "destinationArn": "arn:aws:lambda:us-east-1:80398EXAMPLE:function:MyCodeCommitFunction", "customData": "", "branches": [ "master", "preprod" ], "events": [ "all" ] } ] }

    リポジトリのトリガーごとに、JSON にトリガーブロックが必要です。リポジトリのトリガーを複数作成するには、JSON にブロックを追加します。このファイルに作成されたすべてのトリガーは指定されたリポジトリであることに注意してください。1 つの JSON ファイルに複数のリポジトリのトリガーを作成することはできません。たとえば、リポジトリに対して 2 つのトリガーを作成する場合は、2 つのトリガーブロックを持つ JSON ファイルを作成できます。次の例では、2 番目のトリガーブロックに指定されているブランチはないため、トリガーはすべてのブランチに適用されます。

    { "repositoryName": "MyDemoRepo", "triggers": [ { "name": "MyLambdaFunctionTrigger", "destinationArn": "arn:aws:lambda:us-east-1:80398EXAMPLE:function:MyCodeCommitFunction", "customData": "", "branches": [ "master", "preprod" ], "events": [ "all" ] }, { "name": "MyOtherLambdaFunctionTrigger", "destinationArn": "arn:aws:lambda:us-east-1:80398EXAMPLE:function:MyOtherCodeCommitFunction", "customData": "", "branches": [], "events": [ "updateReference", "deleteReference" ] } ] }

    たとえば、コミットがリポジトリにプッシュされたときは、指定したイベントのトリガーを作成できます。イベントタイプは次のとおりです。

    • all: 指定されたリポジトリとブランチのすべてのイベント。

    • updateReference : 指定されたリポジトリやブランチにコミットをプッシュされた場合。

    • createReference: 指定されたリポジトリに新しいブランチまたはタグが作成された場合。

    • deleteReference: 指定されたリポジトリ内のブランチまたはタグが削除された場合。

    注記

    トリガー内で複数のイベントタイプを使用できます。ただし、all を指定すると、他のイベントを指定することはできません。

    有効なイベントタイプのリストを一覧表示するには、ターミナルまたはコマンドプロンプトで、「aws codecommit put-repository-triggers help」と入力します。

    また、customData に文字列を含めることもできます (たとえば、開発者がこのリポジトリで開発について検討するときに使用する IRC チャネル名)。このフィールドは文字列です。これは動的パラメータを渡すために使用することはできません。この文字列は、トリガーに応答して戻される CodeCommit JSON に属性として追加されます。

  2. (オプション) ターミナルまたはコマンドラインプロンプトで、test-repository-triggers コマンドを実行することもできます。たとえば、以下は、JSON ファイル (trigger.json) が有効であること、CodeCommit で Lambda 関数をトリガーできることを検証するために使用されます。利用できる実際のデータがない場合、このテストでは、サンプルデータを使用して関数をトリガーします。

    aws codecommit test-repository-triggers --cli-input-json file://trigger.json

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

    { "successfulExecutions": [ "MyLambdaFunctionTrigger" ], "failedExecutions": [] }
  3. ターミナルまたはコマンドプロンプトで、put-repository-triggers コマンドを実行して CodeCommit にトリガーを作成します。たとえば、trigger.json という JSON ファイルを使用してトリガーを作成するには、次のようにします。

    aws codecommit put-repository-triggers - -cli-input-json file://trigger.json

    このコマンドでは、以下のような設定 ID が返されます。

    { "configurationId": "0123456-I-AM-AN-EXAMPLE" }
  4. トリガーの設定を表示するには、get-repository-triggers コマンドを実行して、リポジトリの名前を指定します。

    aws codecommit get-repository-triggers - -repository-name MyDemoRepo

    このコマンドは、リポジトリ用に構成されたすべてのトリガーの構造を、次のように戻します。

    { "configurationId": "0123456-I-AM-AN-EXAMPLE", "triggers": [ { "events": [ "all" ], "destinationArn": "arn:aws:lambda:us-east-1:80398EXAMPLE:MyCodeCommitFunction", "branches": [ "master", "preprod" ], "name": "MyLambdaFunctionTrigger", "customData": "Project ID 12345" } ] }
  5. トリガーの機能を確認するには、コミットを作成し、トリガーを設定したリポジトリに対してプッシュします。その関数の [モニタリング] タブの Lambda 関数からの応答が Lambda コンソールに表示されます。