예: AWS Lambda 함수에 대한 AWS CodeCommit 트리거 생성 - AWS CodeCommit

AWS CodeCommit 는 더 이상 신규 고객이 사용할 수 없습니다. AWS CodeCommit 의 기존 고객은 정상적으로 서비스를 계속 이용할 수 있습니다. 자세히 알아보기

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

예: AWS Lambda 함수에 대한 AWS CodeCommit 트리거 생성

CodeCommit 리포지토리의 이벤트가 Lambda 함수를 호출하도록 리포지토리에 대한 트리거를 생성할 수 있습니다. 이 예제에서는 리포지토리를 Amazon CloudWatch 로그에 복제하는 데 URL 사용되는를 반환하는 Lambda 함수를 생성합니다.

Lambda 함수 생성

Lambda 콘솔을 사용하여 함수를 생성할 때 Lambda 함수에 대한 트리거를 CodeCommit 생성할 수도 있습니다. 다음 절차에는 샘플 Lambda 함수가 포함되어 있습니다. 샘플은 JavaScript Python이라는 두 가지 언어로 제공됩니다. 함수는 리포지토리를 CloudWatch 로그에 복제하는 데 URLs 사용되는를 반환합니다.

Lambda 청사진을 사용하여 Lambda 함수를 생성하려면
  1. 에 로그인 AWS Management Console 하고에서 AWS Lambda 콘솔을 엽니다https://console.aws.amazon.com/lambda/.

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

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

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

  5. 트리거 구성CodeCommit의 서비스 드롭다운 목록에서를 선택합니다.

    콘솔에서 리포지토리 생성

    • 리포지토리 이름에서, 리포지토리 이벤트에 반응하여 Lambda 함수를 사용하는 트리거를 구성하게 될 리포지토리의 이름을 선택합니다.

    • 트리거 이름에 트리거 이름(예: MyLambdaFunctionTrigger)을 입력합니다.

    • 이벤트에서 Lambda 함수를 트리거할 리포지토리 이벤트를 선택합니다. 모든 리포지토리 이벤트를 선택하면, 다른 이벤트는 선택할 수 없습니다. 이벤트의 하위 세트를 선택하려면 모든 리포지토리 이벤트를 취소한 후 목록에서 원하는 이벤트를 선택하면 됩니다. 예를 들어 사용자가 AWS CodeCommit 리포지토리에서 태그 또는 브랜치를 생성할 때만 트리거를 실행하려면 모든 리포지토리 이벤트를 제거한 다음 브랜치 또는 태그 생성을 선택합니다.

    • 해당 트리거가 리포지토리의 모든 브랜치에 적용되도록 하고 싶다면 브랜치에서 모든 브랜치를 선택하면 됩니다. 이를 원하지 않은 경우 특정 브랜치를 선택합니다. 리포지토리의 기본 브랜치는 기본적으로 추가됩니다. 이 기본 브랜치는 그대로 유지하거나 목록에서 삭제할 수 있습니다. 리포지토리 브랜치 목록에서 최대 10개의 브랜치 이름을 선택합니다.

    • (선택 사항) 사용자 지정 데이터에서 Lambda 함수에 포함하려는 정보(예: 개발자가 리포지토리에서 개발을 논의하는 데 사용하는 IRC 채널의 이름)를 입력합니다. 이 필드는 문자열입니다. 동적 파라미터를 전달하는 데 사용할 수 없습니다.

    추가를 선택합니다.

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

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