배포 시 로컬 파일을 업로드하는 방법 AWS SAMCLI - AWS Serverless Application Model

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

배포 시 로컬 파일을 업로드하는 방법 AWS SAMCLI

개발할 때는 애플리케이션을 더 잘 구성하고 관리하려면 애플리케이션 코드를 별도의 파일로 분할하는 것이 유용할 때가 많습니다. 이에 대한 기본 예는 AWS Lambda 함수 코드를 인프라 코드에서 분리하는 것입니다. 이를 위해서는 Lambda 함수 코드를 프로젝트의 하위 디렉터리에 구성하고 () 템플릿 내에서 해당 로컬 경로를 참조하면 됩니다. AWS Serverless Application Model AWS SAM

에 애플리케이션을 배포할 때는 먼저 로컬 파일을 Amazon Simple Storage AWS Service (Amazon S3) 와 같은 액세스 가능한 서비스에 업로드해야 합니다. AWS 클라우드 AWS CloudFormation AWS SAMCLI를 사용하여 이 프로세스를 자동으로 진행할 수 있습니다. 다음을 하려면 sam deploy 또는 sam package 명령을 사용합니다.

  1. 액세스 가능한 AWS 서비스에 로컬 파일을 자동으로 업로드합니다.

  2. 새 파일 경로를 참조하도록 애플리케이션 템플릿을 자동으로 업데이트합니다.

데모: AWS SAMCLI를 사용하여 Lambda 함수 코드를 업로드합니다.

이 데모에서는 Lambda 함수에 .zip 패키지 유형을 사용하여 샘플 Hello World 애플리케이션을 초기화합니다. AWS SAMCLI를 사용하여 Lambda 함수 코드를 Amazon S3에 자동으로 업로드하고 애플리케이션 템플릿에서 새 경로를 참조합니다.

먼저 Hello World 애플리케이션을 초기화하기 위해 sam init를 실행합니다.

$ sam init ... Which template source would you like to use? 1 - AWS Quick Start Templates 2 - Custom Template Location Choice: 1 Choose an AWS Quick Start application template 1 - Hello World Example 2 - Multi-step workflow ... Template: 1 Use the most popular runtime and package type? (Python and zip) [y/N]: y Would you like to enable X-Ray tracing on the function(s) in your application? [y/N]: ENTER Would you like to enable monitoring using CloudWatch Application Insights? For more info, please view https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch-application-insights.html [y/N]: ENTER Project name [sam-app]: demo ----------------------- Generating application: ----------------------- Name: demo Runtime: python3.9 Architectures: x86_64 Dependency Manager: pip Application Template: hello-world Output Directory: . Configuration file: demo/samconfig.toml ...

Lambda 함수 코드는 프로젝트의 hello_world 하위 디렉터리에 구성되어 있습니다.

demo
├── README.md
├── hello_world
│   ├── __init__.py
│   ├── app.py
│   └── requirements.txt
├── template.yaml
└── tests

AWS SAM 템플릿 내에서 속성을 사용하여 Lambda 함수 코드의 로컬 경로를 참조합니다. CodeUri

AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 ... Resources: HelloWorldFunction: Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction Properties: CodeUri: hello_world/ Handler: app.lambda_handler Runtime: python3.9 ...

다음으로 애플리케이션을 빌드하고 배포를 준비하기 위해 sam build를 실행합니다.

$ sam build Starting Build use cache Manifest file is changed (new hash: 3298f13049d19cffaa37ca931dd4d421) or dependency folder (.aws-sam/deps/7896875f-9bcc-4350-8adb-2c1d543627a1) is missing for (HelloWorldFunction), downloading dependencies and copying/building source Building codeuri: /Users/.../demo/hello_world runtime: python3.9 metadata: {} architecture: x86_64 functions: HelloWorldFunction Running PythonPipBuilder:CleanUp Running PythonPipBuilder:ResolveDependencies Running PythonPipBuilder:CopySource Running PythonPipBuilder:CopySource Build Succeeded Built Artifacts : .aws-sam/build Built Template : .aws-sam/build/template.yaml ...

다음으로 sam deploy --guided를 실행하여 애플리케이션을 배포합니다.

