快速入门:发布应用程序 - Amazon Serverless Application Repository
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

快速入门:发布应用程序

本指南将引导您完成使用 Amazon SAM CLI 下载、构建、测试示例无服务器应用程序并将其发布到 Amazon Serverless Application Repository 的步骤。您可以使用此示例应用程序作为开发和发布自己的无服务器应用程序的起点。

概览

以下步骤概述如何下载、构建和发布示例无服务器应用程序:

  1. 初始化。使用 sam init 从模板下载示例应用程序。

  2. 本地测试。使用 sam local invoke 和/或 sam local start-api 在本地测试应用程序。请注意,使用这些命令,即使您的 Lambda 函数是在本地调用的,它也会读取和写入Amazon云中的Amazon资源。

  3. 程序包。当您对 Lambda 函数感到满意时,使用将 Lambda 函数、Amazon SAM模板和任何依赖项捆绑到Amazon CloudFormation部署包中sam package。在此步骤中,您还将包含有关将上传到 Amazon Serverless Application Repository 的应用程序的信息。

  4. 发布。使用 sam publish 将应用程序发布到 Amazon Serverless Application Repository。完成此步骤后,您可以使用以下方法查看您的应用程序Amazon Serverless Application Repository并将其部署到Amazon云中Amazon Serverless Application Repository。

下一节中的示例Hello World 应用程序将指导您完成构建和发布无服务器应用程序的这些步骤。

Hello World 应用程序

在本练习中,您将下载并测试代表简单 API 后端的 Hello World 无服务器应用程序。它具有支持 GET 操作的Amazon API Gateway 端点和 Lambda 函数。当端点通过 GET 请求发送终端节点时,API Gateway 会调用 Lambda 函数。然后,Amazon Lambda 执行函数,它只是返回一条 hello world 消息。

该应用程序具有以下组件:

  • 一个为 Hello World 应用程序定义两个Amazon资源的Amazon SAM模板:一个带有 GET 操作的 API Gateway 服务和一个 Lambda 函数。该模板还定义了 API Gateway GET 操作与 Lambda 函数之间的映射。

  • 用 Python 编写的应用程序代码。

开始前的准备工作

请确保您具有本练习所需的设置:

步骤 1:初始化应用程序

在本节中,您将下载示例应用程序,其中包括 Amazon SAM 模板和应用程序代码。

初始化应用程序
  1. 在 Amazon SAM CLI 命令提示符处运行以下命令。

    sam init --runtime python3.6
  2. 查看命令创建的目录的内容 (sam-app/):

    • template.yaml— 定义 Hello World 应用程序需要的两个Amazon资源:一个 Lambda 函数和一个支持 GET 操作的 API Gateway 终端节点。模板还定义了两个资源之间的映射。

    • 与 Hello World 应用程序代码相关的内容:

      • hello_world/目录-包含应用程序代码,该代码hello world在您运行时返回。

    注意

    对于本练习,应用程序代码是用 Python 编写的,并且您可以在 init 命令中指定运行时。 Amazon Lambda 支持用于创建应用程序代码的其他语言。如果您指定了另一个受支持的运行时,init 命令将以指定的语言提供 Hello World 代码,以及一个您可以遵循该语言的 README.md 文件。有关支持的运行时的信息,请参阅 Lambda 执行环境和可用库

步骤 2:在本地测试应用程序

现在您的本地计算机上已安装了该 Amazon SAM 应用程序,请按照以下步骤在本地进行测试。

在本地测试应用程序
  1. 在本地启动 API 网关终端节点。您必须从包含该 template.yaml 文件的目录运行以下命令。

    sam-app> sam local start-api --region us-east-1

    该命令返回 API Gateway 终端节点,您可以向该终端节点发送请求以进行本地测试。

  2. 测试应用程序。复制 API Gateway 终端节点 URL,将其粘贴到浏览器中,然后选择 Enter。示例 API Gateway 终端节点 URL 是http://127.0.0.1:3000/hello

    API Gateway 在本地调用终端节点映射到的 Lambda 函数。Lambda 函数在本地 Docker 容器中执行并返回hello world。API Gateway 向浏览器返回包含文本的响应。

练习:更改消息字符串

成功测试示例应用程序后,您可以尝试进行简单的修改:更改返回的消息字符串。

  1. 编辑 /hello_world/app.py 文件以将消息字符串从 'hello world' 更改为 'Hello World!'

  2. 在浏览器中重新加载测试 URL 并观察新字符串。

您会注意到您的新代码是动态加载的,而无需重新启动 sam local 进程。

步骤 3:打包应用程序

在本地测试应用程序后,您可以使用 Amazon SAM CLI 创建部署包和打包的 Amazon SAM 模板。

注意

在以下步骤中,您将为包含应用程序代码的 hello_world/ 目录的内容创建一个 .zip 文件。此 .zip 文件是无服务器应用程序的部署包。有关更多信息,请参阅Amazon Lambda开发人员指南中的创建部署Package (Python)

创部署部署部署部署部署部署部署部署部署部署部署Lambda
  1. 在 Amazon SAM 模板文件中添加 Metadata 部分,提供所需的应用程序信息。有关Amazon SAM模板Metadata部分的更多信息,请参阅Amazon Serverless Application Model开发者指南中的Amazon 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

    LicenseUrlReadmeUrl属性可以是本地文件的引用(如上例所示),也可以是指向已经托管这些构件的 Amazon S3 存储桶的链接。

  2. 在要保存打包代码的位置创建 S3 存储桶。如果要使用现有 S3 存储桶,请跳过此步骤。

    sam-app> aws s3 mb s3://bucketname
  3. 通过运行以下 CLpackageAmazon 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 的新模板文件,您在下一步使用该文件将应用程序发布到 Amazon Serverless Application Repository。packaged.yaml模板文件与原始模板文件 (template.yaml) 类似,但有一个关键区别,CodeUriLicenseUrl、和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:发布应用程序

既然您已创建部署包,就可以使用它将应用程序发布到 Amazon Serverless Application Repository。

将无服务器应用程序发布到 Amazon Serverless Application Repository
  • 执行以下命令以在 Amazon Serverless Application Repository 中发布新应用程序,并将第一个版本创建为 0.0.1。

    sam-app> sam publish \ --template packaged.yaml \ --region us-east-1
注意

默认情况下,应用程序将创建为私有应用程序。在允许其他Amazon账户查看和部署您的应用程序之前,您必须共享该应用程序。有关共享应用程序的更多详细信息,请参阅下面的 Next Steps (后续步骤)

后续步骤

现在,您已经发布了示例应用程序,以下是您可能需要对其执行的几项操作。

  • 在中查看您的应用程序Amazon Serverless Application Repository-sam publish 命令的输出将包括Amazon Serverless Application Repository直接指向应用程序详细信息页面的链接。您也可以转到 Amazon Serverless Application Repository 登录页面并搜索您的应用程序。

  • 共享您的应用程序-由于您的应用程序默认设置为私有,因此其他Amazon帐户不可见。要与他人共享您的应用程序,您必须将其公开或授予对特定Amazon账户列表的权限。有关使用 Amazon CLI 共享应用程序的信息,请参阅Amazon Serverless Application Repository应用程序策略示例。有关使用控制台共享应用程序的信息,请参阅共享应用程序

更多信息

有关Amazon SAM CLIAmazon SAM 模板sam packagesam publish命令Metadata部分的更多信息,请参阅《Amazon Serverless Application Model开发者指南》中的 “使用Amazon SAM CLI 发布应用程序”。