

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

# 將您的 Infrastructure Composer 無伺服器應用程式部署至 AWS 雲端
<a name="other-services-cfn"></a>

使用 AWS Infrastructure Composer 設計可立即部署的無伺服器應用程式。若要部署，請使用任何 AWS CloudFormation 相容的 服務。建議使用 [AWS Serverless Application Model (AWS SAM)](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/what-is-sam.html)。

AWS SAM 是一種開放原始碼架構，可提供開發人員工具來建置和執行無伺服器應用程式 AWS。使用 AWS SAM的速記語法，開發人員會宣告 CloudFormation 資源和專用無伺服器資源，這些資源會在部署期間轉換為基礎設施。

## 重要 AWS SAM 概念
<a name="w2aac23b7"></a>

在使用之前 AWS SAM，請務必先熟悉其一些基本概念。
+ **[AWS SAM 運作方式](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/what-is-sam-overview)**：此主題位於 *AWS Serverless Application Model 開發人員指南*中，提供用於建立無服務應用程式的主要元件的重要資訊： AWS SAM CLI、 AWS SAM 專案和 AWS SAM 範本。
+ **[如何使用 AWS Serverless Application Model (AWS SAM)](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/chapter-using-sam.html)**：此主題位於 *AWS Serverless Application Model 開發人員指南*中，提供您需要完成的步驟的高階概觀，以使用 AWS SAM 將應用程式部署到 AWS 雲端。

當您在 Infrastructure Composer 中設計應用程式時，您可以使用 **sam sync**命令讓 AWS SAM CLI自動偵測本機變更，並將這些變更部署到其中 CloudFormation。若要進一步了解，請參閱《 *AWS Serverless Application Model 開發人員指南*》中的[使用 sam 同步](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/using-sam-cli-sync.html)。

## 後續步驟
<a name="w2aac23b9"></a>

請參閱 [設定 以使用 AWS SAM CLI 和 Infrastructure Composer 部署](other-services-cfn-sam-using.md)以準備部署您的應用程式。

# 設定 以使用 AWS SAM CLI 和 Infrastructure Composer 部署
<a name="other-services-cfn-sam-using"></a>

若要使用 部署應用程式 AWS SAM，您必須先安裝和存取 AWS CLI和 AWS SAM CLI。本節中的主題提供執行此操作的詳細資訊。

## 安裝 AWS CLI
<a name="other-services-cfn-sam-prerequisites-aws"></a>

建議您先安裝和設定 AWS CLI，再安裝 AWS SAM CLI。如需說明，請參閱*AWS Command Line Interface 《 使用者指南*》中的[安裝或更新至最新版本的 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)。

**注意**  
安裝 之後 AWS CLI，您必須設定 AWS 登入資料。若要進一步了解，請參閱*AWS Command Line Interface 《 使用者指南*》中的[快速設定](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-quickstart.html)。

## 安裝 AWS SAM CLI
<a name="other-services-cfn-sam-prerequisites-sam"></a>

若要安裝 AWS SAM CLI，請參閱[《 開發人員指南》中的安裝 AWS SAM CLI](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/install-sam-cli.html) 。 *AWS Serverless Application Model *

## 存取 AWS SAM CLI
<a name="w2aac23c13c13"></a>

如果您從 使用 Infrastructure Composer AWS 管理主控台，您有下列選項可使用 AWS SAM CLI。

**啟用本機同步模式**  
使用本機同步模式時，您的專案資料夾，包括 AWS SAM 範本，會自動儲存至您的本機電腦。Infrastructure Composer 會以 AWS SAM 辨識的方式建構您的專案目錄。您可以從專案的根目錄執行 AWS SAM CLI。  
如需**本機同步**模式的詳細資訊，請參閱 [在 Infrastructure Composer 主控台中本機同步和儲存您的專案](using-composer-project-local-sync.md)。

**匯出您的範本**  
您可以將範本匯出至本機電腦。然後，從包含範本的父資料夾執行 AWS SAM CLI 。您也可以將 `--template-file`選項與任何 AWS SAM CLI 命令搭配使用，並提供範本的路徑。

