

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 發佈您的應用程式 AWS SAM CLI
<a name="serverless-sam-template-publishing-applications"></a>

若要讓您的 AWS SAM 應用程式可供其他人尋找和部署，您可以使用 AWS SAM CLI 將其發佈到 AWS Serverless Application Repository。若要使用 發佈應用程式 AWS SAM CLI，您必須使用 AWS SAM 範本加以定義。您也必須在本機或在 雲端中 AWS 進行測試。

請按照本主題中的指示建立新的應用程式、建立新的現有應用程式版本，或更新現有應用程式的中繼資料。（您執行的動作取決於應用程式是否已存在於 中 AWS Serverless Application Repository，以及是否有任何應用程式中繼資料正在變更。) 如需應用程式中繼資料的詳細資訊，請參閱 [AWS SAM 範本中繼資料區段屬性](serverless-sam-template-publishing-applications-metadata-properties.md)。

## 先決條件
<a name="serverless-sam-template-publishing-applications-prerequisites"></a>

 AWS Serverless Application Repository 使用 將應用程式發佈至 之前 AWS SAM CLI，您必須具有下列項目：
+ 已安裝 AWS SAM CLI。如需詳細資訊，請參閱[安裝 AWS SAM CLI](install-sam-cli.md)。若要判斷是否已安裝 AWS SAM CLI，請執行下列命令：

  ```
  sam --version
  ```
+ 有效的 AWS SAM 範本。
+ 範本 AWS SAM 參考的應用程式程式碼和相依性。
+ 語意版本，只需要公開共用您的應用程式。此值可以簡單到 1.0。
+ 指向應用程式原始碼的 URL。
+ `README.md` 檔案。此檔案應描述客戶如何使用您的應用程式，以及如何在將應用程式部署到自己的 AWS 帳戶中之前進行設定。
+ `LICENSE.txt` 檔案，只需要公開共用您的應用程式。
+ 如果您的應用程式包含任何巢狀應用程式，您必須已將其發佈至 AWS Serverless Application Repository。
+ 有效的 Amazon Simple Storage Service (Amazon S3) 儲存貯體政策，可針對您在封裝應用程式時上傳至 Amazon S3 的成品授予服務讀取許可。若要設定此政策，請執行下列動作：

  1. 開啟位於 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) 的 Amazon S3 主控台。

  1. 選擇您用來封裝應用程式的 Amazon S3 儲存貯體名稱。

  1. 選擇**許可**。

  1. 在 **Permissions** (許可) 索引標籤上，**Bucket policy** (儲存貯體政策) 下，選擇 **Edit** (編輯)。

  1. 在**編輯儲存貯體政策**頁面上，將下列政策陳述式貼入**政策**編輯器。在政策陳述式中，請務必在 `Resource`元素中使用儲存貯體名稱，並在 `Condition`元素中使用您的帳戶 AWS ID。`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:::<your-bucket-name>/*",
                 "Condition" : {
                     "StringEquals": {
                         "aws:SourceAccount": "123456789012"
                     }
                 }
             }
         ]
     }
     ```

------

  1. 選擇**儲存變更**。

## 發佈新的應用程式
<a name="serverless-sam-template-publishing-applications-new-app"></a>

### 步驟 1：將`Metadata`區段新增至 AWS SAM 範本
<a name="serverless-sam-template-publishing-applications-step1"></a>

首先，將`Metadata`區段新增至您的 AWS SAM 範本。提供要發佈至 的應用程式資訊 AWS 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
        ...
```

如需 AWS SAM 範本 `Metadata`區段的詳細資訊，請參閱 [AWS SAM 範本中繼資料區段屬性](serverless-sam-template-publishing-applications-metadata-properties.md)。

### 步驟 2：封裝應用程式
<a name="serverless-sam-template-publishing-applications-step2"></a>

執行下列 AWS SAM CLI命令，將應用程式的成品上傳至 Amazon S3，並輸出名為 的新範本檔案`packaged.yaml`：

```
sam package --output-template-file packaged.yaml --s3-bucket <your-bucket-name>
```

您可以在下一個步驟中使用`packaged.yaml`範本檔案，將應用程式發佈到 AWS Serverless Application Repository。此檔案類似於原始範本檔案 (`template.yaml`)，但具有關鍵差異：`CodeUri`、 `LicenseUrl`和 `ReadmeUrl` 屬性指向 Amazon S3 儲存貯體和包含個別成品的物件。

`packaged.yaml` 範例範本檔案的下列程式碼片段會顯示 `CodeUri` 屬性：

```
MySampleFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: s3://bucketname/fbd77a3647a4f47a352fcObjectGUID

...
```

### 步驟 3：發佈應用程式
<a name="serverless-sam-template-publishing-applications-step3"></a>

若要將 AWS SAM 應用程式的私有版本發佈至 AWS Serverless Application Repository，請執行下列 AWS SAM CLI命令：

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

`sam publish` 命令的輸出包含您應用程式在 上的連結 AWS Serverless Application Repository。您也可以直接前往[AWS Serverless Application Repository 登陸頁面](https://serverlessrepo.aws.amazon.com/applications)並搜尋您的應用程式。

### 步驟 4：共用應用程式 （選用）
<a name="serverless-sam-template-publishing-applications-step4"></a>

根據預設，您的應用程式會設為私有，因此其他 AWS 帳戶看不到。若要與他人共用您的應用程式，您必須將其設為公開，或授予特定 AWS 帳戶清單的許可。

如需有關使用 共用應用程式的資訊 AWS CLI，請參閱《 *AWS Serverless Application Repository 開發人員指南*》中的以[AWS Serverless Application Repository 資源為基礎的政策範例](https://docs.aws.amazon.com/serverlessrepo/latest/devguide/security_iam_resource-based-policy-examples.html)。如需使用 共用應用程式的資訊 AWS 管理主控台，請參閱《 *AWS Serverless Application Repository 開發人員指南*》中的[共用應用程式](https://docs.aws.amazon.com/serverlessrepo/latest/devguide/serverlessrepo-how-to-publish.html#share-application)。

## 發佈現有應用程式的新版本
<a name="serverless-sam-template-publishing-applications-new-version"></a>

將應用程式發佈至 之後 AWS Serverless Application Repository，您可能會想要發佈新版本的應用程式。例如，您可能已變更 Lambda 函數程式碼，或將新元件新增至應用程式架構。

若要更新您先前發佈的應用程式，請使用先前詳述的相同程序再次發佈應用程式。在範本檔案的 AWS SAM `Metadata`區段中，提供與最初發佈時相同的應用程式名稱，但包含新的`SemanticVersion`值。

例如，請考慮使用 的名稱`SampleApp`和 `SemanticVersion`發佈的應用程式`1.0.0`。若要更新該應用程式， AWS SAM 範本必須具有應用程式名稱`SampleApp`和 `SemanticVersion` `1.0.1`（或 以外的任何項目`1.0.0`)。

## 其他主題
<a name="serverless-sam-template-publishing-applications-additional-topics"></a>
+ [AWS SAM 範本中繼資料區段屬性](serverless-sam-template-publishing-applications-metadata-properties.md)