

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 예: AWS Lambda 함수에 대한 AWS CodeCommit 트리거 생성
<a name="how-to-notify-lambda"></a>

CodeCommit 리포지토리에 적용되는 트리거를 생성하여 리포지토리의 해당 이벤트가 Lambda 함수를 간접 호출하게 할 수 있습니다 이 예제에서는 해당 리포지토리를 Amazon CloudWatch 로그로 복제하는 데 사용할 URL을 반환하는 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 두 언어 버전으로 제공됩니다. 이 함수는 리포지토리를 CloudWatch 로그로 복제하는 데 사용할 URL을 반환합니다.

**Lambda 청사진을 사용하여 Lambda 함수를 생성하려면**

1. 에 로그인 AWS Management Console 하고 [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/) AWS Lambda 콘솔을 엽니다.

1. **Lambda 함수** 페이지에서 **함수 생성**을 선택합니다. (이전에 Lambda를 사용해본 적이 없다면 **지금 시작**을 선택합니다.)

1. **함수 생성** 페이지에서 **처음부터 새로 작성**을 선택합니다. **함수 이름**에 함수 이름을 입력합니다(예: *MyLambdaFunctionforCodeCommit*). **런타임**에서 함수를 작성하는 데 사용할 언어를 선택한 다음 **함수 생성**을 선택합니다.

1. **구성** 탭에서 **트리거 추가**를 선택합니다.

1.  **트리거 구성**의 서비스 드롭다운 목록에서 **CodeCommit**을 선택합니다.  
![\[콘솔에서 리포지토리 생성\]](http://docs.aws.amazon.com/ko_kr/codecommit/latest/userguide/images/codecommit-lambda-trigger.png)

    
   + **리포지토리 이름**에서, 리포지토리 이벤트에 반응하여 Lambda 함수를 사용하는 트리거를 구성하게 될 리포지토리의 이름을 선택합니다.
   + **트리거 이름**에 해당 트리거의 이름을 입력합니다(예: *MyLambdaFunctionTrigger*).
   + **이벤트**에서 Lambda 함수를 트리거할 리포지토리 이벤트를 선택합니다. **모든 리포지토리 이벤트**를 선택하면, 다른 이벤트는 선택할 수 없습니다. 이벤트의 하위 세트를 선택하려면 **모든 리포지토리 이벤트**를 취소한 후 목록에서 원하는 이벤트를 선택하면 됩니다. 예를 들어 사용자가 리포지 AWS CodeCommit 토리에서 태그 또는 브랜치를 생성할 때만 트리거를 실행하려면 **모든 리포지토리 이벤트를** 제거한 다음 브**랜치 또는 태그 생성을** 선택합니다.
   + 해당 트리거가 리포지토리의 모든 브랜치에 적용되도록 하고 싶다면 **브랜치**에서 **모든 브랜치**를 선택하면 됩니다. 이를 원하지 않은 경우 **특정 브랜치**를 선택합니다. 리포지토리의 기본 브랜치는 기본적으로 추가됩니다. 이 기본 브랜치는 그대로 유지하거나 목록에서 삭제할 수 있습니다. 리포지토리 브랜치 목록에서 최대 10개의 브랜치 이름을 선택합니다.
   + (선택 사항) **사용자 지정 데이터**에서 Lambda 함수에 포함하려는 정보를 입력합니다(예: 리포지토리에서의 개발을 논의하기 위해 개발자들이 사용하는 IRC 채널의 이름). 이 필드는 문자열입니다. 동적 파라미터를 전달하는 데 사용할 수 없습니다.

   **추가**를 선택합니다.

1. **구성** 페이지의 **함수 코드**에 있는 코드 입력 유형에서 코드 인라인 편집을 선택합니다. **런타임**에서 **Node.js**를 선택합니다. 샘플 Python 함수를 생성하려면 **Python**을 선택합니다.

1. **코드 항목 유형**에서 **코드 인라인 편집**을 선택한 후 hello world 코드를 다음 두 샘플 중 하나로 교체합니다.

   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. **권한** 탭의 **실행 역할**에서, 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 콘솔에서 생성한 트리거가 보일 것입니다. 목록에서 트리거를 선택한 후 **트리거 테스트**를 선택합니다. 이 옵션을 선택하면 해당 리포지토리의 가장 최근 커밋 ID를 포함해 리포지토리에 대한 샘플 데이터로 함수 간접 호출을 시도합니다. (커밋 이력이 없으면 그 대신 0으로 이루어진 샘플 값이 생성됩니다.) 이렇게 하면 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
   ```