本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
如何在 AWS SAM 部署时上传本地文件
将应用程序部署到时 AWS Cloud, AWS CloudFormation 需要先将本地文件上传到可访问的 AWS 服务,例如亚马逊简单存储服务 (Amazon S3) Service。这包括您的模板引用的本地文件。 AWS SAM 为了满足此要求, AWS SAM CLI 使用sam deploy
或sam package
命令时,会执行以下操作:
-
自动将您的本地文件上传到可访问的 AWS 服务。
-
自动更新应用程序模板以引用新的文件路径。
演示:使用 AWS SAM CLI 上传 Lambda 函数代码
在这个演示中,我们使用 Lambda 函数的 .zip 包类型初始化示例 Hello World 应用程序。我们使用 AWS SAM CLI 自动将我们的 Lambda 函数代码上传到 Amazon S3,并在我们的应用程序模板中引用其新路径。
首先,我们运行 sam init
以初始化 Hello World 应用程序。
$
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-samcliamzn-s3-demo-source-bucket-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 SAM CLI 自动将我们的 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-samcliamzn-s3-demo-source-bucket-1a4x26zbcdkqr/demo/da3c598813f1c2151579b73ad788cac8 Handler: app.lambda_handler ...
支持的使用案例
的 AWS SAM CLI 可以自动简化多种文件类型、 AWS CloudFormation 资源类型和 AWS CloudFormation 宏的此过程。
文件类型
应用程序文件和 Docker 支持图像。
AWS CloudFormation 资源类型
以下是支持的资源类型及其属性的列表:
资源 | 属性 |
---|---|
AWS::ApiGateway::RestApi |
BodyS3Location |
AWS::ApiGatewayV2::Api |
BodyS3Location |
AWS::AppSync:FunctionConfiguration |
|
AWS::AppSync::GraphQLSchema |
DefinitionS3Location |
AWS::AppSync::Resolver |
|
AWS::CloudFormation::ModuleVersion |
ModulePackage |
AWS::CloudFormation::ResourceVersion |
SchemaHandlerPackage |
AWS::ECR::Repository |
RepositoryName |
AWS::ElasticBeanstalk::ApplicationVersion |
SourceBundle |
AWS::Glue::Job |
Command.ScriptLocation |
AWS::Lambda::Function |
|
AWS::Lambda::LayerVersion |
Content |
AWS::Serverless::Api |
DefinitionUri |
AWS::Serverless::Function |
|
AWS::Serverless::GraphQLApi |
|
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
变换的示例,请参阅 Serverless Land 上的SQS模式API门户HTTPAPI