

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

# 如何发布应用程序
<a name="serverlessrepo-how-to-publish"></a>

本节为您提供使用 Amazon SAM CLI 或将无服务器应用程序发布到的过程。 Amazon Serverless Application Repository Amazon Web Services 管理控制台它还向您展示如何共享您的应用程序以允许其他人部署它，以及从 Amazon Serverless Application Repository中删除您的应用程序。

**重要**  
您在发布应用程序时输入的信息未加密。此信息包括作者姓名等数据。如果您有不希望存储或公开的个人身份信息，我们建议您不要在发布应用程序时输入此类信息。

## 发布应用程序 (Amazon CLI)
<a name="publishing-application-through-cli"></a>

向发布应用程序的最简单方法 Amazon Serverless Application Repository 是使用一组 Amazon SAM CLI 命令。有关更多信息，请参阅 *Amazon Serverless Application Model (Amazon SAM) 开发者指南*[中的使用 Amazon SAM CLI 发布应用程序](https://docs.amazonaws.cn/serverless-application-model/latest/developerguide/serverless-sam-template-publishing-applications.html)。

## 发布新应用程序（控制台）
<a name="publishing-application-through-aws-console"></a>

本节介绍如何使用 Amazon Web Services 管理控制台 向发布新应用程序 Amazon Serverless Application Repository。有关发布现有应用程序的新版本的说明，请参阅[发布现有应用程序的新版本](serverlessrepo-how-to-publish-new-version.md)。

### 先决条件
<a name="publishing-application-prerequisites"></a>

在将应用程序发布到之前 Amazon Serverless Application Repository，您需要满足以下条件：
+ 有效的 Amazon 账户。
+ 定义所用 Amazon 资源的有效 Amazon Serverless Application Model (Amazon SAM) 模板。有关 Amazon SAM 模板的更多信息，请参阅[Amazon SAM 模板基础知识](https://docs.amazonaws.cn/serverless-application-model/latest/developerguide/serverless-sam-template-basics.html)。
+ 您使用 Amazon CloudFormation `package`命令为应用程序创建的软件包 Amazon CLI。此命令将您的 Amazon SAM 模板引用的本地工件（本地路径）打包。有关更多详细信息，请参阅 Amazon CloudFormation 文档中的[软件包](https://docs.amazonaws.cn/cli/latest/reference/cloudformation/package.html)。
+ 指向应用程序源代码的 URL（如果您需要公开发布应用程序）。
+ 一个 readme.txt 文件。此文件应描述客户如何使用您的应用程序，以及如何在将其部署到自己的 Amazon 账户中之前对其进行配置。
+ 来自 [SPDX 网站](https://spdx.org/licenses/)的 license.txt 文件或有效的许可证标识符。请注意，只有当您想要公开共享您的应用程序时，才需要许可证。如果您要将应用程序保持为私有或仅私下共享，则无需指定许可证。
+ 有效的 Amazon S3 存储桶策略，用于向服务授予在您打包应用程序时上传到 Amazon S3 的项目的读取权限。要设置此策略，请按照下列步骤操作：

  1. 打开 Amazon S3 控制台，网址为 [https://console.aws.amazon.com/s3/](https://console.amazonaws.cn/s3/)。

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

  1. 选择**权限**选项卡。

  1. 选择**存储桶策略**按钮。

  1. 将以下策略语句粘贴到 **Bucket policy editor (存储桶策略编辑器)** 中。请务必在元素中替换您的存储桶名称，在`Resource`元素中替换您的 Amazon 账户 ID。`Condition``Condition`元素中的表达式确保 Amazon Serverless Application Repository 只有从指定 Amazon 账户访问应用程序的权限。有关策略声明的更多信息，请参阅*《IAM 用户指南》*中的 [IAM JSON 策略元素参考](https://docs.amazonaws.cn/IAM/latest/UserGuide/reference_policies_elements.html)。

------
#### [ JSON ]

****  

     ```
     {
         "Version":"2012-10-17",		 	 	 
         "Statement": [
             {
                 "Effect": "Allow",
                 "Principal": {
                     "Service":  "serverlessrepo.amazonaws.com"
                 },
                 "Action": "s3:GetObject",
                 "Resource": "arn:aws:s3:::bucketname/*",
                 "Condition" : {
                     "StringEquals": {
                         "aws:SourceAccount": "123456789012"
                     }
                 }
             }
         ]
     }
     ```

------

  1. 选择**保存**按钮。

### 过程
<a name="create-new-application"></a>

使用以下步骤在 Amazon Serverless Application Repository 中创建新应用程序。

**要在中创建新应用程序 Amazon Serverless Application Repository**

1. 打开 [Amazon Serverless Application Repository 控制台](https://console.amazonaws.cn/serverlessrepo/home)并选择 **Publish applications (发布应用程序)**。

1. 在 **Publish an application (发布应用程序)** 页面上，输入以下应用程序信息，然后选择 **Publish application (发布应用程序)**：    
[\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/serverlessrepo/latest/devguide/serverlessrepo-how-to-publish.html)

## 共享应用程序
<a name="share-application"></a>

已发布的应用程序可能已设置以下三个类别之一的权限：
+ **私有（默认）**-使用同一账户创建且未与任何其他 Amazon 账户共享的应用程序。只有共享您 Amazon 账户的消费者才有权部署私有应用程序。
+ **私下共享** — 发布者已明确与一组特定 Amazon 帐户或 Amazon 组织中的 Amazon 帐户共享的应用程序。消费者有权部署已与其 Amazon 账户或 Amazon 组织共享的应用程序。有关的更多信息 Amazon Organizations，请参阅《*[Amazon Organizations 用户指南》](https://docs.amazonaws.cn/organizations/latest/userguide/)*。
+ **公开共享**-发布者与所有人共享的应用程序。所有使用者都有权部署任何公开共享的应用程序。

将应用程序发布到后 Amazon Serverless Application Repository，该应用程序默认设置为**私有**。本节向您展示如何与特定 Amazon 账户或 Amazon 组织私下共享应用程序，或者如何与所有人公开共享应用程序。

### 通过控制台共享应用程序
<a name="share-application-console"></a>

您可以通过两种方式与他人共享您的应用程序：1) 与特定 Amazon 账户或 Amazon 组织内的 Amazon 账户共享，或者 2) 与所有人公开共享。有关的更多信息 Amazon Organizations，请参阅《*[Amazon Organizations 用户指南》](https://docs.amazonaws.cn/organizations/latest/userguide/)*。

**选项 1：与 Amazon 组织内的特定 Amazon 账户或账户共享您的应用程序**

1. 打开 [Amazon Serverless Application Repository 控制台](https://console.amazonaws.cn/serverlessrepo/home)。

1. 在导航窗格上，选择 **Published Applications (已发布的应用程序)**，以显示您已创建的应用程序的列表。

1. 选择要共享的应用程序。

1. 选择 **Sharing (共享)** 选项卡。

1. 在 **Application policy statements (应用程序策略语句)** 部分中，选择 **Create Statement (创建语句)** 按钮。

1. 在 **Statement Configuration (语句配置)** 窗口中，根据您希望共享应用程序的方式填写各个字段。
**注意**  
如果您与组织共享，则只能指定您的 Amazon 账户所属的组织。如果您尝试指定一个您不是其成员的 Amazon 组织，则会出现错误。  
要与您的 Amazon 组织共享您的申请，您必须确认该`UnshareApplication`操作将添加到您的政策声明中，以防将来需要撤销共享。

1. 选择**保存**按钮。

**选项 2：与所有人公开共享您的应用程序**

1. 打开 [Amazon Serverless Application Repository 控制台](https://console.amazonaws.cn/serverlessrepo/home)。

1. 在导航窗格上，选择 **Published Applications (已发布的应用程序)**，以显示您已创建的应用程序的列表。

1. 选择要共享的应用程序。

1. 选择 **Sharing (共享)** 选项卡。

1. 在 **Public Sharing (公开共享)** 部分，选择 **Edit (编辑)** 按钮。

1. 在 **Public sharing (公开共享)** 下，选择 **Enabled (已启用)** 单选按钮。

1. 在文本框中键入应用程序的名称，然后选择 **Save (保存)** 按钮。

**注意**  
要公开共享应用程序，它必须同时设置了 `SemanticVersion` 和 `LicenseUrl` 属性。

### 通过共享应用程序 Amazon CLI
<a name="share-application-cli"></a>

要使用共享应用程序， Amazon CLI 您可以使用`[put-application-policy](https://docs.amazonaws.cn/cli/latest/reference/serverlessrepo/put-application-policy.html)`命令授予权限，指定要与之共享的 Amazon 账户作为委托人。

有关使用 Amazon CLI 共享应用程序的更多信息，请参阅[Amazon Serverless Application Repository 应用程序策略示例](security_iam_resource-based-policy-examples.md)。

## 取消共享应用程序
<a name="unshare-applications"></a>

取消与 Amazon 组织共享应用程序的选项有两种：

1. 应用程序的发布者可以使用 `[put-application-policy](https://docs.amazonaws.cn/cli/latest/reference/serverlessrepo/put-application-policy.html)` 命令删除权限。

1. 来自组织*管理账户*的用户可以对与该 Amazon 组织[共享的任何应用程序执行取消](https://docs.amazonaws.cn/serverlessrepo/latest/devguide/applications-applicationid-unshare.html)共享应用程序操作，即使该应用程序是由其他账户的用户发布的。
**注意**  
当通过 “取消共享应用程序” 操作取消与 Amazon 组织共享应用程序时，该应用程序将无法再次与 Amazon 组织共享。

   有关的更多信息 Amazon Organizations，请参阅《*[Amazon Organizations 用户指南》](https://docs.amazonaws.cn/organizations/latest/userguide/)*。

### 发布者删除权限
<a name="unshare-applications-publisher"></a>

#### 发布者通过控制台删除权限
<a name="unshare-application-publisher-console"></a>

要通过取消共享应用程序 Amazon Web Services 管理控制台，请删除与其他 Amazon 账户共享该应用程序的政策声明。为此，请按照以下步骤操作：

1. 打开 [Amazon Serverless Application Repository 控制台](https://console.amazonaws.cn/serverlessrepo/home)。

1. 在左侧导航窗格中，选择 **Available Applications (可用的应用程序)**。

1. 选择要取消共享的应用程序。

1. 选择 **Sharing (共享)** 选项卡。

1. 在 **Application policy statements (应用程序策略语句)** 部分中，选择与要取消共享的账户共享应用程序的策略语句。

1. 选择**删除**。

1. 此时会显示确认消息。再次选择**删除**。

#### 发布者通过删除权限 Amazon CLI
<a name="unshare-application-publisher-cli"></a>

要通过取消共享应用程序 Amazon CLI，发布者可以使用`[put-application-policy](https://docs.amazonaws.cn/cli/latest/reference/serverlessrepo/put-application-policy.html)`命令移除或以其他方式更改权限，将该应用程序设为私有，或者与其他 Amazon 账户组共享。

有关使用 Amazon CLI 更改权限的更多信息，请参阅[Amazon Serverless Application Repository 应用程序策略示例](security_iam_resource-based-policy-examples.md)。

### 管理账号取消共享应用程序
<a name="unshare-applications-management"></a>

#### 管理账号通过控制台取消与 Amazon 组织共享的应用程序
<a name="unshare-application-management-console"></a>

要通过取消共享 Amazon 组织中的应用程序 Amazon Web Services 管理控制台，*管理账户*中的用户可以执行以下操作：

1. 打开 [Amazon Serverless Application Repository 控制台](https://console.amazonaws.cn/serverlessrepo/home)。

1. 在左侧导航窗格中，选择 **Available Applications (可用的应用程序)**。

1. 在应用程序的磁贴中，选择 **Unshare (取消共享)**。

1. 在取消共享消息框中，通过输入组织 ID 和应用程序名称，然后选择 **Save (保存)**，以确认您要取消共享应用程序。

#### 管理账户取消与 Amazon 组织共享应用程序的权限 Amazon CLI
<a name="unshare-application-management-cli"></a>

要取消与 Amazon 组织的共享应用程序，*管理账户*中的用户可以运行该`aws serverlessrepo unshare-application`命令。

以下命令从 Amazon 组织取消共享应用程序，其中*application-id*是应用程序的 Amazon 资源名称 (ARN)*organization-id*，也是 Amazon 组织 ID：

```
1. aws serverlessrepo unshare-application --application-id application-id --organization-id organization-id
```

## 删除应用程序
<a name="deleting-applications"></a>

您可以使用 Amazon Web Services 管理控制台 或 Amazon SAM CLI 从中删除应用程序。 Amazon Serverless Application Repository 

### 删除应用程序（控制台）
<a name="deleting-application-through-aws-console"></a>

要通过删除已发布的应用程序 Amazon Web Services 管理控制台，请执行以下操作。

1. 打开 [Amazon Serverless Application Repository 控制台](https://console.amazonaws.cn/serverlessrepo/home)。

1. 对于 **My Applications (我的应用程序)**，请选择要删除的应用程序。

1. 在应用程序的详细信息页面中，选择 **Delete application (删除应用程序)**。

1. 选择 **Delete application (删除应用程序)** 来完成删除。

### 删除应用程序 (Amazon CLI)
<a name="deleting-application-through-cli"></a>

要使用删除已发布的应用程序 Amazon CLI，请运行`[aws serverlessrepo delete-application](https://docs.amazonaws.cn/cli/latest/reference/serverlessrepo/delete-application.html)`命令。

以下命令删除应用程序，其中 `application-id` 是应用程序的 Amazon 资源名称 (ARN)：

```
1. aws serverlessrepo delete-application --application-id application-id
```