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

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

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

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

Lambda 関数を作成する

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

Lambda の設計図を使用して Lambda 関数を作成します。
  1. にサインイン AWS Management Console し、https://console.aws.amazon.com/lambda/ で AWS Lambda コンソールを開きます。

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

  3. [関数の作成] ページで、[一から作成] を選択します。関数名 で、関数の名前を指定します。例えば、 ですMyLambdaFunctionforCodeCommit。[ランタイム] で、関数の記述に使用する言語を選択し、[関数の作成] を選択します。

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

  5. トリガー設定 CodeCommitで、サービスのドロップダウンリストから選択します。

    コンソールからのリポジトリの作成

    • [リポジトリ名] で、リポジトリイベントに応答して Lambda 関数を使用するトリガーを設定するリポジトリの名前を選択します。

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

    • [Events (イベント)] で、Lambda 関数をトリガーするリポジトリイベントを選択します。[すべてのリポジトリイベント] を選択すると、他のイベントは選択できません。イベントのサブセットを選択する場合は、[すべてのリポジトリイベント] の選択を解除してから、使用するイベントをリストから選択します。例えば、ユーザーが AWS CodeCommit リポジトリにタグまたはブランチを作成した場合にのみトリガーを実行する場合は、すべてのリポジトリイベント を削除し、ブランチまたはタグの作成 を選択します。

    • リポジトリのすべてのブランチにトリガーを適用するには、[ブランチ] で、[すべてのブランチ] を選択します。それ以外の場合は、[特定のブランチ] を選択します。リポジトリのデフォルトブランチがデフォルトで追加されます。リストからこのブランチを保持または削除することができます。リポジトリブランチのリストから最大 10 のブランチ名を選択します。

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

    [Add] (追加) をクリックします。

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

  7. [コードエントリタイプ] で、[コードをインラインで編集] を選択した後、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
  8. [Permissions] (アクセス許可) タブの [Execution role] (実行ロール) で、ロールを選択して IAM コンソールで開きます。アタッチされたポリシーを編集して、トリガーを使用するリポジトリの GetRepository アクセス許可を追加します。

AWS CodeCommit リポジトリの Lambda 関数用のトリガーを表示する

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

Lambda 関数のトリガーを表示およびテストするには
  1. https://console.aws.amazon.com/codesuite/codecommit/home で CodeCommit コンソールを開きます。

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

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

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

  5. トリガーの機能をさらに検証するには、コミットを作成し、トリガーを設定したリポジトリにプッシュします。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