

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

# 在 中使用巢狀應用程式重複使用程式碼和資源 AWS SAM
<a name="serverless-sam-template-nested-applications"></a>

無伺服器應用程式可以包含一或多個**巢狀應用程式**。巢狀應用程式是較大應用程式的一部分，可以封裝和部署為獨立成品或較大應用程式的元件。巢狀應用程式可讓您將常用程式碼轉換為自己的應用程式，然後可在較大的無伺服器應用程式或多個無伺服器應用程式間重複使用。

隨著無伺服器架構的成長，常見模式通常會出現，其中在多個應用程式範本中定義相同的元件。巢狀應用程式可讓您在個別 AWS SAM 範本中重複使用常見程式碼、功能、資源和組態，只允許您從單一來源維護程式碼。這可減少重複的程式碼和組態。此外，此模組化方法可簡化開發、增強程式碼組織，並促進無伺服器應用程式的一致性。透過巢狀應用程式，您可以更專注於應用程式獨有的商業邏輯。

若要在無伺服器應用程式中定義巢狀應用程式，請使用 [AWS::Serverless::Application](sam-resource-application.md) 資源類型。

您可以從下列兩個來源定義巢狀應用程式：
+ **AWS Serverless Application Repository 應用程式** – 您可以使用 中可供您帳戶使用的應用程式來定義巢狀應用程式 AWS Serverless Application Repository。這些可以是您帳戶中的*私有*應用程式、與您的帳戶*私有共用*的應用程式，或在 中*公開共用*的應用程式 AWS Serverless Application Repository。如需不同部署許可層級的詳細資訊，請參閱《 *AWS Serverless Application Repository 開發人員指南*》中的[應用程式部署許可](https://docs.aws.amazon.com/serverlessrepo/latest/devguide/serverless-app-consuming-applications.html#application-deployment-permissions)和[發佈應用程式](https://docs.aws.amazon.com/serverlessrepo/latest/devguide/serverless-app-publishing-applications.html)。
+ **本機應用程式** – 您可以使用儲存在本機檔案系統上的應用程式來定義巢狀應用程式。

如需如何使用 在無伺服器應用程式中定義這兩種巢狀應用程式的詳細資訊 AWS SAM ，請參閱下列各節。

**注意**  
可在無伺服器應用程式中巢狀化的應用程式數量上限為 200。  
巢狀應用程式可以擁有的參數數目上限為 60 個。

## 從 定義巢狀應用程式 AWS Serverless Application Repository
<a name="serverless-sam-template-nested-applications-how-to-serverlessrepo"></a>

您可以使用 中提供的應用程式來定義巢狀應用程式 AWS Serverless Application Repository。您也可以使用 存放和分發包含巢狀應用程式的應用程式 AWS Serverless Application Repository。若要檢閱 中巢狀應用程式的詳細資訊 AWS Serverless Application Repository，您可以使用 AWS SDK AWS CLI、 或 Lambda 主控台。

若要在無伺服器應用程式 AWS SAM 範本的 AWS Serverless Application Repository 中定義託管的應用程式，請使用每個 AWS Serverless Application Repository 應用程式詳細資訊頁面上的**複製為 SAM 資源**按鈕。若要這麼做，請依照下列步驟進行：

1. 請確定您已登入 AWS 管理主控台。

1.  AWS Serverless Application Repository 使用《 *AWS Serverless Application Repository 開發人員指南*》的[瀏覽、搜尋和部署應用程式](https://docs.aws.amazon.com/serverlessrepo/latest/devguide/serverless-app-consuming-applications.html#browse-and-search-applications                         )一節中的步驟，尋找您要在 中巢狀的應用程式。

1. 選擇**複製為 SAM 資源**按鈕。您正在檢視之應用程式的 SAM 範本區段現在位於剪貼簿中。

1. 將 SAM 範本區段貼到您要在此應用程式中巢狀化之應用程式的 SAM 範本檔案`Resources:`區段。

以下是 中託管之巢狀應用程式的 SAM 範本範例區段 AWS Serverless Application Repository：

```
Transform: AWS::Serverless-2016-10-31

Resources:
  applicationaliasname:
    Type: AWS::Serverless::Application
    Properties:
      Location:
        ApplicationId: arn:aws:serverlessrepo:us-east-1:123456789012:applications/application-alias-name
        SemanticVersion: 1.0.0
      Parameters:
        # Optional parameter that can have default value overridden
        # ParameterName1: 15 # Uncomment to override default value
        # Required parameter that needs value to be provided
        ParameterName2: YOUR_VALUE
```

如果沒有必要的參數設定，您可以省略範本的 `Parameters:`區段。

**重要**  
包含託管在 中的巢狀應用程式的應用程式會 AWS Serverless Application Repository 繼承巢狀應用程式的共用限制。  
例如，假設應用程式是公開共用的，但它包含的巢狀應用程式僅與建立父應用程式 AWS 的帳戶私下共用。在此情況下，如果 AWS 您的帳戶沒有部署巢狀應用程式的許可，您就無法部署父應用程式。如需部署應用程式許可的詳細資訊，請參閱《 *AWS Serverless Application Repository 開發人員指南*》中的[應用程式部署許可](https://docs.aws.amazon.com/serverlessrepo/latest/devguide/serverless-app-consuming-applications.html#application-deployment-permissions)和[發佈應用程式](https://docs.aws.amazon.com/serverlessrepo/latest/devguide/serverless-app-publishing-applications.html)。

## 從本機檔案系統定義巢狀應用程式
<a name="serverless-sam-template-nested-applications-how-to-local-app"></a>

您可以使用儲存在本機檔案系統上的應用程式來定義巢狀應用程式。您可以透過指定儲存在本機檔案系統的 AWS SAM 範本檔案路徑來執行此操作。

以下是巢狀本機應用程式的範例 SAM 範本區段：

```
Transform: AWS::Serverless-2016-10-31

Resources:
  applicationaliasname:
    Type: AWS::Serverless::Application
    Properties:
      Location: ../my-other-app/template.yaml
      Parameters:
        # Optional parameter that can have default value overridden
        # ParameterName1: 15 # Uncomment to override default value
        # Required parameter that needs value to be provided
        ParameterName2: YOUR_VALUE
```

如果沒有參數設定，您可以省略範本的 `Parameters:`區段。

## 部署巢狀應用程式
<a name="serverless-sam-templates-nested-applications-deploying"></a>

您可以使用命令 部署巢狀應用程式 AWS SAM CLI`sam deploy`。如需詳細資訊，請參閱[使用 部署您的應用程式和資源 AWS SAM](serverless-deploying.md)。

**注意**  
當您部署包含巢狀應用程式的應用程式時，您必須確認其包含巢狀應用程式。您可以傳遞`CAPABILITY_AUTO_EXPAND`至 [CreateCloudFormationChangeSet API](https://docs.aws.amazon.com/goto/WebAPI/serverlessrepo-2017-09-08/CreateCloudFormationChangeSet)，或使用 [https://docs.aws.amazon.com/cli/latest/reference/serverlessrepo/create-cloud-formation-change-set.html](https://docs.aws.amazon.com/cli/latest/reference/serverlessrepo/create-cloud-formation-change-set.html) AWS CLI 命令來執行此操作。  
如需確認巢狀應用程式的詳細資訊，請參閱《 *AWS Serverless Application Repository 開發人員指南*》中的[在部署應用程式時確認 IAM 角色、資源政策和巢狀應用程式](https://docs.aws.amazon.com/serverlessrepo/latest/devguide/acknowledging-application-capabilities.html)。