

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

# 例: AWS Lambda 関数の AWS CodeCommit トリガーを作成する
<a name="how-to-notify-lambda"></a>

CodeCommit リポジトリのトリガーを作成して、リポジトリのイベントから Lambda 関数を呼び出すことができます。この例では、リポジトリのクローンを作成するために使用する URL を Amazon CloudWatch Logs に返す Lambda 関数を作成します。

**Topics**
+ [Lambda 関数を作成する](#how-to-notify-lambda-create-function)
+ [AWS CodeCommit リポジトリで Lambda 関数のトリガーを表示する](#how-to-notify-lam-view)

## Lambda 関数を作成する
<a name="how-to-notify-lambda-create-function"></a>

Lambda コンソールを使用してこの関数を作成する場合は、Lambda 関数の CodeCommit トリガーを作成することもできます。以下の手順には、サンプル Lambda 関数が含まれます。このサンプルは、JavaScript と Python の 2 つの言語で使用できます。この関数は、リポジトリのクローンを CloudWatch Logs に作成するために使用する URL を返します。

**Lambda の設計図を使用して Lambda 関数を作成します。**

1. にサインイン AWS マネジメントコンソール し、[https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/) で AWS Lambda コンソールを開きます。

1. **[Lambda Functions]** (Lambda 関数) ページで、**[Create function]** (関数の作成) を選択します。(これまでに Lambda を使用したことがない場合は、[**今すぐ始める**] を選択します。)

1. **[関数の作成]** ページで、**[一から作成]** を選択します。[**関数名**] に、関数の名前 (*MyLambdaFunctionforCodeCommit* など) を入力します。[**ランタイム**] で、関数の記述に使用する言語を選択し、[**関数の作成**] を選択します。

1. [**設定**] タブで、[**トリガーの追加**] を選択します。

1.  [**トリガー設定**] で、サービスのドロップダウンリストから [**CodeCommit**] を選択します。  
![\[コンソールからのリポジトリの作成\]](http://docs.aws.amazon.com/ja_jp/codecommit/latest/userguide/images/codecommit-lambda-trigger.png)

    
   + [**リポジトリ名**] で、リポジトリイベントに応答して Lambda 関数を使用するトリガーを設定するリポジトリの名前を選択します。
   + [**Trigger name (トリガー名)**] に、トリガーの名前 (例: *MyLambdaFunctionTrigger*) を入力します。
   + [**Events (イベント)**] で、Lambda 関数をトリガーするリポジトリイベントを選択します。[**すべてのリポジトリイベント**] を選択すると、他のイベントは選択できません。イベントのサブセットを選択する場合は、[**すべてのリポジトリイベント**] の選択を解除してから、使用するイベントをリストから選択します。たとえば、ユーザーが AWS CodeCommit リポジトリにタグまたはブランチを作成したときにのみトリガーを実行する場合は、**すべてのリポジトリイベント**を削除し、**ブランチまたはタグの作成**を選択します。
   + リポジトリのすべてのブランチにトリガーを適用するには、[**ブランチ**] で、[**すべてのブランチ**] を選択します。それ以外の場合は、[**特定のブランチ**] を選択します。リポジトリのデフォルトブランチがデフォルトで追加されます。リストからこのブランチを保持または削除することができます。リポジトリブランチのリストから最大 10 のブランチ名を選択します。
   + (オプション) [**Custom data (カスタムデータ)**] に、Lambda 関数に含める情報 (例: 開発者がリポジトリでの開発に関するやり取りに使用する IRC チャネルの名前) を入力します。このフィールドは文字列です。これは動的パラメータを渡すために使用することはできません。

   **[Add]** (追加) を選択します。

1. [**設定**] ページの [**関数コード**] で、コードエントリタイプとして [コードをインラインで編集] を選択します。[**ランタイム**] で、[**Node.js**] を選択します。サンプルの Python 関数を作成する場合は、[**Python**] を選択します。

1. [**コードエントリタイプ**] で、[**コードをインラインで編集**] を選択した後、hello world コードを以下の 2 つのサンプルのいずれかに置き換えます。

   Node.js の場合:

   ```
   import {
     CodeCommitClient,
     GetRepositoryCommand,
   } from "@aws-sdk/client-codecommit";
   
   const codecommit = new CodeCommitClient({ region: "your-region" });
   
   /**
    * @param {{ Records: { codecommit: { references: { ref: string }[] }, eventSourceARN: string  }[]} event
    */
   export const handler = async (event) => {
     // Log the updated references from the event
     const references = event.Records[0].codecommit.references.map(
       (reference) => reference.ref,
     );
     console.log("References:", references);
   
     // Get the repository from the event and show its git clone URL
     const repository = event.Records[0].eventSourceARN.split(":")[5];
     const params = {
       repositoryName: repository,
     };
   
     try {
       const data = await codecommit.send(new GetRepositoryCommand(params));
       console.log("Clone URL:", data.repositoryMetadata.cloneUrlHttp);
       return data.repositoryMetadata.cloneUrlHttp;
     } catch (error) {
       console.error("Error:", error);
       throw new Error(
         `Error getting repository metadata for repository ${repository}`,
       );
     }
   };
   ```

   Python の場合:

   ```
   import json
   import boto3
   
   codecommit = boto3.client("codecommit")
   
   
   def lambda_handler(event, context):
       # Log the updated references from the event
       references = {
           reference["ref"]
           for reference in event["Records"][0]["codecommit"]["references"]
       }
       print("References: " + str(references))
   
       # Get the repository from the event and show its git clone URL
       repository = event["Records"][0]["eventSourceARN"].split(":")[5]
       try:
           response = codecommit.get_repository(repositoryName=repository)
           print("Clone URL: " + response["repositoryMetadata"]["cloneUrlHttp"])
           return response["repositoryMetadata"]["cloneUrlHttp"]
       except Exception as e:
           print(e)
           print(
               "Error getting repository {}. Make sure it exists and that your repository is in the same region as this function.".format(
                   repository
               )
           )
           raise e
   ```

1. **[Permissions]** (アクセス許可) タブの **[Execution role]** (実行ロール) で、ロールを選択して IAM コンソールで開きます。アタッチされたポリシーを編集して、トリガーを使用するリポジトリの `GetRepository` アクセス許可を追加します。

## AWS CodeCommit リポジトリで Lambda 関数のトリガーを表示する
<a name="how-to-notify-lam-view"></a>

Lambda 関数を作成したら、 AWS CodeCommitでトリガーを表示してテストできます。トリガーをテストすると、指定したリポジトリイベントに応答して関数が実行されます。

**Lambda 関数のトリガーを表示およびテストするには**

1. [https://console.aws.amazon.com/codesuite/codecommit/home](https://console.aws.amazon.com/codesuite/codecommit/home) で CodeCommit コンソールを開きます。

1. [**リポジトリ**] で、トリガーを表示するリポジトリを選択します。

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

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

1. トリガーの機能をさらに検証するには、コミットを作成し、トリガーを設定したリポジトリにプッシュします。Lambda コンソールで、Lambda 関数からの応答がその関数の [**モニタリング**] タブに表示されます。[**モニタリング**] タブから、[**CloudWatch のログを表示**] を選択します。CloudWatch コンソールが新しいタブで開き、関数のイベントが表示されます。リストから、コミットをプッシュした時間に対応するログストリームを選択します。以下のようなイベントデータが表示されます。

   ```
   START RequestId: 70afdc9a-EXAMPLE Version: $LATEST
   2015-11-10T18:18:28.689Z	70afdc9a-EXAMPLE	References: [ 'refs/heads/main' ]
   2015-11-10T18:18:29.814Z	70afdc9a-EXAMPLE	Clone URL: https://git-codecommit.us-east-2.amazonaws.com/v1/repos/MyDemoRepo
   END RequestId: 70afdc9a-EXAMPLE
   REPORT RequestId: 70afdc9a-EXAMPLE Duration: 1126.87 ms Billed Duration: 1200 ms Memory Size: 128 MB Max Memory Used: 14 MB
   ```