**從 使用 Infrastructure Composer AWS Toolkit for Visual Studio Code**  
您可以從 Toolkit for VS Code 使用 Infrastructure Composer，將 Infrastructure Composer 帶到本機機器。然後，使用 Infrastructure Composer 和來自 VS Code 的 AWS SAM CLI 。

## 後續步驟
<a name="w2aac23c13c15"></a>

若要部署您的應用程式，請參閱 [搭配 使用 Infrastructure Composer AWS SAM 來建置和部署](other-services-cfn-sam-examples-example1.md)。

# 搭配 使用 Infrastructure Composer AWS SAM 來建置和部署
<a name="other-services-cfn-sam-examples-example1"></a>

現在您已完成 [設定 以使用 AWS SAM CLI 和 Infrastructure Composer 部署](other-services-cfn-sam-using.md)，您可以使用 AWS SAM 和 Infrastructure Composer 部署應用程式。本節提供詳細說明如何執行此操作的範例。您也可以參閱《 [開發人員指南》中的使用 部署應用程式和資源 AWS SAM](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-deploying.html)，以取得使用 部署應用程式的指示 AWS SAM。 *AWS Serverless Application Model *

此範例說明如何建置和部署 Infrastructure Composer 示範應用程式。示範應用程式具有下列資源：

