AWS::Lambda::Function 리소스의 쓰기 전용 속성 문제를 해결하는 방법 - AWS CloudFormation

AWS::Lambda::Function 리소스의 쓰기 전용 속성 문제를 해결하는 방법

이 주제에서는 IaC 생성기를 사용할 때 AWS::Lambda::Function 리소스의 쓰기 전용 속성 문제를 해결하는 방법을 설명합니다.

문제

AWS::Lambda::Function 리소스에는 Lambda 코드를 지정하기 위한 상호 배타적인 속성 세트가 3개 있습니다.

  • Code/S3BucketCode/S3Key 속성과 선택적으로 Code/S3ObjectVersion 속성 중 하나만 있을 수 있습니다.

  • Code/ImageUri 속성

  • Code/ZipFile 속성

지정된 AWS::Lambda::Function 리소스에는 이러한 세트 중 하나만 사용할 수 있습니다.

IaC 생성기는 리소스를 생성하거나 업데이트하는 데 사용된 독점적인 쓰기 전용 속성 세트를 확인할 수 없습니다. 결과적으로 생성된 템플릿에 첫 번째 속성 세트만 포함합니다. Code/ImageUriCode/ZipFile 속성은 생략됩니다.

또한 IaC 생성기는 다음과 같은 경고를 표시합니다.

  • MUTUALLY_EXCLUSIVE_PROPERTIES - Code/S3BucketCode/S3Key가 상호 배타적 속성으로 식별된다고 경고합니다.

  • UNSUPPORTED_PROPERTIES - Code/S3ObjectVersion 속성이 지원되지 않는다고 경고합니다.

생성된 템플릿에 AWS::Lambda::Function 리소스를 포함하려면 템플릿을 다운로드하고 올바른 코드 속성으로 업데이트해야 합니다.

해결 방법

Amazon S3 버킷에 Lambda 코드를 저장하고 S3ObjectVersion 속성을 사용하지 않는 경우에는 생성된 템플릿을 수정하지 않고 가져올 수 있습니다. IaC 생성기는 가져오기 작업 중에 템플릿 파라미터로 Amazon S3 버킷과 키를 요청합니다.

Lambda 코드를 Amazon ECR 리포지토리로 저장하는 경우에는 다음 지침에 따라 템플릿을 업데이트할 수 있습니다.
  1. 생성된 템플릿을 다운로드합니다.

  2. 생성된 템플릿에서 Code/S3BucketCode/S3Key 속성에 대한 속성 및 해당 파라미터를 제거합니다.

  3. 생성된 템플릿에서 제거된 속성을 Code/ImageUri 속성으로 바꾸고 Amazon ECR 리포지토리의 URL을 지정합니다.

  4. IaC 생성기 콘솔에서 생성된 템플릿을 열고 편집한 템플릿 가져오기 버튼을 선택합니다.

Lambda 코드를 zip 파일로 저장하는 경우에는 다음 지침에 따라 템플릿을 업데이트할 수 있습니다.
  1. 생성된 템플릿을 다운로드합니다.

  2. 생성된 템플릿에서 Code/S3BucketCode/S3Key 속성에 대한 속성 및 해당 파라미터를 제거합니다.

  3. 생성된 템플릿에서 제거된 속성을 Code/ZipFile 속성으로 바꿉니다.

  4. IaC 생성기 콘솔에서 생성된 템플릿을 열고 편집한 템플릿 가져오기 버튼을 선택합니다.

Lambda 코드 사본이 없는 경우에는 다음 지침에 따라 템플릿을 업데이트할 수 있습니다.
  1. AWS Lambda GetFunction API 작업을 사용하세요(예: aws lambda get-function AWS CLI 명령 사용).

  2. 응답에서 RepositoryType 파라미터는 코드가 Amazon S3 버킷에 있는 경우 S3, 코드가 Amazon ECR 리포지토리에 있는 경우에는 ECR입니다.

  3. 응답에서 Location 파라미터에는 배포 패키지를 10분 동안 다운로드하는 데 사용할 수 있는 미리 서명된 URL이 포함되어 있습니다. 코드를 다운로드하십시오.

  4. Amazon S3 버킷에 코드를 업로드합니다.

  5. 생성된 템플릿으로 가져오기 작업을 실행하고 버킷 이름과 키를 파라미터 값으로 제공합니다.