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

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

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

Lambda 関数を作成する

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

Lambda の設計図を使用して Lambda 関数を作成するには

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

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

  3. [設計図の選択] ページで、[Blank function (空白の関数)] を選択します。

  4. [トリガーの設定] ページで、サービスのドロップダウンリストから AWS CodeCommit を選択します。

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

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

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

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

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

    [次へ] を選択します。

  5. [Configure function (関数の設定)] ページの [Name (名前)] に、関数の名前 (例: MyCodeCommitFunction) を入力します。[説明] に関数のオプションの説明を入力します。サンプル JavaScript 関数を作成する場合は、[ランタイム] で [Node.js] を選択します。サンプル Python 関数を作成しない場合は、[Python 2.7] を選択します。

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

    Node.js の場合:

    var aws = require('aws-sdk'); var codecommit = new aws.CodeCommit({ apiVersion: '2015-04-13' }); exports.handler = function(event, context) { //Log the updated references from the event var references = event.Records[0].codecommit.references.map(function(reference) {return reference.ref;}); console.log('References:', references); //Get the repository from the event and show its git clone URL var repository = event.Records[0].eventSourceARN.split(":")[5]; var params = { repositoryName: repository }; codecommit.getRepository(params, function(err, data) { if (err) { console.log(err); var message = "Error getting repository metadata for repository " + repository; console.log(message); context.fail(message); } else { console.log('Clone URL:', data.repositoryMetadata.cloneUrlHttp); context.succeed(data.repositoryMetadata.cloneUrlHttp); } }); };

    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
  7. [Lambda 関数ハンドラおよびロール] で次の操作を行います。

    • [Handler] で、関数 (Node.js サンプルの場合は index.handler、Python サンプルの場合は lambda_function.lambda_handler) から派生したデフォルト値のままにします。

    • [Role (ロール)] で、[カスタムロールの作成] を選択します。IAM コンソールで、次の操作を行います。

      • [IAM Role] で、[lambda_basic_execution] を選択します。

      • [Policy Name] で、[Create a new role policy] を選択します。

      • [許可] を選択してロールを作成し、Lambda コンソールに戻ります。lambda_basic_execution の値が [ロール] に表示されています。

        注記

        別のロールを選択したか、ロールに別の名前を選択した場合は、このトピックの手順ではそのロールの名前を必ず使用してください。

    [次へ] を選択します。

  8. [確認] ページで、関数の設定を確認し、[関数の作成] を選択します。

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/master' ] 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