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

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

使用 Amazon SAM CLI 发布无服务器应用程序

要使您的 Amazon SAM 应用程序可供其他人查找和部署,您可以使用 Amazon SAM CLI 将其发布到 Amazon Serverless Application Repository。要使用 Amazon SAM CLI 发布应用程序,必须使用 Amazon SAM 模板来定义应用程序。您还必须已在本地或 Amazon Cloud 中对应用程序进行了测试。

按照本主题中的说明创建新应用程序,创建现有应用程序的新版本,或更新现有应用程序的元数据。(您的操作取决于应用程序是否已存在于 Amazon Serverless Application Repository 中,以及是否有任何应用程序元数据在发生变化。) 有关应用程序元数据的更多信息,请参阅 Amazon SAM 模板元数据部分属性

先决条件

在使用 Amazon SAM CLI 将应用程序发布到 Amazon Serverless Application Repository 之前,您需要以下条件:

  • Amazon SAM CLI 已安装。有关更多信息,请参阅 安装 Amazon SAM CLI。要确定是否安装了 Amazon SAM CLI,请运行以下命令:

    sam --version
  • 有效 Amazon SAM 模板。

  • Amazon SAM 模板引用的应用程序代码和依赖项。

  • 语义版本,仅在公开共享应用程序时才需要。此值可以像 1.0 那么简单。

  • 指向应用程序源代码的 URL。

  • 一个 README.md 文件。此文件应描述客户如何使用您的应用程序,以及如何在将其部署到自己的 Amazon 账户之前对其进行配置。

  • LICENSE.txt 文件,仅在公开共享应用程序时才需要。

  • 如果您的应用程序包含任何嵌套应用程序,则这些嵌套应用程序必须已发布到 Amazon Serverless Application Repository。

  • 一个有效的 Amazon Simple Storage Service (Amazon S3)存储桶策略,它为在您打包应用程序时上传到 Amazon S3 的构件授予服务读取权限。要设置此策略,请执行以下操作:

    1. 打开 Amazon S3 控制台,网址为:https://console.aws.amazon.com/s3/

    2. 选择用于打包您的应用程序的 Amazon S3 存储桶的名称。

    3. 选择权限

    4. Permissions(权限)标签页中,在 Bucket policy(存储桶策略)下,请选择 Edit(编辑)。

    5. 编辑存储桶策略页面中,将以下策略声明粘贴到策略编辑器中。在策略声明中,请确保在 Resource 元素中使用存储桶名称,并且在 Condition 元素中使用 Amazon 账户 ID。Condition 元素中的表达式可确保 Amazon Serverless Application Repository 仅有权访问来自指定 Amazon 账户的应用程序。有关策略声明的更多信息,请参阅《IAM 用户指南》中的 IAM JSON 策略元素参考

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "serverlessrepo.amazonaws.com" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::<your-bucket-name>/*", "Condition" : { "StringEquals": { "aws:SourceAccount": "123456789012" } } } ] }
    6. 选择保存更改

发布新应用程序

第 1 步:在 Amazon SAM 模板中添加 Metadata 部分

首先,在 Amazon SAM 模板中添加 Metadata 部分。提供要发布到 Amazon Serverless Application Repository 的应用程序信息。

下面是 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 Resources: HelloWorldFunction: Type: AWS::Lambda::Function Properties: ... CodeUri: source-code1 ...

有关 Amazon SAM 模板的 Metadata 部分的更多信息,请参阅 Amazon SAM 模板元数据部分属性

第 2 步:打包应用程序

运行以下 Amazon SAM CLI 命令,将应用程序的构件上传到 Amazon S3,并输出名为 packaged.yaml 的新模板文件:

sam package --output-template-file packaged.yaml --s3-bucket <your-bucket-name>

在下一步中,要使用 packaged.yaml 模板文件将应用程序发布到 Amazon Serverless Application Repository。此文件与原始模板文件 (template.yaml) 类似,但具有一个重要区别:CodeUriLicenseUrlReadmeUrl 属性指向包含相应构件的 Amazon S3 存储桶和对象。

来自示例 packaged.yaml 模板文件的以下代码段显示了 CodeUri 属性:

MySampleFunction: Type: AWS::Serverless::Function Properties: CodeUri: s3://bucketname/fbd77a3647a4f47a352fcObjectGUID ...

第 3 步:发布应用程序

要将私有版本的 Amazon SAM 应用程序发布到 Amazon Serverless Application Repository,请运行以下 Amazon SAM CLI 命令:

sam publish --template packaged.yaml --region us-east-1

sam publish 命令的输出包括指向 Amazon Serverless Application Repository 上的应用程序的链接。您也可以转到Amazon Serverless Application Repository 登录页面并搜索您的应用程序。

第 4 步:共享应用程序(可选)

默认情况下,您的应用程序设置为私有,因此其他 Amazon 账户看不到您的应用程序。要与其他人共享您的应用程序,您必须将其公开或向特定 Amazon 账户列表授予权限。

有关使用 Amazon CLI 共享应用程序的信息,请参阅《Amazon Serverless Application Repository 开发人员指南》中的 Amazon Serverless Application Repository 基于资源的策略示例。有关使用 Amazon Web Services Management Console 共享应用程序的信息,请参阅《Amazon Serverless Application Repository 开发人员指南》中的共享应用程序

发布现有应用程序的新版本

将应用程序发布到 Amazon Serverless Application Repository 之后,您可能需要发布该应用程序的新版本。例如,您可能更改了 Lambda 函数代码或向应用程序架构添加了新组件。

要更新您之前发布的应用程序,请使用前面详述的相同流程再次发布该应用程序。在 Amazon SAM 模板文件的 Metadata 部分,提供您最初发布应用程序时使用的应用程序名称,但名称要包含一个新的 SemanticVersion 值。

例如,假设发布的应用程序的名称为 SampleApp,并且 SemanticVersion1.0.0。要更新该应用程序,Amazon SAM 模板必须包含应用程序名称 SampleAppSemanticVersion 1.0.1(或除 1.0.0 之外的任何版本)。

其他主题