使用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云端对其进行了测试。

按照本主题中的说明创建新应用程序、创建现有应用程序的新版本或更新现有应用程序的元数据。(您要做什么取决于应用程序中是否已存在Amazon Serverless Application Repository,以及是否有任何应用程序元数据正在更改。) 有关应用程序元数据的更多信息,请参阅Amazon SAM元数据部分属性

先决条件

在Amazon Serverless Application Repository使用Amazon SAM CLI 将应用程序发布到之前,必须具备以下条件:

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

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

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

  • 语义版本,仅用于公开共享您的应用程序。这个值可以像 1.0 一样简单。

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

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

  • 一个LICENSE.txt文件,只需要公开共享您的应用程序。

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

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

    1. 通过以下网址打开 Simple Storage Service(Amazon S3)控制台:https://console.aws.amazon.com/s3/

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

    3. 请选择权限

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

    5. “编辑存储桶策略” 页面上,将以下策略声明粘贴到策略编辑器中。在政策声明中,确保在元素中使用您的存储桶名称,在ResourceCondition元素中使用您的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. 选择 Save changes(保存更改)。

发布新应用程序

步骤 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:Package 应用程序

运行以下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) 类似,但它有一个关键区别,即CodeUriLicenseUrl、和ReadmeUrl属性指向 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和为发布SemanticVersion的应用程序1.0.0。要更新该应用程序,该Amazon SAM模板必须具有应用程序名称SampleApp和的1.0.1(或除SemanticVersion之外的任何其他名称1.0.0)。

其他主题