$ sam deploy --guided Configuring SAM deploy ====================== Looking for config file [samconfig.toml] : Found Reading default arguments : Success Setting default arguments for 'sam deploy' ========================================= Stack Name [demo]: ENTER AWS Region [us-west-2]: ENTER #Shows you resources changes to be deployed and require a 'Y' to initiate deploy Confirm changes before deploy [Y/n]: n #SAM needs permission to be able to create roles to connect to the resources in your template Allow SAM CLI IAM role creation [Y/n]: ENTER #Preserves the state of previously provisioned resources when an operation fails Disable rollback [y/N]: ENTER HelloWorldFunction may not have authorization defined, Is this okay? [y/N]: y Save arguments to configuration file [Y/n]: ENTER SAM configuration file [samconfig.toml]: ENTER SAM configuration environment [default]: ENTER Looking for resources needed for deployment: ... Saved arguments to config file Running 'sam deploy' for future deployments will use the parameters saved above. The above parameters can be changed by modifying samconfig.toml Learn more about samconfig.toml syntax at https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-config.html File with same data already exists at demo/da3c598813f1c2151579b73ad788cac8, skipping upload Deploying with following values =============================== Stack name : demo Region : us-west-2 Confirm changeset : False Disable rollback : False Deployment s3 bucket : aws-sam-cli-managed-default-samclisourcebucket-1a4x26zbcdkqr Capabilities : ["CAPABILITY_IAM"] Parameter overrides : {} Signing Profiles : {} Initiating deployment ===================== ... Waiting for changeset to be created.. CloudFormation stack changeset ------------------------------------------------------------------------------------------------- Operation LogicalResourceId ResourceType Replacement ------------------------------------------------------------------------------------------------- + Add HelloWorldFunctionHell AWS::Lambda::Permissio N/A oWorldPermissionProd n + Add HelloWorldFunctionRole AWS::IAM::Role N/A ... ------------------------------------------------------------------------------------------------- Changeset created successfully. arn:aws:cloudformation:us-west-2:012345678910:changeSet/samcli-deploy1680906292/1164338d-72e7-4593-a372-f2b3e67f542f 2023-04-07 12:24:58 - Waiting for stack create/update to complete CloudFormation events from stack operations (refresh every 5.0 seconds) ------------------------------------------------------------------------------------------------- ResourceStatus ResourceType LogicalResourceId ResourceStatusReason ------------------------------------------------------------------------------------------------- CREATE_IN_PROGRESS AWS::IAM::Role HelloWorldFunctionRole - CREATE_IN_PROGRESS AWS::IAM::Role HelloWorldFunctionRole Resource creation Initiated ... ------------------------------------------------------------------------------------------------- CloudFormation outputs from deployed stack ------------------------------------------------------------------------------------------------- Outputs ------------------------------------------------------------------------------------------------- Key HelloWorldFunctionIamRole Description Implicit IAM Role created for Hello World function Value arn:aws:iam::012345678910:role/demo-HelloWorldFunctionRole-VQ4CU7UY7S2K Key HelloWorldApi Description API Gateway endpoint URL for Prod stage for Hello World function Value https://satnon55e9.execute-api.us-west-2.amazonaws.com/Prod/hello/ Key HelloWorldFunction Description Hello World Lambda Function ARN Value arn:aws:lambda:us-west-2:012345678910:function:demo- HelloWorldFunction-G14inKTmSQvK ------------------------------------------------------------------------------------------------- Successfully created/updated stack - demo in us-west-2

배포 중에 AWS SAMCLI는 Lambda 함수 코드를 Amazon S3에 자동으로 업로드하고 템플릿을 업데이트합니다. AWS CloudFormation 콘솔의 수정된 템플릿은 Amazon S3 버킷 경로를 반영합니다.

AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 ... Resources: HelloWorldFunction: Type: AWS::Serverless::Function Properties: CodeUri: s3://aws-sam-cli-managed-default-samclisourcebucket-1a4x26zbcdkqr/demo/da3c598813f1c2151579b73ad788cac8 Handler: app.lambda_handler ...

지원되는 사용 사례

는 다양한 파일 유형, AWS CloudFormation 리소스 유형 및 AWS CloudFormation 매크로에 대해 이 프로세스를 자동으로 촉진할 AWS SAMCLI 수 있습니다.

파일 유형

애플리케이션 파일 및 Docker 이미지가 지원됩니다.

AWS CloudFormation 리소스 유형

다음은 지원되는 리소스 유형 및 해당 속성의 목록입니다.

Resource 속성
AWS::ApiGateway::RestApi BodyS3Location
AWS::ApiGatewayV2::Api BodyS3Location
AWS::AppSync:FunctionConfiguration

CodeS3Location

RequestMappingTemplateS3Location

ResponseMappingTemplateS3Location

AWS::AppSync::GraphQLSchema DefinitionS3Location
AWS::AppSync::Resolver

CodeS3Location

RequestMappingTemplateS3Location

ResponseMappingTemplateS3Location

AWS::CloudFormation::ModuleVersion ModulePackage
AWS::CloudFormation::ResourceVersion SchemaHandlerPackage
AWS::ECR::Repository RepositoryName
AWS::ElasticBeanstalk::ApplicationVersion SourceBundle
AWS::Glue::Job Command.ScriptLocation
AWS::Lambda::Function

Code

Code.ImageUri

AWS::Lambda::LayerVersion Content
AWS::Serverless::Api DefinitionUri
AWS::Serverless::Function

CodeUri

ImageUri

AWS::Serverless::GraphQLApi

SchemaUri

Function.CodeUri

Resolver.CodeUri

AWS::Serverless::HttpApi DefinitionUri
AWS::Serverless::LayerVersion ContentUri
AWS::Serverless::StateMachine DefinitionUri
AWS::StepFunctions::StateMachine DefinitionS3Location

AWS CloudFormation 매크로

AWS::Include 변환 매크로를 사용하여 참조된 파일이 지원됩니다.

자세히 알아보기

AWS::Include변환에 대한 자세한 내용은 AWS CloudFormation 사용 설명서의 AWS::Include 변환을 참조하십시오.

AWS SAM 템플릿에서 AWS::Include 변환을 사용하는 예를 보려면 서버리스 랜드의 API Gateway HTTP API to SQS 패턴을 참조하십시오.