![\[Infrastructure Composer 示範，顯示基本 CRUD 無伺服器應用程式。\]](http://docs.aws.amazon.com/zh_tw/infrastructure-composer/latest/dg/images/aac_t1_04.png)


**注意**  
若要進一步了解示範應用程式，請參閱 [載入和修改 Infrastructure Composer 示範專案](getting-started-demo.md)。
在此範例中，我們使用已啟用**本機同步**的 Infrastructure Composer。

1. 使用 **sam build**命令來建置應用程式。

   ```
   $ sam build
   ...
   Build Succeeded
   
   Built Artifacts  : .aws-sam/build
   Built Template   : .aws-sam/build/template.yaml
   
   Commands you can use next
   =========================
   [*] Validate SAM template: sam validate
   [*] Invoke Function: sam local invoke
   [*] Test Function in the Cloud: sam sync --stack-name {{stack-name}} --watch
   [*] Deploy: sam deploy --guided
   ```

   會在專案資料夾中 AWS SAM CLI建立 `./aws-sam`目錄。此目錄包含應用程式 Lambda 函數的建置成品。以下是專案目錄的輸出：

   ```
   .
   ├── README.md
   ├── samconfig.toml
   ├── src
   │   ├── CreateItem
   │   │   ├── index.js
   │   │   └── package.json
   │   ├── DeleteItem
   │   │   ├── index.js
   │   │   └── package.json
   │   ├── GetItem
   │   │   ├── index.js
   │   │   └── package.json
   │   ├── ListItems
   │   │   ├── index.js
   │   │   └── package.json
   │   └── UpdateItem
   │       ├── index.js
   │       └── package.json
   └── template.yaml
   ```

1. 現在，應用程式已準備好進行部署。我們將使用 **sam deploy --guided**。這可讓您的應用程式準備好透過一系列提示進行部署。

   ```
   $ sam deploy --guided
   ...
   Configuring SAM deploy
   ======================
   
       Looking for config file [samconfig.toml] :  Found
       Reading default arguments  :  Success
   
       Setting default arguments for 'sam deploy'
       =========================================
       Stack Name [aws-app-composer-basic-api]: AWS Region [us-west-2]:
       #Shows you resources changes to be deployed and require a 'Y' to initiate deploy
       Confirm changes before deploy [y/N]:
       #SAM needs permission to be able to create roles to connect to the resources in your template
       Allow SAM CLI IAM role creation [Y/n]:
       #Preserves the state of previously provisioned resources when an operation fails
       Disable rollback [y/N]:
       ListItems may not have authorization defined, Is this okay? [y/N]: y
       CreateItem may not have authorization defined, Is this okay? [y/N]: y
       GetItem may not have authorization defined, Is this okay? [y/N]: y
       UpdateItem may not have authorization defined, Is this okay? [y/N]: y
       DeleteItem may not have authorization defined, Is this okay? [y/N]: y
       Save arguments to configuration file [Y/n]:
       SAM configuration file [samconfig.toml]:
       SAM configuration environment [default]:
   ```

    AWS SAM CLI 會顯示將部署項目的摘要：

   ```
   Deploying with following values
       ===============================
       Stack name                   : aws-app-composer-basic-api
       Region                       : us-west-2
       Confirm changeset            : False
       Disable rollback             : False
       Deployment s3 bucket         : aws-sam-cli-managed-default-samclisam-s3-demo-1b3x26zbcdkqr
       Capabilities                 : ["CAPABILITY_IAM"]
       Parameter overrides          : {}
       Signing Profiles             : {}
   ```

   會先建立 CloudFormation 變更集來 AWS SAM CLI部署應用程式：

   ```
   Initiating deployment
   =====================
   Uploading to aws-app-composer-basic-api/4181c909ee2440a728a7a129dafb83d4.template  7087 / 7087  (100.00%)
   
   Waiting for changeset to be created..
   CloudFormation stack changeset
   ---------------------------------------------------------------------------------------------------------------------------------------------
   Operation                           LogicalResourceId                   ResourceType                        Replacement
   ---------------------------------------------------------------------------------------------------------------------------------------------
   + Add                               ApiDeploymentcc153d135b             AWS::ApiGateway::Deployment         N/A
   + Add                               ApiProdStage                        AWS::ApiGateway::Stage              N/A
   + Add                               Api                                 AWS::ApiGateway::RestApi            N/A
   + Add                               CreateItemApiPOSTitemsPermissionP   AWS::Lambda::Permission             N/A
                                       rod
   + Add                               CreateItemRole                      AWS::IAM::Role                      N/A
   + Add                               CreateItem                          AWS::Lambda::Function               N/A
   + Add                               DeleteItemApiDELETEitemsidPermiss   AWS::Lambda::Permission             N/A
                                       ionProd
   + Add                               DeleteItemRole                      AWS::IAM::Role                      N/A
   + Add                               DeleteItem                          AWS::Lambda::Function               N/A
   + Add                               GetItemApiGETitemsidPermissionPro   AWS::Lambda::Permission             N/A
                                       d
   + Add                               GetItemRole                         AWS::IAM::Role                      N/A
   + Add                               GetItem                             AWS::Lambda::Function               N/A
   + Add                               Items                               AWS::DynamoDB::Table                N/A
   + Add                               ListItemsApiGETitemsPermissionPro   AWS::Lambda::Permission             N/A
                                       d
   + Add                               ListItemsRole                       AWS::IAM::Role                      N/A
   + Add                               ListItems                           AWS::Lambda::Function               N/A
   + Add                               UpdateItemApiPUTitemsidPermission   AWS::Lambda::Permission             N/A
                                       Prod
   + Add                               UpdateItemRole                      AWS::IAM::Role                      N/A
   + Add                               UpdateItem                          AWS::Lambda::Function               N/A
   ---------------------------------------------------------------------------------------------------------------------------------------------
   
   Changeset created successfully. arn:aws:cloudformation:us-west-2:513423067560:changeSet/samcli-deploy1677472539/967ab543-f916-4170-b97d-c11a6f9308ea
   ```

   然後， AWS SAM CLI 部署應用程式：

   ```
   CloudFormation events from stack operations (refresh every 0.5 seconds)
   ---------------------------------------------------------------------------------------------------------------------------------------------
   ResourceStatus                      ResourceType                        LogicalResourceId                   ResourceStatusReason
   ---------------------------------------------------------------------------------------------------------------------------------------------
   CREATE_IN_PROGRESS                  AWS::DynamoDB::Table                Items                               -
   CREATE_IN_PROGRESS                  AWS::DynamoDB::Table                Items                               Resource creation Initiated
   CREATE_COMPLETE                     AWS::DynamoDB::Table                Items                               -
   CREATE_IN_PROGRESS                  AWS::IAM::Role                      DeleteItemRole                      -
   CREATE_IN_PROGRESS                  AWS::IAM::Role                      ListItemsRole                       -
   CREATE_IN_PROGRESS                  AWS::IAM::Role                      UpdateItemRole                      -
   CREATE_IN_PROGRESS                  AWS::IAM::Role                      GetItemRole                         -
   CREATE_IN_PROGRESS                  AWS::IAM::Role                      CreateItemRole                      -
   CREATE_IN_PROGRESS                  AWS::IAM::Role                      DeleteItemRole                      Resource creation Initiated
   CREATE_IN_PROGRESS                  AWS::IAM::Role                      ListItemsRole                       Resource creation Initiated
   CREATE_IN_PROGRESS                  AWS::IAM::Role                      GetItemRole                         Resource creation Initiated
   CREATE_IN_PROGRESS                  AWS::IAM::Role                      UpdateItemRole                      Resource creation Initiated
   CREATE_IN_PROGRESS                  AWS::IAM::Role                      CreateItemRole                      Resource creation Initiated
   CREATE_COMPLETE                     AWS::IAM::Role                      DeleteItemRole                      -
   CREATE_COMPLETE                     AWS::IAM::Role                      ListItemsRole                       -
   CREATE_COMPLETE                     AWS::IAM::Role                      GetItemRole                         -
   CREATE_COMPLETE                     AWS::IAM::Role                      UpdateItemRole                      -
   CREATE_COMPLETE                     AWS::IAM::Role                      CreateItemRole                      -
   CREATE_IN_PROGRESS                  AWS::Lambda::Function               DeleteItem                          -
   CREATE_IN_PROGRESS                  AWS::Lambda::Function               CreateItem                          -
   CREATE_IN_PROGRESS                  AWS::Lambda::Function               ListItems                           -
   CREATE_IN_PROGRESS                  AWS::Lambda::Function               UpdateItem                          -
   CREATE_IN_PROGRESS                  AWS::Lambda::Function               DeleteItem                          Resource creation Initiated
   CREATE_IN_PROGRESS                  AWS::Lambda::Function               GetItem                             -
   CREATE_IN_PROGRESS                  AWS::Lambda::Function               ListItems                           Resource creation Initiated
   CREATE_IN_PROGRESS                  AWS::Lambda::Function               CreateItem                          Resource creation Initiated
   CREATE_IN_PROGRESS                  AWS::Lambda::Function               UpdateItem                          Resource creation Initiated
   CREATE_IN_PROGRESS                  AWS::Lambda::Function               GetItem                             Resource creation Initiated
   CREATE_COMPLETE                     AWS::Lambda::Function               DeleteItem                          -
   CREATE_COMPLETE                     AWS::Lambda::Function               ListItems                           -
   CREATE_COMPLETE                     AWS::Lambda::Function               CreateItem                          -
   CREATE_COMPLETE                     AWS::Lambda::Function               UpdateItem                          -
   CREATE_COMPLETE                     AWS::Lambda::Function               GetItem                             -
   CREATE_IN_PROGRESS                  AWS::ApiGateway::RestApi            Api                                 -
   CREATE_IN_PROGRESS                  AWS::ApiGateway::RestApi            Api                                 Resource creation Initiated
   CREATE_COMPLETE                     AWS::ApiGateway::RestApi            Api                                 -
   CREATE_IN_PROGRESS                  AWS::Lambda::Permission             GetItemApiGETitemsidPermissionPro   -
                                                                           d
   CREATE_IN_PROGRESS                  AWS::Lambda::Permission             ListItemsApiGETitemsPermissionPro   -
                                                                           d
   CREATE_IN_PROGRESS                  AWS::Lambda::Permission             DeleteItemApiDELETEitemsidPermiss   -
                                                                           ionProd
   CREATE_IN_PROGRESS                  AWS::ApiGateway::Deployment         ApiDeploymentcc153d135b             -
   CREATE_IN_PROGRESS                  AWS::Lambda::Permission             UpdateItemApiPUTitemsidPermission   -
                                                                           Prod
   CREATE_IN_PROGRESS                  AWS::Lambda::Permission             CreateItemApiPOSTitemsPermissionP   -
                                                                           rod
   CREATE_IN_PROGRESS                  AWS::Lambda::Permission             GetItemApiGETitemsidPermissionPro   Resource creation Initiated
                                                                           d
   CREATE_IN_PROGRESS                  AWS::Lambda::Permission             UpdateItemApiPUTitemsidPermission   Resource creation Initiated
                                                                           Prod
   CREATE_IN_PROGRESS                  AWS::Lambda::Permission             CreateItemApiPOSTitemsPermissionP   Resource creation Initiated
                                                                           rod
   CREATE_IN_PROGRESS                  AWS::Lambda::Permission             ListItemsApiGETitemsPermissionPro   Resource creation Initiated
                                                                           d
   CREATE_IN_PROGRESS                  AWS::Lambda::Permission             DeleteItemApiDELETEitemsidPermiss   Resource creation Initiated
                                                                           ionProd
   CREATE_IN_PROGRESS                  AWS::ApiGateway::Deployment         ApiDeploymentcc153d135b             Resource creation Initiated
   CREATE_COMPLETE                     AWS::ApiGateway::Deployment         ApiDeploymentcc153d135b             -
   CREATE_IN_PROGRESS                  AWS::ApiGateway::Stage              ApiProdStage                        -
   CREATE_IN_PROGRESS                  AWS::ApiGateway::Stage              ApiProdStage                        Resource creation Initiated
   CREATE_COMPLETE                     AWS::ApiGateway::Stage              ApiProdStage                        -
   CREATE_COMPLETE                     AWS::Lambda::Permission             CreateItemApiPOSTitemsPermissionP   -
                                                                           rod
   CREATE_COMPLETE                     AWS::Lambda::Permission             UpdateItemApiPUTitemsidPermission   -
                                                                           Prod
   CREATE_COMPLETE                     AWS::Lambda::Permission             ListItemsApiGETitemsPermissionPro   -
                                                                           d
   CREATE_COMPLETE                     AWS::Lambda::Permission             DeleteItemApiDELETEitemsidPermiss   -
                                                                           ionProd
   CREATE_COMPLETE                     AWS::Lambda::Permission             GetItemApiGETitemsidPermissionPro   -
                                                                           d
   CREATE_COMPLETE                     AWS::CloudFormation::Stack          aws-app-composer-basic-api          -
   ---------------------------------------------------------------------------------------------------------------------------------------------
   ```

   最後會顯示訊息，通知您部署成功：

   ```
   Successfully created/updated stack - aws-app-composer-basic-api in us-west-2
   ```

# 搭配 使用 Infrastructure Composer AWS SAM 來刪除堆疊
<a name="other-services-cfn-sam-examples-example2"></a>

此範例說明如何使用 **sam delete**命令刪除 CloudFormation 堆疊。

在 **sam delete**中輸入 AWS SAM CLI 命令，並確認您是否要刪除堆疊和範本：

```
$ sam delete
	Are you sure you want to delete the stack aws-app-composer-basic-api in the region us-west-2 ? [y/N]: y
	Do you want to delete the template file 30439348c0be6e1b85043b7a935b34ab.template in S3? [y/N]: y
	- Deleting S3 object with key eb226ca86d1bc4e9914ad85eb485fed8
	- Deleting S3 object with key 875e4bcf4b10a6a1144ad83158d84b6d
	- Deleting S3 object with key 20b869d98d61746dedd9aa33aa08a6fb
	- Deleting S3 object with key c513cedc4db6bc184ce30e94602741d6
	- Deleting S3 object with key c7a15d7d8d1c24b77a1eddf8caebc665
	- Deleting S3 object with key e8b8984f881c3732bfb34257cdd58f1e
	- Deleting S3 object with key 3185c59b550594ee7fca7f8c36686119.template
	- Deleting S3 object with key 30439348c0be6e1b85043b7a935b34ab.template
	- Deleting Cloudformation stack aws-app-composer-basic-api

Deleted successfully
```