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

快速入门:发布应用程序

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

概述

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

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

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

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

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

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

Hello World 应用程序

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

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

  • 用于定义 Hello World 应用程序的两个 AWS 资源的 AWS SAM 模板:一个具有 GET 操作的 API 网关 服务和一个 Lambda 函数。此模板还定义 API 网关 GET 操作和 Lambda 函数之间的映射。

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

开始之前

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

步骤 1:初始化应用程序

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

初始化应用程序

  1. 在 AWS SAM CLI 命令提示符处运行以下命令。

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

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

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

      • hello_world/ 目录 – 包含应用程序代码,当您运行此代码时将返回 hello world

    注意

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

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

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

在本地测试应用程序

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

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

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

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

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

练习:更改消息字符串

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

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

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

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

步骤 3:打包应用程序

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

注意

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

创建 Lambda 部署程序包

  1. 在 AWS SAM 模板文件中添加 Metadata 部分,提供所需的应用程序信息。有关 AWS SAM 模板的 Metadata 部分的更多信息,请参阅 AWS 无服务器应用程序模型 开发人员指南 中的 AWS SAM 模板 Metdata 部分属性

    以下是一个示例 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. 通过运行以下 package AWS SAM CLI 命令创建 Lambda 函数部署包。

    sam-app> sam package \ --template-file template.yaml \ --output-template-file packaged.yaml \ --s3-bucket bucketname

    此命令执行以下操作:

    • 压缩 aws-sam/hello_world/ 目录的内容并将其上传到 Amazon S3。

    • 将部署包、README 文件和 LICENSE 文件上传到由 --s3-bucket 选项指定的 Amazon S3 存储桶。

    • 输出一个名为 packaged.yaml 的新模板文件,您在下一步使用该文件将应用程序发布到 AWS Serverless Application Repository。packaged.yaml 模板文件与原始模板文件 (template.yaml) 类似,但具有一个重要区别 — CodeUriLicenseUrlReadmeUrl 属性指向包含相应构件的 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 模板的 Metadata 部分、 AWS SAM CLI 的 sam packagesam publish 命令的更多信息,请参阅 AWS 无服务器应用程序模型 开发人员指南 中的使用 AWS SAM CLI 发布应用程序