本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
快速入门:发布应用程序
本指南将引导您完成使用 AWS SAM CLI 下载、构建、测试示例无服务器应用程序并将其发布到 AWS Serverless Application Repository 的步骤。您可以使用此示例应用程序作为开发和发布自己的无服务器应用程序的起点。
概览
以下步骤概述如何下载、构建和发布示例无服务器应用程序:
-
初始化。使用
sam init
从模板下载示例应用程序。 -
本地测试。使用
sam local invoke
和/或sam local start-api
在本地测试应用程序。请注意,使用这些命令,即使您的 Lambda 函数是在本地调用的,它也会读取和写入AWS云中的AWS资源。 -
程序包。当您对 Lambda 函数感到满意时,使用将 Lambda 函数、AWS SAM模板和任何依赖项捆绑到AWS CloudFormation部署包中
sam package
。在此步骤中,您还将包含有关将上传到 AWS Serverless Application Repository 的应用程序的信息。 -
发布。使用
sam publish
将应用程序发布到 AWS Serverless Application Repository。完成此步骤后,您可以使用以下方法查看您的应用程序AWS Serverless Application Repository并将其部署到AWS云中AWS Serverless Application Repository。
下一节中的示例Hello World 应用程序将指导您完成构建和发布无服务器应用程序的这些步骤。
Hello World 应用程序
在本练习中,您将下载并测试代表简单 API 后端的 Hello World 无服务器应用程序。它具有支持 GET 操作的Amazon API Gateway 端点和 Lambda 函数。当端点通过 GET 请求发送终端节点时,API Gateway 会调用 Lambda 函数。然后,AWS Lambda 执行函数,它只是返回一条 hello world
消息。
该应用程序具有以下组件:
-
一个为 Hello World 应用程序定义两个AWS资源的AWS SAM模板:一个带有 GET 操作的 API Gateway 服务和一个 Lambda 函数。该模板还定义了 API Gateway GET 操作与 Lambda 函数之间的映射。
-
用 Python 编写的应用程序代码。
开始前的准备工作
请确保您具有本练习所需的设置:
-
您必须具有具有具有具有管理员AWS权限的 IAM 用户身份通过 IAM iamay 用户身份通过 IAM 请参阅设置AWS账户。
-
您必须安装 AWS SAM CLI(命令行界面)。请参阅安装 AWS SAM CLI。
-
您必须安装 AWS CLI 版本 1.16.77 或更高版本。请参阅安装 AWS Command Line Interface。
步骤 1:初始化应用程序
在本节中,您将下载示例应用程序,其中包括 AWS SAM 模板和应用程序代码。
初始化应用程序
-
在 AWS SAM CLI 命令提示符处运行以下命令。
sam init --runtime python3.6
-
查看命令创建的目录的内容 (
sam-app/
):-
template.yaml
— 定义 Hello World 应用程序需要的两个AWS资源:一个 Lambda 函数和一个支持 GET 操作的 API Gateway 终端节点。模板还定义了两个资源之间的映射。 -
与 Hello World 应用程序代码相关的内容:
-
hello_world/
目录-包含应用程序代码,该代码hello world
在您运行时返回。
-
注意
对于本练习,应用程序代码是用 Python 编写的,并且您可以在
init
命令中指定运行时。 AWS Lambda 支持用于创建应用程序代码的其他语言。如果您指定了另一个受支持的运行时,init
命令将以指定的语言提供 Hello World 代码,以及一个您可以遵循该语言的README.md
文件。有关支持的运行时的信息,请参阅 Lambda 执行环境和可用库。 -
步骤 2:在本地测试应用程序
现在您的本地计算机上已安装了该 AWS SAM 应用程序,请按照以下步骤在本地进行测试。
在本地测试应用程序
-
在本地启动 API 网关终端节点。您必须从包含该
template.yaml
文件的目录运行以下命令。sam-app> sam local start-api --region us-east-1
该命令返回 API Gateway 终端节点,您可以向该终端节点发送请求以进行本地测试。
-
测试应用程序。复制 API Gateway 终端节点 URL,将其粘贴到浏览器中,然后选择 Enter。示例 API Gateway 终端节点 URL 是
http://127.0.0.1:3000/hello
。API Gateway 在本地调用终端节点映射到的 Lambda 函数。Lambda 函数在本地 Docker 容器中执行并返回
hello world
。API Gateway 向浏览器返回包含文本的响应。
练习:更改消息字符串
成功测试示例应用程序后,您可以尝试进行简单的修改:更改返回的消息字符串。
-
编辑
/hello_world/app.py
文件以将消息字符串从'hello world'
更改为'Hello World!'
。 -
在浏览器中重新加载测试 URL 并观察新字符串。
您会注意到您的新代码是动态加载的,而无需重新启动 sam local
进程。
步骤 3:打包应用程序
在本地测试应用程序后,您可以使用 AWS SAM CLI 创建部署包和打包的 AWS SAM 模板。
注意
在以下步骤中,您将为包含应用程序代码的 hello_world/
目录的内容创建一个 .zip 文件。此 .zip 文件是无服务器应用程序的部署包。有关更多信息,请参阅AWS Lambda开发人员指南中的创建部署Package (Python)。
创部署部署部署部署部署部署部署部署部署部署部署Lambda
-
在 AWS SAM 模板文件中添加
Metadata
部分,提供所需的应用程序信息。有关AWS SAM模板Metadata
部分的更多信息,请参阅AWS Serverless Application Model开发者指南中的AWS SAM模板元数据部分属性。以下是一个示例
Metadata
部分:Metadata: AWS::ServerlessRepo::Application: Name:
my-app
Description:hello world
Author:user1
SpdxLicenseId: Apache-2.0 LicenseUrl:LICENSE.txt
ReadmeUrl:README.md
Labels:['tests']
HomePageUrl:https://github.com/user1/my-app-project
SemanticVersion:0.0.1
SourceCodeUrl:https://github.com/user1/my-app-project
LicenseUrl
和ReadmeUrl
属性可以是本地文件的引用(如上例所示),也可以是指向已经托管这些构件的 Amazon S3 存储桶的链接。 -
在要保存打包代码的位置创建 S3 存储桶。如果要使用现有 S3 存储桶,请跳过此步骤。
sam-app> aws s3 mb s3://
bucketname
-
通过运行以下 CL
package
AWS SAM I 命令创建 Lambda 函数部署包。sam-app> sam package \ --template-file template.yaml \ --output-template-file packaged.yaml \ --s3-bucket
bucketname
此命令执行以下操作:
-
压缩
aws-sam/hello_world/
目录的内容并将其上传到 Amazon S3。 -
将部署包、自述文件和许可证文件上传到
--s3-bucket
选项指定的 Amazon S3 存储桶。 -
输出一个名为
packaged.yaml
的新模板文件,您在下一步使用该文件将应用程序发布到 AWS Serverless Application Repository。packaged.yaml
模板文件与原始模板文件 (template.yaml
) 类似,但有一个关键区别,CodeUri
LicenseUrl
、和ReadmeUrl
属性指向 Amazon S3 存储桶和包含相应构件的对象。来自示例packaged.yaml
模板文件的以下代码段显示了CodeUri
属性:HelloWorldFunction: Type: AWS::Serverless::Function # For more information about function resources, see https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction Properties: CodeUri: s3://
bucketname
/fbd77a3647a4f47a352fcObjectGUID
...
-
步骤 4:发布应用程序
既然您已创建部署包,就可以使用它将应用程序发布到 AWS Serverless Application Repository。
将无服务器应用程序发布到 AWS Serverless Application Repository
-
执行以下命令以在 AWS Serverless Application Repository 中发布新应用程序,并将第一个版本创建为 0.0.1。
sam-app> sam publish \ --template packaged.yaml \ --region us-east-1
注意
默认情况下,应用程序将创建为私有应用程序。在允许其他AWS账户查看和部署您的应用程序之前,您必须共享该应用程序。有关共享应用程序的更多详细信息,请参阅下面的 Next Steps (后续步骤)。
后续步骤
现在,您已经发布了示例应用程序,以下是您可能需要对其执行的几项操作。
-
在中查看您的应用程序AWS Serverless Application Repository-
sam publish
命令的输出将包括AWS Serverless Application Repository直接指向应用程序详细信息页面的链接。您也可以转到 AWS Serverless Application Repository 登录页面并搜索您的应用程序。 -
共享您的应用程序-由于您的应用程序默认设置为私有,因此其他AWS帐户不可见。要与他人共享您的应用程序,您必须将其公开或授予对特定AWS账户列表的权限。有关使用 AWS CLI 共享应用程序的信息,请参阅AWS Serverless Application Repository应用程序策略示例。有关使用控制台共享应用程序的信息,请参阅共享应用程序。
更多信息
有关AWS SAM CLIAWS SAM 模板sam package
和sam publish
命令Metadata
部分的更多信息,请参阅《AWS Serverless Application Model开发者指南》中的 “使用AWS SAM CLI 发布应用程序”。