

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

# 发布应用程序
<a name="serverlessrepo-publishing-applications"></a>

当您将无服务器应用程序发布到时 AWS Serverless Application Repository，您可以将其提供给其他人查找和部署。

您首先使用 *AWS Serverless Application Model (AWS SAM) 模板*定义您的应用程序。定义应用程序时，必须考虑是否要求应用程序的使用者确认应用程序的功能。有关使用 AWS SAM 和确认权能的更多信息，请参阅[AWS SAM 搭配使用 AWS Serverless Application Repository](using-aws-sam.md)。

您可以使用 AWS 管理控制台、 AWS SAM 命令行界面 (AWS SAM CLI) 或 AWS SDK 发布无服务器应用程序。要了解有关向发布应用程序的过程的更多信息 AWS Serverless Application Repository，请参阅[如何发布应用程序](serverlessrepo-how-to-publish.md)。

当你发布应用程序时，它最初设置为*私*有，这意味着只有创建它的 AWS 账户才能使用它。要与他人共享您的应用程序，您必须将其设置为*私下共享*（仅与一组特定的 AWS 账户共享）或*公开共享*（与所有人共享）。

当您将应用程序发布到 AWS Serverless Application Repository 并将其设置为公共时，该服务将向所有区域的消费者提供该应用程序。当消费者将公共应用程序部署到除首次发布该应用程序的区域之外的区域时，该用户会将该应用程序的部署项目 AWS Serverless Application Repository 复制到目标区域的 Amazon S3 存储桶中。它会更新 AWS SAM 模板中使用这些项目的所有资源，以改为引用目标区域的 Amazon S3 存储桶中的文件。部署工件可以包括 Lambda 函数代码、API 定义文件等。

**注意**  
*私*有和*私有共享*的应用程序仅在创建它们 AWS 所在的地区可用。所有 AWS 地区都提供@@ *公开共享*的应用程序。要了解有关共享应用程序的更多信息，请参阅[AWS Serverless Application Repository 应用程序策略示例](security_iam_resource-based-policy-examples.md)。

**Topics**
+ [AWS SAM 搭配使用 AWS Serverless Application Repository](using-aws-sam.md)
+ [如何发布应用程序](serverlessrepo-how-to-publish.md)
+ [经过验证的作者徽章](serverlessrepo-verified-author.md)
+ [共享 Lambda 图层](sharing-lambda-layers.md)

