

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 애플리케이션 게시
<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 Management Console, AWS SAM 명령줄 인터페이스(AWS SAM CLI) 또는 AWS SDK를 사용하여 서버리스 애플리케이션을 게시할 수 있습니다. 에 애플리케이션을 게시하는 절차에 대한 자세한 내용은 섹션을 AWS Serverless Application Repository참조하세요[애플리케이션을 게시하는 방법](serverlessrepo-how-to-publish.md).

애플리케이션을 게시하면 처음에*는 프라이빗*으로 설정됩니다. 즉, 애플리케이션을 생성한 AWS 계정에서만 애플리케이션을 사용할 수 있습니다. 애플리케이션을 다른 사용자와 공유하려면 *애플리케이션을 비공개로 공유*(특정 AWS 계정 집합과만 공유)하거나 *공개적으로 공유*(모든 사용자와 공유)하도록 설정해야 합니다.

애플리케이션을에 게시 AWS Serverless Application Repository 하고 퍼블릭으로 설정하면 서비스는 모든 리전의 소비자가 애플리케이션을 사용할 수 있도록 합니다. 소비자가 애플리케이션이 처음 게시된 리전 이외의 리전에 퍼블릭 애플리케이션을 배포하면는 애플리케이션의 배포 아티팩트를 대상 리전의 Amazon S3 버킷에 AWS Serverless Application Repository 복사합니다. 대신 대상 리전의 Amazon S3 버킷에 있는 파일을 참조하도록 해당 아티팩트를 사용하는 AWS SAM 템플릿의 모든 리소스를 업데이트합니다. 배포 아티팩트에는 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)는에서 [서버리스 애플리케이션을](https://aws.amazon.com/serverless/) 빌드하는 데 사용할 수 있는 오픈 소스 프레임워크입니다 AWS. 를 사용하여 서버리스 애플리케이션을 빌드 AWS SAM 하는 방법에 대한 자세한 내용은 [https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/)를 참조하세요.

에 게시될 애플리케이션을 빌드할 때는 사용할 수 있는 지원되는 AWS 리소스 및 정책 템플릿 세트를 고려해야 AWS Serverless Application Repository합니다. 아래 단원에서 이러한 주제에 대해 자세히 설명합니다.

## 에서 지원되는 AWS 리소스 AWS Serverless Application Repository
<a name="supported-resources-for-serverlessrepo"></a>

는 많은 AWS SAM 및 CloudFormation 리소스로 구성된 서버리스 애플리케이션을 AWS Serverless Application Repository 지원합니다. 에서 지원하는 AWS 리소스의 전체 목록을 보려면 섹션을 AWS Serverless Application Repository참조하세요[지원되는 AWS 리소스 목록](list-supported-resources.md).

추가 AWS 리소스에 대한 지원을 요청하려면 [AWS Support](https://console.aws.amazon.com/support/home#/)에 문의하세요.

**중요**  
애플리케이션 템플릿에 다음 사용자 지정 IAM 역할이나 리소스 정책 중 하나가 포함되어 있을 경우 기본적으로는 검색 결과에 표시되지 않습니다. 또한 고객은 애플리케이션의 사용자 지정 IAM 역할이나 리소스 정책을 승인해야 애플리케이션을 배포할 수 있습니다. 자세한 정보는 [애플리케이션 기능 승인](acknowledging-application-capabilities.md)을 참조하십시오.  
이것이 적용되는 리소스 목록은 다음과 같습니다.  
**IAM 역할: **[AWS::IAM::Group](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-group.html), [AWS::IAM::InstanceProfile](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-instanceprofile.html), [AWS::IAM::Policy](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-policy.html), and [AWS::IAM::Role](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html).
**리소스 정책: ** [AWS::Lambda::LayerVersionPermission](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-layerversionpermission.html), [AWS::Lambda::Permission](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-permission.html), [AWS::Events::EventBusPolicy](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-events-eventbuspolicy.html), [AWS::IAM:Policy](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-policy.html), [AWS::ApplicationAutoScaling::ScalingPolicy](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-applicationautoscaling-scalingpolicy.html), [AWS::S3::BucketPolicy](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-policy.html), [AWS::SQS::QueuePolicy](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sqs-policy.html), and [AWS::SNS:TopicPolicy](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sns-policy.html).
애플리케이션에 [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 Management Console. 또한 다른 사용자가 배포할 수 있도록 응용 프로그램을 공유하고 AWS Serverless Application Repository에서 애플리케이션을 삭제하는 방법을 보여 줍니다.

**중요**  
애플리케이션을 게시할 때 입력하는 정보는 암호화되지 않습니다. 이 정보에는 작성자 이름과 같은 데이터가 포함됩니다. 저장 또는 공개를 원치 않는 개인 식별 정보가 있는 경우 애플리케이션을 게시할 때 이 정보를 입력하지 않는 것이 좋습니다.

## 애플리케이션 게시(AWS CLI)
<a name="publishing-application-through-cli"></a>

에 애플리케이션을 게시하는 가장 쉬운 방법은 AWS SAM CLI 명령 세트를 사용하는 AWS Serverless Application Repository 것입니다. 자세한 내용은 *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 Management Console 에 새 애플리케이션을 게시하는 방법을 보여줍니다 AWS Serverless Application Repository. 기존 애플리케이션의 새 버전을 게시하는 지침은 [기존 애플리케이션의 새 버전 게시](serverlessrepo-how-to-publish-new-version.md) 단원을 참조하십시오.

### 사전 조건
<a name="publishing-application-prerequisites"></a>

에 애플리케이션을 게시하기 전에 다음이 AWS Serverless Application Repository필요합니다.
+ 유효한 AWS 계정입니다.
+ 사용되는 AWS 리소스를 정의하는 valid 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).
+ 에 대한 `package` 명령을 사용하여 AWS CloudFormation 생성한 애플리케이션의 패키지입니다 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. [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)에서 S3 콘솔을 엽니다.

  1. 애플리케이션을 패키징하는 데 사용한 Amazon S3 버킷을 선택합니다.

  1. **권한** 탭을 선택합니다.

  1. **버킷 정책** 버튼을 선택합니다.

  1. 다음 정책 문을 **버킷 정책 편집기**에 붙여 넣습니다. 요소의 버킷 이름과 `Resource` 요소의 AWS 계정 ID를 대체해야 합니다`Condition`. `Condition` 요소의 표현식은가 지정된 AWS 계정의 애플리케이션에 액세스할 수 있는 권한 AWS Serverless Application Repository 만 갖도록 합니다. 요소에 대한 자세한 내용은 *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/ko_kr/serverlessrepo/latest/devguide/serverlessrepo-how-to-publish.html)

## 애플리케이션 공유
<a name="share-application"></a>

게시된 애플리케이션에 다음 세 범주 중 하나의 사용 권한을 설정할 수 있습니다.
+ **프라이빗(기본값)** - 동일한 계정으로 생성되었으며 다른 AWS 계정과 공유되지 않은 애플리케이션입니다. AWS 계정을 공유하는 소비자만 프라이빗 애플리케이션을 배포할 수 있는 권한이 있습니다.
+ **비공개 공유** - 게시자가 특정 AWS 계정 집합 또는 AWS 조직의 AWS 계정과 명시적으로 공유한 애플리케이션입니다. 소비자는 AWS 계정 또는 AWS 조직과 공유된 애플리케이션을 배포할 수 있는 권한이 있습니다. 에 대한 자세한 내용은 *[AWS Organizations 사용 설명서를](https://docs.aws.amazon.com/organizations/latest/userguide/)* AWS Organizations참조하세요.
+ **공개 공유** - 게시자가 모든 사람과 공유한 애플리케이션입니다. 모든 소비자는 공개적 공유 애플리케이션을 배포할 수 있는 권한이 있습니다.

애플리케이션을에 게시한 후 AWS Serverless Application Repository기본적으로 **프라이빗**으로 설정됩니다. 이 섹션에서는 애플리케이션을 특정 AWS 계정 또는 AWS 조직과 비공개로 공유하거나 모든 사람과 공개적으로 공유하는 방법을 보여줍니다.

### 콘솔을 통해 애플리케이션 공유
<a name="share-application-console"></a>

애플리케이션을 다른 사용자와 공유할 수 있는 두 가지 옵션이 있습니다. 1) 특정 AWS 계정 또는 AWS 조직 내 AWS 계정과 공유하거나 2) 모든 사용자와 공개적으로 공유합니다. 에 대한 자세한 내용은 *[AWS Organizations 사용 설명서를](https://docs.aws.amazon.com/organizations/latest/userguide/)* AWS Organizations참조하세요.

**옵션 1: 특정 AWS 계정(들) 또는 AWS 조직 내 계정과 애플리케이션을 공유하는 방법**

1. [AWS Serverless Application Repository 콘솔](https://console.aws.amazon.com/serverlessrepo/home)을 엽니다.

1. 탐색 창에서 **Published Applications(게시된 애플리케이션)**를 선택하면 생성한 애플리케이션 목록이 표시됩니다.

1. 공유하고자 하는 애플리케이션을 선택합니다.

1. **공유** 탭을 선택합니다.

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. **공유** 탭을 선택합니다.

1. **Public Sharing(공개 공유)** 섹션에서 **편집** 버튼을 선택합니다.

1. **Public Sharing(공개 공유)** 에서 **사용** 라디오 버튼을 선택합니다.

1. 텍스트 상자에 애플리케이션의 이름을 입력한 다음 **저장** 버튼을 선택합니다.

**참고**  
애플리케이션을 공개적으로 공유하려면 `SemanticVersion` 및 `LicenseUrl` 속성이 둘 다 설정되어 있어야 합니다.

### 를 통해 애플리케이션 공유 AWS CLI
<a name="share-application-cli"></a>

를 사용하여 애플리케이션을 공유하려면 `[put-application-policy](https://docs.aws.amazon.com/cli/latest/reference/serverlessrepo/put-application-policy.html)` 명령을 사용하여 공유하려는 AWS 계정(들)을 보안 주체로 지정하는 권한을 AWS CLI 부여합니다.

 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 Organization과 다시 공유할 수 없습니다.

   에 대한 자세한 내용은 *[AWS Organizations 사용 설명서를](https://docs.aws.amazon.com/organizations/latest/userguide/)* AWS Organizations참조하세요.

### 게시자가 권한 제거
<a name="unshare-applications-publisher"></a>

#### 콘솔을 통해 게시자가 권한 제거
<a name="unshare-application-publisher-console"></a>

를 통해 애플리케이션을 공유 해제하려면 다른 AWS 계정과 공유하는 정책 설명을 AWS Management Console제거합니다. 이렇게 하려면 다음 단계를 따릅니다.

1. [AWS Serverless Application Repository 콘솔](https://console.aws.amazon.com/serverlessrepo/home)을 엽니다.

1. 왼쪽 탐색 창에서 **Available Applications(사용 가능한 애플리케이션)**를 선택합니다.

1. 공유 해제할 애플리케이션을 선택합니다.

1. **공유** 탭을 선택합니다.

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 Management Console사용자가 다음을 수행할 수 있습니다.

1. [AWS Serverless Application Repository 콘솔](https://console.aws.amazon.com/serverlessrepo/home)을 엽니다.

1. 왼쪽 탐색 창에서 **Available Applications(사용 가능한 애플리케이션)**를 선택합니다.

1. 애플리케이션 타일에서 **Unshare(공유 해제)**를 선택합니다.

1. 공유 해제 메시지 상자에서 조직 ID와 애플리케이션 이름을 입력한 다음 **저장**을 선택하여 애플리케이션의 공유 해제를 확인합니다.

#### 를 통해 AWS 조직에서 애플리케이션 공유 해제 관리 계정 AWS CLI
<a name="unshare-application-management-cli"></a>

 AWS 조직에서 애플리케이션을 공유 해제하려면 *관리 계정*의 사용자가 `aws serverlessrepo unshare-application` 명령을 실행할 수 있습니다.

다음 명령은 AWS Organization에서 애플리케이션을 공유 해제합니다. 여기서 *application-id*는 애플리케이션의 Amazon 리소스 이름(ARN)이고 *organization-id*는 AWS Organization ID입니다.

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

## 애플리케이션 삭제
<a name="deleting-applications"></a>

 AWS Management Console 또는 CLI를 AWS Serverless Application Repository 사용하여에서 애플리케이션을 삭제할 수 있습니다 AWS SAM .

### 애플리케이션 삭제(콘솔)
<a name="deleting-application-through-aws-console"></a>

를 통해 게시된 애플리케이션을 삭제하려면 다음을 AWS Management Console수행합니다.

1. [AWS Serverless Application Repository 콘솔](https://console.aws.amazon.com/serverlessrepo/home)을 엽니다.

1. **내 애플리케이션**에서 삭제하고자 하는 애플리케이션을 선택합니다.

1. 애플리케이션의 세부 정보 페이지에서 **애플리케이션 삭제**를 선택합니다.

1. **애플리케이션 삭제**를 선택하여 삭제를 완료합니다.

### 애플리케이션 삭제(AWS CLI)
<a name="deleting-application-through-cli"></a>

를 사용하여 게시된 애플리케이션을 삭제하려면 `[aws serverlessrepo delete-application](https://docs.aws.amazon.com/cli/latest/reference/serverlessrepo/delete-application.html)` 명령을 AWS CLI실행합니다.

다음 명령은 애플리케이션을 삭제합니다. 여기서 `application-id`는 애플리케이션의 ARN(Amazon 리소스 이름)입니다.

```
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 Management Console. 새 애플리케이션을 게시하는 지침은 [애플리케이션을 게시하는 방법](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/ko_kr/serverlessrepo/latest/devguide/serverlessrepo-how-to-publish-new-version.html)

1. **Publish version(버전 게시)**을 선택합니다.

# 검증된 작성자 배지
<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 계정 ID
+ GitHub 또는 LinkedIn 프로필과 같은 공개적으로 액세스 가능한 프로필 링크

확인된 작성자 배지에 대한 요청을 제출한 후 며칠 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 계정에 AWS Serverless Application Repository계층이 생성됩니다. 계층의 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
```