S3 버킷에 로컬 아티팩트 업로드 - AWS CloudFormation

S3 버킷에 로컬 아티팩트 업로드

Amazon S3 위치가 필요한 일부 요청 속성의 경우(버킷 이름 및 파일 이름) 그 대산 로컬 참조를 지정할 수 있습니다. 예를 들어, AWS Lambda 함수의 소스 코드 또는 Amazon API Gateway REST API의 OpenAPI(이전의 Swagger) 파일의 S3 위치를 지정할 수 있습니다. 파일을 S3 버킷에 수동으로 업로드한 다음 템플릿에 위치를 추가하는 대신, 템플릿에서 로컬 아티팩트라는 로컬 참조를 지정한 다음 package 명령을 사용하여 파일을 빠르게 업로드할 수 있습니다. 로컬 아티팩트는 package 명령을 통해 Amazon S3에 업로드하는 파일 또는 폴더의 경로입니다. 예를 들어, 아티팩트는 AWS Lambda 함수의 소스 코드 또는 Amazon API Gateway REST API의 OpenAPI 파일에 대한 경로일 수 있습니다.

파일을 지정하면 이 명령은 해당 파일을 S3 버킷에 직접 업로드합니다. 아티팩트를 업로드한 후 이 명령은 로컬 아티팩트에 대한 참조를 아티팩트를 업로드한 S3 위치로 바꾸어 템플릿의 사본을 반환합니다. 그러면 반환된 템플릿을 사용하여 스택을 생성하거나 업데이트할 수 있습니다.

폴더를 지정하면 이 명령은 폴더에 대한 .zip 파일을 생성한 다음 .zip 파일을 업로드합니다. 경로를 지정하지 않으면 이 명령은 작업 디렉터리에 대한 .zip 파일을 생성하고 이 파일을 업로드합니다. 절대 경로 또는 상대 경로를 지정할 수 있습니다. 여기서 상대 경로는 템플릿 위치에 상대적입니다.

package 명령이 지원하는 리소스 속성에만 로컬 아티팩트를 사용할 수 있습니다. 이 명령 및 지원되는 리소스 속성 목록에 대한 자세한 내용을 알아보려면 AWS CLI 명령 레퍼런스aws cloudformation package 명령을 참조하세요.

다음 템플릿은 Lambda 함수의 소스 코드에 대한 로컬 아티팩트를 지정합니다. 소스 코드는 사용자의 /home/user/code/lambdafunction 폴더에 저장됩니다.

원본 템플릿

{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Transform": "AWS::Serverless-2016-10-31",
  "Resources": {
    "MyFunction": {
      "Type": "AWS::Serverless::Function",
      "Properties": {
        "Handler": "index.handler",
        "Runtime": "nodejs18.x",
        "CodeUri": "/home/user/code/lambdafunction"
      }
    }
  }
}

다음 명령은 함수의 소스 코드 폴더가 포함된 .zip 파일을 생성한 다음 my-bucket 버킷의 루트 폴더에 .zip 파일을 업로드합니다.

Package 명령

aws cloudformation package \ --template /path_to_template/template.json \ --s3-bucket mybucket \ --output-template-file packaged-template.json \ --use-json

이 명령은 생성되는 템플릿을 --output 옵션에서 지정하는 경로에 저장합니다. 다음 예제와 같이 이 명령은 아티팩트를 Amazon S3 위치로 바꿉니다.

결과 템플릿

{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Transform": "AWS::Serverless-2016-10-31",
  "Resources": {
    "MyFunction": {
      "Type": "AWS::Serverless::Function",
      "Properties": {
        "Handler": "index.handler",
        "Runtime": "nodejs18.x",
        "CodeUri": "s3://mybucket/<md5 checksum>"
      }
    }
  }
}