

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

# 将您的基础架构 Composer 无服务器应用程序部署到云端 AWS
<a name="other-services-cfn"></a>

用于 AWS 基础架构编辑器 设计部署就绪型无服务器应用程序。要进行部署，请使用任何 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 SAMCLI、 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 SAMCLI自动检测本地更改并将这些更改部署到 CloudFormation。要了解更多信息，请参阅*AWS Serverless Application Model 开发者指南*中的[使用 sam sync](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/using-sam-cli-sync.html)。

## 后续步骤
<a name="w2aac23b9"></a>

请参阅 [使用 AWS SAMCLI和基础架构编排器进行部署设置](other-services-cfn-sam-using.md) “准备部署应用程序”。

# 使用 AWS SAMCLI和基础架构编排器进行部署设置
<a name="other-services-cfn-sam-using"></a>

要使用部署应用程序 AWS SAM，您首先需要安装并访问 AWSCLI和 AWS SAMCLI。本节中的主题提供了有关执行此操作的详细信息。

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

我们建议在安装 AWSCLI之前安装和设置 AWS SAMCLI。有关说明，请参阅《*AWS Command Line Interface 用户指南*[》 AWS CLI中的安装或更新到最新版本](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)的。

**注意**  
安装完成后 AWSCLI，必须配置 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 SAMCLI，请参阅[《*AWS Serverless Application Model 开发人员指南*》 AWS SAMCLI中的安装](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/install-sam-cli.html)。

## 访问 AWS SAMCLI
<a name="w2aac23c13c13"></a>

如果您使用的是中的基础架构编排器 AWS 管理控制台，则有以下选项可供使用 AWS SAMCLI。

**激活本地同步模式**  
在本地同步模式下，您的项目文件夹（包括 AWS SAM 模板）会自动保存到本地计算机。基础架构编排器以一种可 AWS SAM 识别的方式构建您的项目目录。您可以 AWS SAMCLI从项目的根目录运行。  
有关**本地同步**模式的更多信息，请参阅[在基础设施编排控制台中本地同步并保存您的项目](using-composer-project-local-sync.md)。

**导出您的模板**  
您可以将模板导出到本地计算机。然后， AWS SAMCLI从包含模板的父文件夹中运行。您也可以将该`--template-file`选项与任何 AWS SAMCLI命令一起使用，并提供模板的路径。

**使用来自《基础架构编排器》 AWS Toolkit for Visual Studio Code**  
您可以使用适用于 VS Code 的 Toolkit 中的基础设施编排器将基础设施编排器引入本地计算机。然后，使用基础架构编排器和来 AWS SAMCLI自 VS Code 的。

## 后续步骤
<a name="w2aac23c13c15"></a>

要部署应用程序，请参阅[使用基础架构编排器 AWS SAM 进行构建和部署](other-services-cfn-sam-examples-example1.md)。

# 使用基础架构编排器 AWS SAM 进行构建和部署
<a name="other-services-cfn-sam-examples-example1"></a>

现在您已经完成了[使用 AWS SAMCLI和基础架构编排器进行部署设置](other-services-cfn-sam-using.md)，您可以使用 AWS SAM 和基础架构编排器来部署您的应用程序。本节提供了一个示例，详细说明了如何执行此操作。您也可以参阅《*AWS Serverless Application Model 开发人员指南》 AWS SAM*中的[使用部署应用程序和资源](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-deploying.html)，了解有关使用部署应用程序的说明 AWS SAM。

此示例向您展示如何构建和部署 Infrastructure Composer 演示应用程序。该演示应用程序具有以下资源：

![\[基础设施编排演示，展示了一个基本的 CRUD 无服务器应用程序。\]](http://docs.aws.amazon.com/zh_cn/infrastructure-composer/latest/dg/images/aac_t1_04.png)


**注意**  
要了解有关演示应用程序的更多信息，请参阅[加载和修改基础设施编排器演示项目](getting-started-demo.md)。
在本示例中，我们使用已激活**本地同步**的基础设施编排器。

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 SAMCLI创建`./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 SAMCLI显示了将要部署的内容的摘要：

   ```
   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 SAMCLI部署应用程序：

   ```
   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 SAMCLI部署应用程序：

   ```
   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
   ```

# 使用基础架构编排器 AWS SAM 来删除堆栈
<a name="other-services-cfn-sam-examples-example2"></a>

此示例说明如何使用**sam delete**命令删除 CloudFormation 堆栈。

**sam delete**在中输入命令 AWS SAMCLI并确认是否要删除堆栈和模板：

```
$ 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
```