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

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

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

要使您的Amazon SAM应用程序可供他人查找和部署,您可以使用Amazon SAMCLI 将其发布到Amazon Serverless Application Repository。要使用Amazon SAMCLI,您必须使用Amazon SAM模板。您还必须在本地或Amazon云。

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

Prerequisites

在将应用程序发布到Amazon Serverless Application Repository使用Amazon SAMCLI,您必须拥有以下项:

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

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

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

  • 一个语义版本,只需要公开共享您的应用程序。此值可以像 1.0 一样简单。

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

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

  • ALICENSE.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. 选择 Permissions

    4. 在存储库的Permissions (权限)选项卡,在存储桶策略中,选择编辑

    5. 在存储库的编辑存储桶策略页面上,将以下策略声明粘贴到策略编辑器。在策略声明中,请确保在Resource元素和您的Amazon中的账户 IDCondition元素。中的表达式Condition元素可确保Amazon Serverless Application Repository具有仅访问来自指定Amazonaccount. 有关策略声明的更多信息,请参阅IAM JSON 策略元素引用中的IAM 用户指南

      { "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 步:添加Metadata部分添加到Amazon SAM模板

首先,添加Metadata部分添加到您的Amazon SAM模板。提供要发布到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 ...

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

第 2 步:打包应用程序

运行以下命令Amazon SAMCLI 命令,该命令将应用程序的工件上传到 Amazon S3,并输出一个名为packaged.yaml

sam package --template-file template.yaml --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 SAMCLI 命令:

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

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

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

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

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

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

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

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

例如,考虑使用名称SampleAppSemanticVersion1.0.0。要更新该应用程序,Amazon SAM模板必须具有应用程序名称SampleAppSemanticVersion1.0.1(或任何其他1.0.0)。

其他主题