# AWS SAM 搭配使用 AWS Serverless Application Repository
<a name="using-aws-sam"></a>

 AWS Serverless Application Model (AWS SAM) 是一个开源框架，可用于在其上 AWS构建[无服务器应用程序](https://aws.amazon.com/serverless/)。有关使用构建无服务器应用程序 AWS SAM 的更多信息，请参阅《[https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/)。

在构建将发布到的应用程序时 AWS Serverless Application Repository，必须考虑一组可用的受支持 AWS 资源和策略模板。以下各节将更详细地介绍这些主题。

## 中支持的 AWS 资源 AWS Serverless Application Repository
<a name="supported-resources-for-serverlessrepo"></a>

 AWS Serverless Application Repository 支持由许多 AWS SAM CloudFormation 资源组成的无服务器应用程序。要查看支持的 AWS 资源的完整列表 AWS Serverless Application Repository，请参阅[支持的 AWS 资源清单](list-supported-resources.md)。

如果您想请求支持以获取其他 AWS 资源，请联系 Suppor [AWS t](https://console.aws.amazon.com/support/home#/)。

**重要**  
如果您的应用程序模板包含以下任一自定义 IAM 角色或资源策略，则默认情况下，您的应用程序不会显示在搜索结果中。另外，客户需要确认应用程序的自定义 IAM 角色或资源策略，然后才能部署应用程序。有关更多信息，请参阅[确认应用程序功能](acknowledging-application-capabilities.md)。  
这适用于的资源列表是：  
**IAM 角色：[AWS::IAM::Group[AWS::IAM::InstanceProfile](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-instanceprofile.html)](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-group.html)**、[AWS::IAM::Policy](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-policy.html)、和[AWS::IAM::Role](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html)。
**资源策略：AWS::Lambda::LayerVersion**[权限](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-layerversionpermission.html)、[AWS::Events::EventBus策略[AWS::Lambda::Permission](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-permission.html)](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-events-eventbuspolicy.html)、[AWS:: iam: Policy、、[AWS::ApplicationAutoScaling::ScalingPolicy[AWS::S3::BucketPolicy](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-policy.html)](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-applicationautoscaling-scalingpolicy.html)、[AWS::SQS::QueuePolicy](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sqs-policy.html)和 AWS::](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-policy.html) SN [S](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sns-policy.html):。TopicPolicy
如果您的应用程序包含[AWS::Serverless::Application](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-template.html#serverless-sam-template-application)资源，则客户需要先确认该应用程序包含**嵌套应用程序**，然后才能部署该应用程序。有关嵌套应用程序的更多信息，请参阅《*AWS Serverless Application Model 开发人员指南》*中的[嵌套应用程序](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-template-nested-applications.html)。有关确认功能的更多信息，请参阅[确认应用程序功能](acknowledging-application-capabilities.md)。

## 策略模板
<a name="policy-templates-for-serverlessrepo"></a>

AWS SAM 为您提供了策略模板列表，用于将 Lambda 函数的权限范围限定为应用程序所使用的资源。使用策略模板不需要额外的客户确认，即可搜索、浏览或部署应用程序。

有关标准 AWS SAM 策略模板的列表，请参阅《*[AWS Serverless Application Model 开发人员指南](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/)*》中的[AWS SAM 策略模板](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-policy-templates.html)。

# 支持的 AWS 资源清单
<a name="list-supported-resources"></a>

这是支持的 AWS 资源的完整列表 AWS Serverless Application Repository。
+ `AWS::AccessAnalyzer::Analyzer`
+ `AWS::AmazonMQ::Broker`
+ `AWS::AmazonMQ::Configuration`
+ `AWS::AmazonMQ::ConfigurationAssociation`
+ `AWS::ApiGateway::Account`
+ `AWS::ApiGateway::ApiKey`
+ `AWS::ApiGateway::Authorizer`
+ `AWS::ApiGateway::BasePathMapping`
+ `AWS::ApiGateway::ClientCertificate`
+ `AWS::ApiGateway::Deployment`
+ `AWS::ApiGateway::DocumentationPart`
+ `AWS::ApiGateway::DocumentationVersion`
+ `AWS::ApiGateway::DomainName`
+ `AWS::ApiGateway::GatewayResponse`
+ `AWS::ApiGateway::Method`
+ `AWS::ApiGateway::Model`
+ `AWS::ApiGateway::RequestValidator`
+ `AWS::ApiGateway::Resource`
+ `AWS::ApiGateway::RestApi`
+ `AWS::ApiGateway::Stage`
+ `AWS::ApiGateway::UsagePlan`
+ `AWS::ApiGateway::UsagePlanKey`
+ `AWS::ApiGateway::VpcLink`
+ `AWS::ApiGatewayV2::Api`
+ `AWS::ApiGatewayV2::ApiMapping`
+ `AWS::ApiGatewayV2::Authorizer`
+ `AWS::ApiGatewayV2::DomainName`
+ `AWS::ApiGatewayV2::Deployment`
+ `AWS::ApiGatewayV2::Integration`
+ `AWS::ApiGatewayV2::IntegrationResponse`
+ `AWS::ApiGatewayV2::Model`
+ `AWS::ApiGatewayV2::Route`
+ `AWS::ApiGatewayV2::RouteResponse`
+ `AWS::ApiGatewayV2::Stage`
+ `AWS::AppSync::ApiKey`
+ `AWS::AppSync::DataSource`
+ `AWS::AppSync::GraphQLApi`
+ `AWS::AppSync::GraphQLSchema`
+ `AWS::AppSync::Resolver`
+ `AWS::ApplicationAutoScaling::AutoScalingGroup`
+ `AWS::ApplicationAutoScaling::LaunchConfiguration`
+ `AWS::ApplicationAutoScaling::ScalableTarget`
+ `AWS::ApplicationAutoScaling::ScalingPolicy`
+ `AWS::Athena::NamedQuery`
+ `AWS::Athena::WorkGroup`
+ `AWS::CertificateManager::Certificate`
+ `AWS::Chatbot::SlackChannelConfiguration`
+ `AWS::CloudFormation::CustomResource`
+ `AWS::CloudFormation::Interface`
+ `AWS::CloudFormation::Macro`
+ `AWS::CloudFormation::WaitConditionHandle`
+ `AWS::CloudFront::CachePolicy`
+ `AWS::CloudFront::CloudFrontOriginAccessIdentity`
+ `AWS::CloudFront::Distribution`
+ `AWS::CloudFront::Function`
+ `AWS::CloudFront::OriginRequestPolicy`
+ `AWS::CloudFront::ResponseHeadersPolicy`
+ `AWS::CloudFront::StreamingDistribution`
+ `AWS::CloudTrail::Trail`
+ `AWS::CloudWatch::Alarm`
+ `AWS::CloudWatch::AnomalyDetector`
+ `AWS::CloudWatch::Dashboard`
+ `AWS::CloudWatch::InsightRule`
+ `AWS::CodeBuild::Project`
+ `AWS::CodeCommit::Repository`
+ `AWS::CodePipeline::CustomActionType`
+ `AWS::CodePipeline::Pipeline`
+ `AWS::CodePipeline::Webhook`
+ `AWS::CodeStar::GitHubRepository`
+ `AWS::CodeStarNotifications::NotificationRule`
+ `AWS::Cognito::IdentityPool`
+ `AWS::Cognito::IdentityPoolRoleAttachment`
+ `AWS::Cognito::UserPool`
+ `AWS::Cognito::UserPoolClient`
+ `AWS::Cognito::UserPoolDomain`
+ `AWS::Cognito::UserPoolGroup`
+ `AWS::Cognito::UserPoolResourceServer`
+ `AWS::Cognito::UserPoolUser`
+ `AWS::Cognito::UserPoolUserToGroupAttachment`
+ `AWS::Config::AggregationAuthorization`
+ `AWS::Config::ConfigRule`
+ `AWS::Config::ConfigurationAggregator`
+ `AWS::Config::ConfigurationRecorder`
+ `AWS::Config::DeliveryChannel`
+ `AWS::Config::RemediationConfiguration`
+ `AWS::DataPipeline::Pipeline`
+ `AWS::DynamoDB::Table`
+ `AWS::EC2::EIP`
+ `AWS::EC2::InternetGateway`
+ `AWS::EC2::NatGateway`
+ `AWS::EC2::Route`
+ `AWS::EC2::RouteTable`
+ `AWS::EC2::SecurityGroup`
+ `AWS::EC2::SecurityGroupEgress`
+ `AWS::EC2::SecurityGroupIngress`
+ `AWS::EC2::Subnet`
+ `AWS::EC2::SubnetRouteTableAssociation`
+ `AWS::EC2::VPC`
+ `AWS::EC2::VPCGatewayAttachment`
+ `AWS::EC2::VPCPeeringConnection`
+ `AWS::ECR::Repository`
+ `AWS::Elasticsearch::Domain`
+ `AWS::Events::EventBus`
+ `AWS::Events::EventBusPolicy`
+ `AWS::Events::Rule`
+ `AWS::EventSchemas::Discoverer`
+ `AWS::EventSchemas::Registry`
+ `AWS::EventSchemas::Schema`
+ `AWS::Glue::Classifier`
+ `AWS::Glue::Connection`
+ `AWS::Glue::Crawler`
+ `AWS::Glue::Database`
+ `AWS::Glue::DevEndpoint`
+ `AWS::Glue::Job`
+ `AWS::Glue::Partition`
+ `AWS::Glue::SecurityConfiguration`
+ `AWS::Glue::Table`
+ `AWS::Glue::Trigger`
+ `AWS::Glue::Workflow`
+ `AWS::IAM::Group`
+ `AWS::IAM::InstanceProfile`
+ `AWS::IAM::ManagedPolicy`
+ `AWS::IAM::OIDCProvider`
+ `AWS::IAM::Policy`
+ `AWS::IAM::Role`
+ `AWS::IAM::ServiceLinkedRole`
+ `AWS::IoT::Certificate`
+ `AWS::IoT::Policy`
+ `AWS::IoT::PolicyPrincipalAttachment`
+ `AWS::IoT::Thing`
+ `AWS::IoT::ThingPrincipalAttachment`
+ `AWS::IoT::TopicRule`
+ `AWS::KMS::Alias`
+ `AWS::KMS::Key`
+ `AWS::Kinesis::Stream`
+ `AWS::Kinesis::StreamConsumer`
+ `AWS::Kinesis::Streams`
+ `AWS::KinesisAnalytics::Application`
+ `AWS::KinesisAnalytics::ApplicationOutput`
+ `AWS::KinesisFirehose::DeliveryStream`
+ `AWS::Lambda::Alias`
+ `AWS::Lambda::EventInvokeConfig`
+ `AWS::Lambda::EventSourceMapping`
+ `AWS::Lambda::Function`
+ `AWS::Lambda::LayerVersion`
+ `AWS::Lambda::LayerVersionPermission`
+ `AWS::Lambda::Permission`
+ `AWS::Lambda::Version`
+ `AWS::Location::GeofenceCollection`
+ `AWS::Location::Map`
+ `AWS::Location::PlaceIndex`
+ `AWS::Location::RouteCalculator`
+ `AWS::Location::Tracker`
+ `AWS::Location::TrackerConsumer`
+ `AWS::Logs::Destination`
+ `AWS::Logs::LogGroup`
+ `AWS::Logs::LogStream`
+ `AWS::Logs::MetricFilter`
+ `AWS::Logs::SubscriptionFilter`
+ `AWS::Route53::HealthCheck`
+ `AWS::Route53::HostedZone`
+ `AWS::Route53::RecordSet`
+ `AWS::Route53::RecordSetGroup`
+ `AWS::S3::Bucket`
+ `AWS::S3::BucketPolicy`
+ `AWS::SNS::Subscription`
+ `AWS::SNS::Topic`
+ `AWS::SNS::TopicPolicy`
+ `AWS::SQS::Queue`
+ `AWS::SQS::QueuePolicy`
+ `AWS::SSM::Association`
+ `AWS::SSM::Document`
+ `AWS::SSM::MaintenanceWindowTask`
+ `AWS::SSM::Parameter`
+ `AWS::SSM::PatchBaseline`
+ `AWS::SSM::ResourceDataSync`
+ `AWS::SecretsManager::ResourcePolicy`
+ `AWS::SecretsManager::RotationSchedule`
+ `AWS::SecretsManager::Secret`
+ `AWS::SecretsManager::SecretTargetAttachment`
+ `AWS::Serverless::Api`
+ `AWS::Serverless::Application`
+ `AWS::Serverless::Function`
+ `AWS::Serverless::HttpApi`
+ `AWS::Serverless::LayerVersion`
+ `AWS::Serverless::SimpleTable`
+ `AWS::Serverless::StateMachine`
+ `AWS::ServiceDiscovery::HttpNamespace`
+ `AWS::ServiceCatalog::CloudFormationProvisionedProduct`
+ `AWS::ServiceDiscovery::Instance`
+ `AWS::ServiceDiscovery::PrivateDnsNamespace`
+ `AWS::ServiceDiscovery::PublicDnsNamespace`
+ `AWS::ServiceDiscovery::Service`
+ `AWS::SES::ReceiptRule`
+ `AWS::SES::ReceiptRuleSet`
+ `AWS::StepFunctions::Activity`
+ `AWS::StepFunctions::StateMachine`
+ `AWS::Wisdom::Assistant`
+ `AWS::Wisdom::AssistantAssociation`
+ `AWS::Wisdom::KnowledgeBase`

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

1. 打开 [AWS Serverless Application Repository 控制台](https://console.aws.amazon.com/serverlessrepo/home)。

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

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

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

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

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

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

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

1. 打开 [AWS Serverless Application Repository 控制台](https://console.aws.amazon.com/serverlessrepo/home)。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

1. 打开 [AWS Serverless Application Repository 控制台](https://console.aws.amazon.com/serverlessrepo/home)。

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

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

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

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

1. 选择**删除**。

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

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

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

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

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

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

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

1. 打开 [AWS Serverless Application Repository 控制台](https://console.aws.amazon.com/serverlessrepo/home)。

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

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

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

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

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

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

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

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

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

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

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

1. 打开 [AWS Serverless Application Repository 控制台](https://console.aws.amazon.com/serverlessrepo/home)。

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

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

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

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

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

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

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

# 发布现有应用程序的新版本
<a name="serverlessrepo-how-to-publish-new-version"></a>

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

## 发布现有应用程序的新版本 (AWS CLI)
<a name="serverlessrepo-how-to-publish-new-version-cli"></a>

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

## 发布现有应用程序的新版本（控制台）
<a name="serverlessrepo-how-to-publish-new-version-console"></a>

要发布以前发布的应用程序的新版本，请按照下列步骤操作：

1. 打开 [AWS Serverless Application Repository 控制台](https://console.aws.amazon.com/serverlessrepo/home)。

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

1. 选择要为其发布新版本的应用程序。

1. 选择 **새 버전 발행**。

1. 在 **Versions (版本)** 中，输入以下应用程序信息：    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/serverlessrepo/latest/devguide/serverlessrepo-how-to-publish-new-version.html)

1. 选择**发布版本**。

# 经过验证的作者徽章
<a name="serverlessrepo-verified-author"></a>

中@@ **经过验证的作者** AWS Serverless Application Repository 是指那些作为合理而 AWS 谨慎的服务提供商，对请求者提供的信息进行了真诚的审查，并确认请求者的身份与所声称的相同。

经过验证的作者的应用程序会显示经过验证的作者徽章以及指向作者公开个人资料的链接。经过验证的作者徽章将显示在搜索结果和应用程序详情页面上。

## 请求经过验证的作者徽章
<a name="serverlessrepo-verified-author-requesting"></a>

你可以通过向 [serverlessrepo-verified-author@amazon .com](mailto:serverlessrepo-verified-author@amazon.com) 发送电子邮件来申请 AWS Serverless Application Repository 被批准为经过验证的作者。您需要提供以下信息：
+ 作者姓名
+ AWS 账号
+ 可公开访问的个人资料链接，例如您的 LinkedIn个人资料 GitHub 或个人资料

提交经过验证的作者徽章的申请后，您将在几天 AWS 内收到回复。在您的请求获得批准之前，可能会要求您提供更多信息。

您的请求获得批准后，可能会在一天内为您的应用程序显示经过验证的作者徽章。

**注意**  
所有与 AWS 账户和作者姓名都匹配的应用程序都会显示经过验证的作者徽章。由于 AWS 帐户可以有多个作者，因此徽章不会显示在具有不同作者姓名的应用程序上。要在具有不同作者姓名的应用程序上显示作者徽章，您必须为该作者提交另一个请求。

# 共享 Lambda 图层
<a name="sharing-lambda-layers"></a>

如果您已在 Lambda 层中实现了功能，则可能需要在不托管该层的全局实例的情况下共享该层。通过以这种方式共享层，其他用户可以将层的实例部署到自己的账户。这样可以防止客户端应用程序依赖于层的全局实例。 AWS Serverless Application Repository 使您能够以这种方式轻松共享 Lambda 层。

有关 Lambda 层的更多信息，请参阅*AWS Lambda 开发者*指南中的[AWS Lambda 层](https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html)。

## 工作方式
<a name="sharing-lambda-layers-how-it-works"></a>

以下是使用 AWS Serverless Application Repository共享层的步骤。这允许在用户的 AWS 账户中创建图层的副本。

1. 使用包含您的层作为资源的 AWS SAM 模板来定义无服务器应用程序，即[https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-layerversion.html](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-layerversion.html)或[https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-layerversion.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-layerversion.html)资源。

1. 将您的应用程序发布到 AWS Serverless Application Repository并共享（公开或私下）。

1. 客户部署了您的应用程序，该应用程序会在自己的 AWS 账户中创建您的图层副本。现在，客户可以在其客户端应用程序中在其 AWS 账户中引用该层的 Amazon 资源名称 (ARN)。

## 示例
<a name="sharing-layers-example"></a>

以下是包含您要共享的 Lambda 层的应用程序的示例 AWS SAM 模板：

```
Resources:
  SharedLayer:
    Type: AWS::Serverless::LayerVersion
    Properties:
      LayerName: shared-layer
      ContentUri: source/layer-code/
      CompatibleRuntimes:
        - python3.7
Outputs:
  LayerArn:
    Value: !Ref SharedLayer
```

当客户从部署您的应用程序时 AWS Serverless Application Repository，将在他们的 AWS 账户中创建一个层。层的 ARN 如下所示：

`arn:aws:lambda:us-east-1:012345678901:layer:shared-layer:1`

客户现在可以在自己的客户端应用程序中引用此 ARN，如下例所示：

```
Resources:
  MyFunction:
    Type: AWS::Serverless::Function
    Properties:
      Handler: index.handler
      Runtime: python3.7
      CodeUrl: source/app-code/
      Layers:
        - arn:aws:lambda:us-east-1:012345678901:layer:shared-layer:1
```