

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

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

Lambda 함수를 호출하는 트리거를 생성하는 가장 쉬운 방법은 Lambda 콘솔에서 해당 트리거를 생성하는 것입니다. 이 내장 통합 기능을 통해 CodeCommit은 함수를 실행하는 데 필요한 권한을 갖게 됩니다. 기존 Lambda 함수에 트리거를 추가하려면, Lambda 콘솔로 이동하여 해당 함수를 선택합니다. 해당 함수의 **트리거** 탭에서 **트리거 추가**의 단계를 따릅니다. 이 단계는 [Lambda 함수 생성](how-to-notify-lambda.md#how-to-notify-lambda-create-function)의 단계와 비슷합니다.

CodeCommit 리포지토리에 Lambda 함수를 위한 트리거를 생성할 수도 있습니다. 이렇게 하려면 간접 호출할 기존 Lambda 함수를 선택해야 합니다. 또한 CodeCommit에서 해당 함수를 실행하는 데 필요한 권한을 수동으로 구성해야 합니다.

**Topics**
+ [CodeCommit이 Lambda 함수를 실행할 수 있도록 권한을 수동으로 구성합니다.](#how-to-notify-lam-perm)
+ [CodeCommit 리포지토리에 Lambda 함수를 위한 트리거 생성 (콘솔)](#how-to-notify-lam-console)
+ [CodeCommit 리포지토리에 Lambda 함수를 위한 트리거 생성 (AWS CLI)](#how-to-notify-lam-cli)

## CodeCommit이 Lambda 함수를 실행할 수 있도록 권한을 수동으로 구성합니다.
<a name="how-to-notify-lam-perm"></a>

CodeCommit에서 Lambda 함수를 호출하는 트리거를 생성하는 경우에는 CodeCommit에서 해당 Lambda 함수를 실행하도록 허용하는 권한을 수동으로 구성해야 합니다. 이러한 수동 구성을 피하려면, Lambda 콘솔에서 함수에 대한 트리거를 생성하는 것이 좋습니다.<a name="how-to-notify-lambda-create-function-perm"></a>

**CodeCommit이 Lambda 함수를 실행할 수 있게 하려면**

1. 일반 텍스트 편집기를 열고 JSON 파일을 생성하되, 다음과 같이 Lambda 함수 이름, CodeCommit 리포지토리의 세부 정보, Lambda에 허용하려는 작업 등을 지정합니다.

   ```
   {
       "FunctionName": "MyCodeCommitFunction", 
       "StatementId": "1", 
       "Action": "lambda:InvokeFunction", 
       "Principal": "codecommit.amazonaws.com", 
       "SourceArn": "arn:aws:codecommit:us-east-1:111122223333:MyDemoRepo", 
       "SourceAccount": "111122223333"
   }
   ```

1. 파일은 기억하기 쉬운 이름을 가진 JSON 파일로 저장합니다(예: *AllowAccessfromMyDemoRepo*.json).

1. 터미널(Linux, macOS, Windows) 또는 명령줄에서 방금 생성한 JSON 파일로 **aws lambda add-permissions** 명령을 실행하여 Lambda 함수와 연결된 리소스 정책에 권한을 추가합니다.

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

   이 명령은 다음과 비슷하게 방금 추가한 정책 명령문의 JSON을 반환합니다.

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

   Lambda 함수의 리소스 정책에 대해 자세히 알아보려면 *AWS Lambda 사용 설명서*에서 [AddPermission](https://docs.aws.amazon.com/lambda/latest/dg/API_AddPermission.html) 및 [풀/푸시 이벤트 모델](https://docs.aws.amazon.com/lambda/latest/dg/intro-invocation-modes.html)을 참조하세요.

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

1. **대시보드** 탐색 창에서 **역할**을 선택하고, 역할 목록에서 *lambda\$1basic\$1execution*을 선택합니다.

1. 역할에 대한 요약 페이지에서 **권한** 탭을 선택하고, **인라인 정책**에서 **역할 정책 생성**을 선택합니다.

1. **권한 설정** 페이지에서 **정책 생성기**를 선택한 후 **선택**을 선택합니다.

1. **권한 편집** 페이지에서 다음을 수행합니다.
   + **효과**에서 **허용**을 선택합니다.
   + **AWS 서비스**에서 **AWS CodeCommit**을 선택합니다.
   + **작업**에서 **리포지토리**를 선택합니다.
   + **Amazon 리소스 이름(ARN)**에 리포지토리의 ARN을 입력합니다(예: `arn:aws:codecommit:us-east-1:111122223333:MyDemoRepo`).

   **설명문 추가**를 선택하고 **다음 단계**를 선택합니다.

1. **정책 검토** 페이지에서 **정책 적용**을 선택합니다.

   정책 명령문은 다음 예제와 비슷할 것입니다.

------
#### [ JSON ]

****  

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

------

## CodeCommit 리포지토리에 Lambda 함수를 위한 트리거 생성 (콘솔)
<a name="how-to-notify-lam-console"></a>

Lambda 함수를 생성한 후에는 CodeCommit에, 사용자가 지정한 리포지토리 이벤트에 응답해 함수를 실행하는 트리거를 생성할 수 있습니다.

**참고**  
예제에 대한 트리거를 성공적으로 테스트하거나 실행하려면, 먼저 CodeCommit이 함수를 간접 호출하고 Lambda 함수가 리포지토리에 대한 정보를 가져오도록 허용하는 정책을 구성해야 합니다. 자세한 내용은 [CodeCommit이 Lambda 함수를 실행할 수 있게 하려면](#how-to-notify-lambda-create-function-perm) 단원을 참조하십시오.

**Lambda 함수를 위한 트리거 생성**

1. [https://console.aws.amazon.com/codesuite/codecommit/home](https://console.aws.amazon.com/codesuite/codecommit/home)에서 CodeCommit 콘솔을 엽니다.

1. **리포지토리**에서, 리포지토리 이벤트 트리거를 생성하려는 리포지토리를 선택합니다.

1. 리포지토리의 탐색 창에서 **설정**을 선택한 후 **트리거**를 선택합니다.

1. **트리거 생성**을 선택합니다.

1. **트리거 생성**에서 다음과 같이 합니다.

    
   + **트리거 이름**에 해당 트리거의 이름을 입력합니다(예: *MyLambdaFunctionTrigger*).
   + **이벤트**에서 Lambda 함수를 트리거할 리포지토리 이벤트를 선택합니다.

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

1. (선택 사항) **트리거 테스트**를 선택합니다. 이 옵션을 선택하면 해당 리포지토리의 가장 최근 커밋 ID를 포함해 리포지토리에 대한 샘플 데이터로 함수 간접 호출을 시도합니다. (커밋 이력이 없으면 그 대신 0으로 이루어진 샘플 값이 생성됩니다.) 이를 통해 CodeCommit과 Lambda 함수 간의 액세스가 올바르게 구성되었는지 확인할 수 있습니다.

1. **트리거 생성**을 선택하여 트리거 생성하기를 완료합니다.

1. 트리거의 기능을 확인하려면 커밋을 만들어 트리거를 구성한 리포지토리에 푸시합니다. Lambda 콘솔의 해당 함수에 대한 **모니터링** 탭에 Lambda 함수의 응답이 표시되어야 합니다.

## CodeCommit 리포지토리에 Lambda 함수를 위한 트리거 생성 (AWS CLI)
<a name="how-to-notify-lam-cli"></a>

사용자는 명령줄을 사용하여, CodeCommit 리포지토리의 이벤트(예: 리포지토리에 커밋을 푸시하는 경우)에 응답해 Lambda 함수를 위한 트리거를 생성할 수도 있습니다.

**Lambda 함수를 위한 트리거 생성**

1. 일반 텍스트 편집기를 열고 다음을 지정하는 JSON 파일을 생성합니다.
   + Lambda 함수의 이름입니다.
   + 이 트리거로 모니터링하려는 리포지토리와 브랜치. (브랜치를 지정하지 않는 경우 트리거가 리포지토리의 모든 브랜치에 적용됩니다.)
   + 이 트리거를 활성화하는 이벤트.

    파일을 저장합니다.

   예를 들어, *MyDemoRepo*라는 리포지토리의 *main*과 *preprod*라는 두 브랜치에서 발생하는 모든 리포지토리 이벤트를 *MyCodeCommitFunction*이라는 Lambda 함수에 게시하는 트리거를 생성하려면 다음과 같이 합니다.

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

   JSON에는 리포지토리의 각 트리거에 대한 트리거 블록이 있어야 합니다. 리포지토리에 대한 트리거를 두 개 이상 만들려면 JSON에 추가 블록을 포함합니다. 이 파일에 만든 모든 트리거는 지정된 리포지토리를 위한 것임을 기억하세요. 단일 JSON 파일에는 다수의 리포지토리에 대한 트리거를 생성할 수 없습니다. 예를 들어, 리포지토리에 대한 트리거를 두 개 생성하려는 경우 두 개의 트리거 블록이 있는 JSON 파일을 만들 수 있습니다. 다음 예제에서는 두 번째 트리거 블록에 지정된 브랜치가 없으므로, 해당 트리거는 모든 브랜치에 적용됩니다.

    

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

   커밋이 리포지토리에 푸시되는 경우와 같이 지정한 이벤트에 대해 트리거를 만들 수 있습니다. 이벤트 유형에는 다음이 포함됩니다.
   + `all` - 지정된 리포지토리 및 브랜치의 모든 이벤트.
   + `updateReference` - 커밋이 지정된 리포지토리 및 브랜치로 푸시되는 경우.
   + `createReference` - 새 브랜치 또는 태그가 지정된 리포지토리에 생성되는 경우.
   + `deleteReference` - 브랜치 또는 태그가 지정된 리포지토리에서 삭제되는 경우.
**참고**  
트리거에는 이벤트 유형을 두 개 이상 사용할 수 있습니다. 하지만 `all`을 지정하면 다른 이벤트를 지정할 수 없습니다.

   유효한 이벤트 유형의 전체 목록을 보려면 터미널 또는 명령 프롬프트에서 **aws codecommit put-repository-triggers help**를 입력합니다.

   또한 `customData`에 문자열을 포함할 수 있습니다(예: 개발자가 이 리포지토리에서의 개발을 논의할 때 사용하는 IRC 채널 이름). 이 필드는 문자열입니다. 동적 파라미터를 전달하는 데 사용할 수 없습니다. 이 문자열은 트리거에 대한 응답으로 반환되는 CodeCommit JSON에 속성으로 추가됩니다.

1. (선택 사항) 터미널 또는 명령 프롬프트에서 **test-repository-triggers** 명령을 실행합니다. 예를 들어, 다음은 *trigger.json*이라는 JSON 파일이 유효하고 CodeCommit이 Lambda 함수를 트리거할 수 있는지 테스트하는 데 사용됩니다. 이 테스트에서는 실제 데이터가 없는 경우 샘플 데이터를 사용하여 함수를 트리거합니다.

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

   이 명령이 제대로 실행되면 다음과 비슷한 정보를 반환합니다.

   ```
   {
       "successfulExecutions": [
           "MyLambdaFunctionTrigger"
       ],
       "failedExecutions": []
   }
   ```

1. 터미널 또는 명령 프롬프트에서 **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"
   }
   ```

1. 트리거의 구성을 보려면, 리포지토리 이름을 지정하여 **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:111122223333:MyCodeCommitFunction",
               "branches": [
                   "main",
                   "preprod"
               ],
               "name": "MyLambdaFunctionTrigger",
               "customData": "Project ID 12345"
           }
       ]
   }
   ```

1. 트리거의 기능을 확인하려면 커밋을 만들어 트리거를 구성한 리포지토리에 푸시합니다. Lambda 콘솔의 해당 함수에 대한 **모니터링** 탭에 Lambda 함수의 응답이 표시되어야 합니다.