

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

# AMS CloudFormation 摄取
<a name="ams-cfn-ingest"></a>

AMS AWS CloudFormation 采集变更类型 (CT) 允许您使用现有 CloudFormation 模板（经过一些修改）在 AMS 托管的 VPC 中部署自定义堆栈。

**Topics**
+ [CloudFormation 摄取指南、最佳实践和限制](cfn-author-templates.md)
+ [CloudFormation 收录：示例](cfn-ingest-examples.md)
+ [创建 CloudFormation 采集堆栈](#ex-cfn-ingest-create-col)
+ [更新 CloudFormation 采集堆栈](#ex-cfn-ingest-update-col)
+ [批准 CloudFormation 采集堆栈变更集](#ex-cfn-ingest-approve-and-update-col)
+ [更新 CloudFormation 堆栈终止保护](#ex-cfn-term-pro-update-col)
+ [在 AMS 中使用 CFN 采集或堆栈更新 CTs 自动部署 IAM](cfn-ingest-iam-deploy.md)

AMS CloudFormation 摄取过程涉及以下内容：
+ 准备您的自定义 CloudFormation 模板并将其上传到 S3 存储桶，或者在创建 RFC 时提供内联模板。如果您使用的是带有预签名 URL 的 S3 存储桶；有关更多信息，请参阅 [pr](https://docs.aws.amazon.com/cli/latest/reference/s3/presign.html) esign。
+ 在 RF CloudFormation C 中向 AMS 提交采集更改类型。有关 CFN 采集更改类型演练，请参阅。[创建 CloudFormation 采集堆栈](#ex-cfn-ingest-create-col)有关 CFN 采集示例，请参阅。[CloudFormation 收录：示例](cfn-ingest-examples.md)
+ 创建堆栈后，您可以对其进行更新，并修复其中的偏差；此外，如果更新失败，您可以明确批准和实施更新。本节将介绍所有这些过程。

  有关 CFN 漂移检测的信息，请参阅[新增- CloudFormation 偏移检测](https://aws.amazon.com/blogs/aws/new-cloudformation-drift-detection/)。

**注意**  
  
此更改类型现在有 2.0 版。版本 2.0 是自动执行的；不是手动执行的。这使得 CT 的执行速度更快。此版本引入了两个新参数：**CloudFormationTemplate**，它允许您将自定义 CloudFormation 模板粘贴到 RFC 中；以及**VpcId**允许在 AMS 多账户 landing zone 中使用 CloudFormation 摄取。
版本 1.0 是手动更改类型。这意味着 AMS 操作员必须采取一些措施才能成功完成变更类型。至少需要进行审查。此版本还要求 **CloudFormationTemplateS3Endpoint** 参数值为预签名 URL。

# CloudFormation 摄取指南、最佳实践和限制
<a name="cfn-author-templates"></a>

AMS 需要处理您的 CloudFormation 模板，需要遵守一些准则和限制。

## 指南
<a name="cfn-ingest-tips"></a>

要减少执行载 CloudFormation 入时 CloudFormation 出现的错误，请遵循以下准则：
+ **不要在模板中嵌入凭据或其他敏感信息- CloudFormation 模板**在 CloudFormation 控制台中可见，因此您不想在模板中嵌入凭据或敏感数据。模板不能包含敏感信息。只有当您使用 AWS Secrets Manager 作为值时，才允许使用以下资源：
  + `AWS::RDS::DBInstance` - [MasterUserPassword,TdeCredentialPassword]
  + `AWS::RDS::DBCluster` - [MasterUserPassword]
  + `AWS::ElastiCache::ReplicationGroup` - [AuthToken]
**注意**  
有关在资源属性中使用 S AWS ecrets Manager 密钥的信息，请参阅[如何使用 AWS CloudFormation 模板创建和检索在 Secrets Manager 中管理的 AWS 密钥](https://aws.amazon.com/blogs/security/how-to-create-and-retrieve-secrets-managed-in-aws-secrets-manager-using-aws-cloudformation-template/)和[使用动态引用指定模板值](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/dynamic-references.html)。
+ **使用 Amazon RDS 快照创建 RDS 数据库实例** — 这样您就不必提供 MasterUserPassword。
+ 如果您提交的模板包含 IAM 实例配置文件，则必须以 “客户” 为前缀。例如，使用名为 “example-instance-profile” 的实例配置文件会导致失败。相反，请使用名为 “customer-example-instance-profile” 的实例配置文件。
+ **请勿在 `AWS::EC2::Instance`-[UserData] 中包含任何敏感数据**。 UserData 不应包含密码、API 密钥或任何其他敏感数据。此类数据可以加密并存储在 S3 存储桶中，然后使用下载到实例上 UserData。
+ **支持使用 CloudFormation 模板创建 IAM 策略有一些限制** — IAM 策略必须经过 AMS 的审核和批准 SecOps。目前，我们仅支持使用包含预先批准权限的内联策略部署 IAM 角色。在其他情况下，无法使用 CloudFormation 模板创建 IAM 策略，因为这会覆盖 AMS SecOps 流程。
+ ** KeyPairs 不支持 SSH** — Amazon EC2 实例必须通过 AMS 访问管理系统进行访问。AMS RFC 流程会对您进行身份验证。您不能在 CloudFormation 模板中包含 SSH 密钥对，因为您无权创建 SSH 密钥对和覆盖 AMS 访问管理模型。
+ **安全组的入口规则受到限制** — 您不能将源 CIDR 范围设置为 0.0.0.0/0，也不能将可公开路由的地址空间设置为 80 或 443，TCP 端口不是 80 或 443。
+ **编写 CloudFormation 资源模板时请遵循 CloudFormation 指导方针** — 参阅资源的《*AWS CloudFormation 用户指南》*，确保为该资源使用正确的数据 type/property 名称。例如， AWS::EC2::Instance 资源中 SecurityGroupIds 属性的数据类型是 “字符串值列表”，因此 ["sg-aaaaaaaa"] 没问题（带方括号），但是 “sg-aaaaaaaa” 不是（不带方括号）。

  有关更多信息，请参阅 [AWS 资源和属性类型参考](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-template-resource-type-ref.html)。
+ 将@@ **您的自定义 CloudFormation 模板配置为使用 AMS CloudFormation 收录 CT 中定义的参数** — 当您将 CloudFormation 模板配置为使用 AMS 收录 C CloudFormation T 中定义的参数时，您可以使用 “管理 \$1 自定义堆栈 \$1 来自模板的堆栈 \$1 来自 CloudFormation 模板的堆栈 \$1 更新 CT” (ct-361tlo1k7339x) 在 CT 输入中使用更改的参数值来重复使用 CloudFormation 模板来创建类似的堆栈。有关示例，请参阅[CloudFormation 摄取示例：定义资源](cfn-ingest-ex-define-resource.md)。
+ **带有预签名 URL 的 Amazon S3 存储桶终端节点不能过期** — 如果您使用带有预签名 URL 的 Amazon S3 存储桶终端节点，请确认预签名的 Amazon S3 URL 未过期。使用已过期的预签名 Amazon S3 存储桶 URL 提交的提 CloudFormation 取 RFC 被拒绝。
+ **等待条件需要信号逻辑**-等待条件用于协调堆栈资源的创建与堆栈创建外部的配置操作。如果您在模板中使用 CloudFormation Wait Condition 资源，则等待成功信号，如果未发出成功信号的数量，则会将堆栈创建标记为失败。如果您使用等待条件资源，则需要有信号的逻辑。有关更多信息，请参阅在[模板中创建等待条件](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-waitcondition.html)。

# 最佳实践
<a name="cfn-ingest-best-practices"></a>

以下是您可以使用 AMS CloudFormation 采集流程迁移资源的一些最佳实践：
+ **在一个 CT 中提交 IAM 和其他与策略相关的资源** — 如果您可以使用 CloudFormation Ingest CTs 等自动化方式部署 IAM 角色，我们建议您这样做。在其他情况下，AMS 建议您收集所有 IAM 或其他策略相关资源，并将其提交到单个管理 \$1 其他 \$1 其他 \$1 创建更改类型 (ct-1e1xtak34nx76) 中。例如，合并所需的所有 IAM 角色、IAM Amazon EC2 实例配置文件、现有 IAM 角色的 IAM 策略更新、Amazon S3 存储桶策略、Amazon S SNS/Amazon QS 策略等，然后提交 ct-1e1xtak34nx76 RFC，以便在未来的采集模板中可以简单地引用这些先前存在的资源。 CloudFormation 
+ **EC2 实例已启动并成功加入域** — 这是一种最佳做法，这是自动完成的。为了确保通过 CloudFormation 采集堆栈启动的 Amazon EC2 实例被引导并成功加入域，AMS UpdatePolicy 为一个 Auto Scaling 组资源提供了 CreationPolicy 和一个（也就是说，如果这些策略尚不存在）。
+ **必须指定 Amazon RDS 数据库实例参数** — 通过载 CloudFormation 入创建 Amazon RDS 数据库时，必须指定该`DBSnapshotIdentifier`参数才能从之前的数据库快照还原。这是必需的，因为 CloudFormation 载入当前不处理敏感数据。

有关如何使用模板进行 AMS CloudFormation CloudFormation 模板摄取的示例，请参阅[CloudFormation 收录：示例](cfn-ingest-examples.md)。

# 模板验证
<a name="cfn-ingest-validate"></a>

您可以先对 CloudFormation 模板进行自我验证，然后再将其提交给 AMS。

提交给 AMS CloudFormation ingest 的模板经过验证，以确保可以安全地部署在 AMS 账户中。验证过程会检查以下内容：
+ **支持的资源**-仅使用 AMS CloudFormation 摄取支持的资源。有关更多信息，请参阅 [支持的资源](cfn-ingest-supp-services.md)。
+ **支持 AMIs ** — 模板中的 AMI 是 AMS 支持的 AMI。有关 AMS 的信息 AMIs，请参阅[AMS Amazon 机器映像 (AMIs)](ams-amis.md)。
+ **AMS 共享服务子网** — 模板不尝试将资源启动到 AMS 共享服务子网。
+ **资源策略** — 没有过于宽松的资源策略，例如公开可读或可写的 S3 存储桶策略。AMS 不允许公开读取或可写入的 S3 存储桶。 AWS 账户

## 使用 CloudFormation Linter 进行验证
<a name="cfn-ingest-validate-linter"></a>

在将 CloudFormation 模板提交给 AMS 之前，您可以使用 CloudFormation Linter 工具对其进行自我验证。

 CloudFormation Linter 工具是验证 CloudFormation 模板的最佳方式，因为它可以验证 resource/property 名称、数据类型和函数。有关更多信息，请参阅 [aws-cfn-python-lint](https://github.com/aws-cloudformation/cfn-python-lint) cloudformation/。

前面显示的模板的 CloudFormation Linter 输出如下所示：

```
$ cfn-lint -t ./testtmpl.json
E3002 Invalid Property Resources/SNSTopic/Properties/Name
./testtmpl.json:6:9
```

为了协助 CloudFormation 模板的离线验证，AMS 为 CloudFormation Linter 工具开发了一套可插拔的自定义验证规则。它们位于 AMS 控制台的**开发者资源**页面上。

请按照以下步骤使用 CloudFormation 摄取前验证脚本：

1. 安装 CloudFormation Linter 工具。有关安装说明，请参阅 [aws-cloudformation/cfn-lint。](https://github.com/aws-cloudformation/cfn-python-lint)

1. 下载包含验证脚本的.zip 文件：

    [CFN Lint 自定义规则](https://github.com/awslabs/aws-managed-services/tree/main/cfn-lint-custom-rules)。

1. 将附加的规则解压缩到您选择的目录中。

1. 通过运行以下命令来验证您的 CloudFormation 模板：

   ```
   cfn-lint --template {TEMPLATE_FILE} --append-rules {DIRECTORY_WITH_CUSTOM_RULES}
   ```

# CloudFormation 采集堆栈：CFN 验证器示例
<a name="ex-cfn-ingest-validator"></a>

这些示例可以帮助您准备模板以成功收录。

## 格式验证
<a name="cfn-validator-templates"></a>

验证模板是否包含 “资源” 部分，并且在其下定义的所有资源都具有 “类型” 值。

```
{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Description" : "Create a SNS topic",
  "Resources": {
    "SnsTopic": {
      "Type": "AWS::SNS::Topic"
    }
  }
}
```

验证是否允许使用模板的根密钥。允许的根密钥是：

```
[
  "AWSTemplateFormatVersion",  
  "Description",  
  "Mappings",  
  "Parameters",  
  "Conditions",  
  "Resources",  
  "Rules",  
  "Outputs",  
  "Metadata"
]
```

## 手动托管自动化验证
<a name="cfn-validator-ex-man"></a>

如果模板包含以下资源，则自动验证将失败，您需要手动审核。

从安全角度来看，所示的策略是高风险区域。例如，允许除特定用户或组之外的任何人创建对象或写入权限的 S3 存储桶策略极其危险。因此，我们会根据内容验证政策并批准或拒绝，这些政策无法自动创建。我们正在研究解决此问题的可能方法。

我们目前没有针对以下资源的自动验证。

```
[
    "S3::BucketPolicy",
    "SNS::TopicPolicy",
    "SQS::QueuePolicy"
]
```

## 参数验证
<a name="cfn-validator-examples-param"></a>

验证模板参数是否没有提供值；它必须具有默认值。

## 资源属性验证
<a name="cfn-validator-examples-resource-atts"></a>

必填属性检查：某些资源类型必须存在某些属性。
+ “VPCOptions” 必须存在于 `AWS::OpenSearch::Domain`
+ “CludsterSubnetGroupName” 必须存在于 `AWS::Redshift::Cluster`

```
{
    "AWS::OpenSearch::Domain": [
      "VPCOptions"
    ],
    "AWS::Redshift::Cluster": [
      "ClusterSubnetGroupName"
    ]
}
```

不允许的属性检查：某些资源类型的某些属性必须\$1不\$1存在。
+ “SecretString” 不能存在于 “AWS::SecretsManager::Secret”
+ “MongoDbSettings” 不能存在于 “AWS::DMS::Endpoint”

```
{
  "AWS::SecretsManager::Secret": [
    "SecretString"  
  ],  
  "AWS::DMS::Endpoint": [
    "MongoDbSettings"  
  ]
}
```

SSM 参数检查：对于以下列表中的属性，必须通过 Secrets Manager 或 Systems Manager 参数存储（安全字符串参数）指定值：

```
{
  "RDS::DBInstance": [
    "MasterUserPassword",   
    "TdeCredentialPassword"  
  ],  
  "RDS::DBCluster": [
    "MasterUserPassword"  
  ],  
  "ElastiCache::ReplicationGroup": [
    "AuthToken"  
  ],  
  "DMS::Certificate": [
    "CertificatePem",    
    "CertificateWallet" 
  ],  
  "DMS::Endpoint": [
    "Password"  
  ],
  "CodePipeline::Webhook": {
    "AuthenticationConfiguration": [
        "SecretToken"  
    ]
  },
  "DocDB::DBCluster": [
    "MasterUserPassword"
  ]
},
```

某些属性必须符合某些模式；例如，IAM 实例配置文件名称不得以 [AMS 保留前缀](https://docs.aws.amazon.com/managedservices/latest/userguide/ams-reserved-prefixes)开头，并且属性值必须与特定的正则表达式匹配，如下所示：

```
{
    "AWS::EC2::Instance": {
      "IamInstanceProfile": [
        "^(?!arn:aws:iam|ams|Ams|AMS|AWSManagedServices|Managed_Services|mc|Mc|MC|sentinel|Sentinel).+",
        "arn:aws:iam::(\\$\\{AWS::AccountId\\}|[0-9]+):instance-profile/(?!ams|Ams|AMS|AWSManagedServices|Managed_Services|mc|Mc|MC|sentinel|Sentinel).+"
      ]
    },
    "AWS::AutoScaling::LaunchConfiguration": {
      "IamInstanceProfile": [
        "^(?!arn:aws:iam|ams|Ams|AMS|AWSManagedServices|Managed_Services|mc|Mc|MC|sentinel|Sentinel).+",
        "arn:aws:iam::(\\$\\{AWS::AccountId\\}|[0-9]+):instance-profile/(?!ams|Ams|AMS|AWSManagedServices|Managed_Services|mc|Mc|MC|sentinel|Sentinel).+"
      ]
    },
    "AWS::EC2::LaunchTemplate": {
      "LaunchTemplateData.IamInstanceProfile.Name": [
        "^(?!ams|Ams|AMS|AWSManagedServices|Managed_Services|mc|Mc|MC|sentinel|Sentinel).+"
      ],
      "LaunchTemplateData.IamInstanceProfile.Arn": [
        "arn:aws:iam::(\\$\\{AWS::AccountId\\}|[0-9]+):instance-profile\/(?!ams|Ams|AMS|AWSManagedServices|Managed_Services|mc|Mc|MC|sentinel|Sentinel).+"
      ]
    }
}
```

## 资源验证
<a name="cfn-validator-examples-resources"></a>

只能在模板中指定列入许可名单的资源；这些资源在中进行了介绍。[支持的资源](cfn-ingest-supp-services.md)

由于修补限制，不允许将 EC2 堆栈和 Auto Scaling 组 (ASGs) 放在同一个堆栈中。

## 安全组入口规则验证
<a name="cfn-validator-examples-sg-ingress"></a>
+ 对于来自 CFN Ingest Create 或 Stack Update CT 更改类型的请求：
  + 如果 (`IpProtocol`是 tcp 或 6) AND（端口为 80 或 443），则该`CidrIP`值没有限制
  + 否则，`CidrIP`不能是 0.0.0.0/0
+ 对于来自服务目录（服务目录产品）的请求：
  + 除了 CFN Ingest Create 或 Stack Update CT 更改类型验证外，协议所在的端口`ip_protocols`只能通过以下方式访问：`management_ports``allowed_cidrs`

    ```
    {
          "ip_protocols": ["tcp", "6", "udp", "17"],
          "management_ports": [22, 23, 389, 636, 1494, 1604, 2222, 3389, 5900, 5901, 5985, 5986],
          "allowed_cidrs": ["10.0.0.0/8", "100.64.0.0/10", "172.16.0.0/12", "192.168.0.0/16"]
      }
    ```

# 限制
<a name="cfn-limitations"></a>

AMS CloudFormation 采集流程目前不支持以下特性和功能。


+ **YAML** — 不支持。仅支持基于 JSON 的 CloudFormation模板。
+ **嵌套堆栈** — 取而代之的是，使用单个模板来构建您的应用程序基础架构。或者，您可以利用跨堆栈引用将资源分隔到多个堆栈中，其中一个资源依赖于另一个资源。有关更多信息，请参阅[演练：请参阅其他 AWS CloudFormation 堆栈中的资源输出](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/walkthrough-crossstackref.html)。
+ **CloudFormation 堆栈集**-由于存在安全隐患，不支持。
+ **使用 CloudFormation 模板创建 IAM 资源**-由于存在安全隐患，仅支持 IAM 角色。
+ **敏感数据**-不支持。请勿在模板或参数值中包含敏感数据。如果您需要引用敏感数据，请使用 Secrets Manager 来存储和检索这些值。有关在资源属性中使用 AWS Secrets Managers 密钥的信息，请参阅[如何使用 AWS CloudFormation 模板创建和检索在 AWS Secrets Manager 中管理的密钥](https://aws.amazon.com/blogs/security/how-to-create-and-retrieve-secrets-managed-in-aws-secrets-manager-using-aws-cloudformation-template/)和[使用动态引用指定模板值](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/dynamic-references.html)。

# 支持的资源
<a name="cfn-ingest-supp-services"></a>

AMS CloudFormation 采集流程支持以下 AWS 资源。

## CloudFormation 载入堆栈：支持的资源
<a name="ex-cfn-ingest-supp-resources"></a>

AMS 工作负载摄取必须支持实例操作系统。仅支持此处列出的那些 AWS 资源。
+  [Amazon API Gateway](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_ApiGateway.html)
  + AWS::ApiGateway::Account
  + AWS::ApiGateway::ApiKey
  + AWS::ApiGateway::Authorizer
  + AWS::ApiGateway::BasePath映射
  + 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::UsagePlan钥匙
  + AWS::ApiGateway::VpcLink
+  [亚马逊 API Gateway V2](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_ApiGatewayV2.html)
  + AWS::ApiGatewayV2::Api
  + AWS::ApiGatewayV2::ApiGatewayManagedOverrides
  + AWS::ApiGatewayV2::ApiMapping
  + AWS::ApiGatewayV2::Authorizer
  + AWS::ApiGatewayV2::Deployment
  + AWS::ApiGatewayV2::DomainName
  + AWS::ApiGatewayV2::Integration
  + AWS::ApiGatewayV2::IntegrationResponse
  + AWS::ApiGatewayV2::Model
  + AWS::ApiGatewayV2::Route
  + AWS::ApiGatewayV2::RouteResponse
  + AWS::ApiGatewayV2::Stage
  + AWS::ApiGatewayV2::VpcLink
+  [AWS AppSync](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_AppSync.html)
  + AWS::AppSync::ApiCache
  + AWS::AppSync::ApiKey
  + AWS::AppSync::DataSource
  + AWS::AppSync::FunctionConfiguration
  + AWS::AppSync::GraphQLApi
  + AWS::AppSync::GraphQLSchema
  + AWS::AppSync::Resolver
+  [Amazon Athena](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_Athena.html)
  + AWS::Athena::NamedQuery
  + AWS::Athena::WorkGroup
+  [AWS Backup](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_Backup.html)
  + AWS::Backup::BackupVault
+ [Amazon CloudFront](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-reference-cloudfront.html)
  + AWS::CloudFront::Distribution
  + AWS::CloudFront::CloudFrontOriginAccessIdentity
  + AWS::CloudFront::StreamingDistribution
+ [Amazon CloudWatch](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-reference-cloudwatch.html)
  + AWS::CloudWatch::Alarm
  + AWS::CloudWatch::AnomalyDetector
  + AWS::CloudWatch::CompositeAlarm
  + AWS::CloudWatch::Dashboard
  + AWS::CloudWatch::InsightRule
+ [Amazon CloudWatch 日志](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_Logs.html)
  + AWS::Logs::LogGroup
  + AWS::Logs::LogStream
  + AWS::Logs::MetricFilter
  + AWS::Logs::SubscriptionFilter
+  [Amazon Cognito](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_Cognito.html)
  + AWS::Cognito::IdentityPool
  + AWS::Cognito::IdentityPoolRoleAttachment
  + AWS::Cognito::UserPool
  + AWS::Cognito::UserPool客户
  + AWS::Cognito::UserPool域
  + AWS::Cognito::UserPool群组
  + AWS::Cognito::UserPoolIdentityProvider
  + AWS::Cognito::UserPoolResourceServer
  + AWS::Cognito::UserPoolRiskConfigurationAttachment
  + AWS::Cognito::UserPoolUICustomization附件
  + AWS::Cognito::UserPoolUser
  + AWS::Cognito::UserPoolUserToGroupAttachment
+  [Amazon DocumentDB](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_DocDB.html)
  + AWS::Doc数据库:: DBCluster
  + AWS::Doc数据库:: DBCluster ParameterGroup
  + AWS::Doc数据库:: DBInstance
  + AWS::Doc数据库:: DBSubnet 群组
+  [Amazon DynamoDB](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_DynamoDB.html)
  + AWS::DynamoDB::Table
+ [Amazon EC2](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_EC2.html)
  + AWS::EC2::Volume
  + AWS::EC2::VolumeAttachment
  + AWS::EC2::Instance
  + AWS:::EC2: EIP
  + AWS:EC2::: EIPAssociation
  + AWS::EC2::NetworkInterface
  + AWS::EC2::NetworkInterface附件
  + AWS::EC2::SecurityGroup
  + AWS::EC2::SecurityGroup入口
  + AWS::EC2::SecurityGroup出口
  + AWS::EC2::LaunchTemplate
+  [AWS Batch](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_Batch.html)
  + AWS::Batch::ComputeEnvironment
  + AWS::Batch::JobDefinition
  + AWS::Batch::JobQueue
+ [亚马逊弹性容器注册表 (ECR)](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_ECR.html)
  + AWS::ECR::Repository
+ [亚马逊弹性容器服务 (ECS) (Fargate)](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_EFS.html)
  + AWS::ECS::CapacityProvider
  + AWS::ECS::Cluster
  + AWS::ECS::PrimaryTaskSet
  + AWS::ECS::Service
  + AWS::ECS::TaskDefinition
  + AWS::ECS::TaskSet
+ [亚马逊 Elastic File System (EFS)](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_EFS.html)
  + AWS::EFS::FileSystem
  + AWS::EFS::MountTarget
+ [Amazon ElastiCache](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_ElastiCache.html)
  + AWS::ElastiCache::CacheCluster
  + AWS::ElastiCache::ParameterGroup
  + AWS::ElastiCache::ReplicationGroup
  + AWS::ElastiCache::SecurityGroup
  + AWS::ElastiCache::SecurityGroup入口
  + AWS::ElastiCache::SubnetGroup
+ [Amazon EventBridge](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_Events.html)
  + AWS::Events::EventBus
  + AWS::Events::EventBus政策
  + AWS::Events::Rule
+ [Amazon FSx](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_FSx.html)
  + AWS::FSx::FileSystem
+ [Amazon Inspector](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_Inspector.html)
  + AWS::Inspector::AssessmentTarget
  + AWS::Inspector::AssessmentTemplate
  + AWS::Inspector::ResourceGroup
+ [Amazon Kinesis Data Analytics](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_KinesisAnalytics.html)
  + AWS::KinesisAnalytics::Application
  + AWS::KinesisAnalytics::ApplicationOutput
  + AWS::KinesisAnalytics::ApplicationReferenceDataSource
+  [Amazon Kinesis Data Firehose](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_KinesisFirehose.html)
  + AWS::KinesisFirehose::DeliveryStream
+ [Amazon Kinesis Data Streams](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_Kinesis.html)
  + AWS::Kinesis::Stream
  + AWS::Kinesis::StreamConsumer
+ [Amazon MQ](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_AmazonMQ.html)
  + AWS::AmazonMQ::Broker
  + AWS::AmazonMQ::Configuration
  + AWS::AmazonMQ::ConfigurationAssociation
+ [Amazon OpenSearch](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_OpenSearchService.html)
  + AWS::OpenSearchService::Domain
+ [Amazon Relational Database Service (RDS)](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_RDS.html)
  + AWS:: RDS:: DBCluster
  + AWS:: RDS:: DBCluster ParameterGroup
  + AWS:: RDS:: DBInstance
  + AWS:: RDS:: 群组 DBParameter
  + AWS:: RDS:: 群组 DBSubnet
  + AWS::RDS::EventSubscription
  + AWS::RDS::OptionGroup
+ [Amazon Route 53](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_Route53.html)
  + AWS::Route53::HealthCheck
  + AWS::Route53::HostedZone
  + AWS::Route53::RecordSet
  + AWS::Route53::RecordSet群组
  + AWS::Route53Resolver::ResolverRule
  + AWS::Route53Resolver::ResolverRule协会
+ [Amazon S3](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_S3.html)
  + AWS::S3::Bucket
+ [亚马逊 Sagemaker](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_SageMaker.html)
  + AWS::SageMaker::CodeRepository
  + AWS::SageMaker::Endpoint
  + AWS::SageMaker::EndpointConfig
  + AWS::SageMaker::Model
  + AWS::SageMaker::NotebookInstance
  + AWS::SageMaker::NotebookInstanceLifecycleConfig
  + AWS::SageMaker::Workteam
+  [亚马逊简单电子邮件服务 (SES) Simple Service](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_SES.html)
  + AWS::SES::ConfigurationSet
  + AWS::SES::ConfigurationSetEventDestination
  + AWS::SES::ReceiptFilter
  + AWS::SES::ReceiptRule
  + AWS::SES::ReceiptRuleSet
  + AWS::SES::Template
+  [Amazon SimpleDB](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_SDB.html)
  + AWS::SDB::Domain
+ [Amazon SNS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_SNS.html)
  + AWS::SNS::Subscription
  + AWS::SNS::Topic
+ [Amazon SQS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_SQS.html)
  + AWS::SQS::Queue
+  [Amazon WorkSpaces](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_WorkSpaces.html)
  + AWS::WorkSpaces::Workspace
+ [应用程序 AutoScaling](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_ApplicationAutoScaling.html)
  + AWS::ApplicationAutoScaling::ScalableTarget
  + AWS::ApplicationAutoScaling::ScalingPolicy
+ [Amazon EC2 AutoScaling](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_AutoScaling.html)
  + AWS::AutoScaling::AutoScaling群组
  + AWS::AutoScaling::LaunchConfiguration
  + AWS::AutoScaling::LifecycleHook
  + AWS::AutoScaling::ScalingPolicy
  + AWS::AutoScaling::ScheduledAction
+ [AWS Certificate Manager](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-certificatemanager-certificate.html)
  + AWS::CertificateManager::Certificate
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_CloudFormation.html)
  + AWS::CloudFormation::CustomResource
  + AWS::CloudFormation::Designer
  + AWS::CloudFormation::WaitCondition
  + AWS::CloudFormation::WaitCondition手柄
+ [AWS CodeBuild](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_CodeBuild.html)
  + AWS::CodeBuild::Project
  + AWS::CodeBuild::ReportGroup
  + AWS::CodeBuild::SourceCredential
+  [AWS CodeCommit](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_CodeCommit.html)
  + AWS::CodeCommit::Repository
+ [AWS CodeDeploy](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_CodeDeploy.html)
  + AWS::CodeDeploy::Application
  + AWS::CodeDeploy::DeploymentConfig
  + AWS::CodeDeploy::DeploymentGroup
+ [AWS CodePipeline](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_CodePipeline.html)
  + AWS::CodePipeline::CustomAction类型
  + AWS::CodePipeline::Pipeline
  + AWS::CodePipeline::Webhook
+  [AWS 数据库迁移服务 (DMS)](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_DMS.html)
  + AWS::DMS::Certificate
  + AWS::DMS::Endpoint
  + AWS::DMS::EventSubscription
  + AWS::DMS::ReplicationInstance
  + AWS::DMS::ReplicationSubnet群组
  + AWS::DMS::ReplicationTask

  不允许使用 AWS::DMS::Endpoint 资源中的 MongoDbSettings 属性。

  以下属性仅在由 AWS Secrets Manager 解析后才允许使用： CertificatePem 以及 AWS::DMS::Certificate 资源中的属性以及 AWS::DMS::Endpoint 资源中的密码 CertificateWallet 属性。
+ [AWS Elastic Load Balancing — 应用程序负载均衡器/网络负载均衡器 Network Load Balan](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_ElasticLoadBalancingV2.html)
  + AWS::ElasticLoadBalancingV2::Listener
  + AWS::ElasticLoadBalancingV2::ListenerCertificate
  + AWS::ElasticLoadBalancingV2::ListenerRule
  + AWS::ElasticLoadBalancingV2::LoadBalancer
  + AWS::ElasticLoadBalancingV2::TargetGroup
+ [AWS 弹性负载平衡——经典负载均衡器](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_ElasticLoadBalancing.html)
  + AWS::ElasticLoadBalancing::LoadBalancer
+  [AWS Elemental MediaConvert](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_MediaConvert.html)
  + AWS::MediaConvert::JobTemplate
  + AWS::MediaConvert::Preset
  + AWS::MediaConvert::Queue
+  [AWS Elemental MediaStore](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_MediaStore.html)
  + AWS::MediaStore::Container
+  [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html)
  + AWS::IAM::Role
+  [适用于 Apache Kafka 的 AWS 托管流媒体 Kafka (MSK)](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_MSK.html)
  + AWS::MSK::Cluster
+  [AWS Glue](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_Glue.html)
  + AWS::Glue::Classifier
  + AWS::Glue::Connection
  + AWS::Glue::Crawler
  + AWS::Glue::Database
  + AWS::Glue::DataCatalogEncryptionSettings
  + AWS::Glue::DevEndpoint
  + AWS::Glue::Job
  + AWS::Glue::MLTransform
  + AWS::Glue::Partition
  + AWS::Glue::SecurityConfiguration
  + AWS::Glue::Table
  + AWS::Glue::Trigger
  + AWS::Glue::Workflow
+ [AWS 密钥管理服务 (KMS) Service](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_KMS.html)
  + AWS::KMS::Key
  + AWS::KMS::Alias
+  [AWS Lake Formation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_LakeFormation.html)
  + AWS::LakeFormation::DataLake设置
  + AWS::LakeFormation::Permissions
  + AWS::LakeFormation::Resource
+  [AWS Lambda](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_Lambda.html)
  + AWS::Lambda::Alias
  + AWS::Lambda::EventInvokeConfig
  + AWS::Lambda::EventSource映射
  + AWS::Lambda::Function
  + AWS::Lambda::LayerVersion
  + AWS::Lambda::LayerVersion权限
  + AWS::Lambda::Permission
  + AWS::Lambda::Version
+  [Amazon Redshift](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_Redshift.html)
  + AWS::Redshift::Cluster
  + AWS::Redshift::ClusterParameter群组
  + AWS::Redshift::ClusterSubnet群组
+  [AWS Secrets Manager](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_SecretsManager.html)
  + AWS::SecretsManager::ResourcePolicy
  + AWS::SecretsManager::RotationSchedule
  + AWS::SecretsManager::Secret
  + AWS::SecretsManager::SecretTarget附件
+  [AWS Security Hub](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_SecurityHub.html)
  + AWS::SecurityHub::Hub
+  [AWS Step Functions](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_StepFunctions.html)
  + AWS::StepFunctions::Activity
  + AWS::StepFunctions::StateMachine
+  [AWS Systems Manager (SSM)](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_SSM.html)
  + AWS::SSM::Parameter
+  [Amazon S CloudWatch ynthetics](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_Synthetics.html)
  + AWS::Synthetics::Canary
+  [AWS Transfer Family](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_Transfer.html)
  + AWS::Transfer::Server
  + AWS::Transfer::User
+ [AWS WAF](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_WAF.html)
  + AWS::WAF::ByteMatchSet
  + AWS:: WAF:: IPSet
  + AWS::WAF::Rule
  + AWS::WAF::SizeConstraintSet
  + AWS::WAF::SqlInjectionMatchSet
  + AWS::WAF::WebACL
  + AWS::WAF::XssMatchSet
+ [AWS WAF 区域版](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_WAFRegional.html)
  + AWS::WAFRegional::ByteMatchSet
  + AWS::WAFRegional::GeoMatchSet
  + AWS:WAFRegional::: IPSet
  + AWS::WAFRegional::RateBased规则
  + AWS::WAFRegional::RegexPatternSet
  + AWS::WAFRegional::Rule
  + AWS::WAFRegional::SizeConstraintSet
  + AWS::WAFRegional::SqlInjectionMatchSet
  + AWS::WAFRegional::WebACL
  + AWS::WAFRegional::WebACLAssociation
  + AWS::WAFRegional::XssMatchSet
+ [AWS WAFv2](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_WAFv2.html)
  + AWS:WAFv2::: IPSet
  + AWS::WAFv2::RegexPatternSet
  + AWS::WAFv2::RuleGroup
  + AWS::WAFv2::WebACL
  + AWS::WAFv2::WebACLAssociation

# CloudFormation 收录：示例
<a name="cfn-ingest-examples"></a>

在此处可以找到一些详细的示例，说明如何使用**带有 CloudFormation 模板更改类型的创建堆栈**。

要下载一组示例 CloudFormation 模板 AWS 区域，请参阅[示例模板](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-sample-templates.html)。

有关 CloudFormation 资源的参考信息，请参阅 [AWS 资源和属性类型参考](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-template-resource-type-ref.html)。但是，AMS 支持的资源集较少，如中所述[AMS CloudFormation 摄取](ams-cfn-ingest.md)。

**注意**  
AMS 建议您收集所有 IAM 或其他策略相关资源，并将其提交到单个管理 \$1 其他 \$1 其他 \$1 创建变更类型 (ct-1e1xtak34nx76) 中。例如，合并所有需要的 IAM 角色、IAM 实例配置文件、现有 IAM 角色的 IAM 策略更新、S3 存储桶 SNS/SQS 策略、策略等，然后提交 ct-1e1xtak34nx76 RFC，以便可以在未来的 CFN Ingest 模板中引用这些先前存在的资源。

**Topics**
+ [CloudFormation 摄取示例：定义资源](cfn-ingest-ex-define-resource.md)
+ [CloudFormation 采集示例：3 层 Web 应用程序](cfn-ingest-ex-3-tier.md)

# CloudFormation 摄取示例：定义资源
<a name="cfn-ingest-ex-define-resource"></a>

使用 AMS CloudFormation 采集时，您可以自定义 CloudFormation 模板并将其提交给采集更改类型 (ct-36cn2avfrrj9v) 的 CloudFormation RFC 中的 AMS。要创建可以多次重复使用的 CloudFormation 模板，您可以将堆栈配置参数添加到 CloudFormation 采集更改类型执行输入中，而不是在模板中对其进行硬编码。 CloudFormation 最大的好处是你可以重复使用该模板。

AMS CloudFormation 采集更改类型输入架构允许您在 CloudFormation 模板中选择多达 60 个参数并提供自定义值。

此示例说明如何将可用于各种 CloudFormation 模板的资源属性定义为 AMS CloudFormation 采集 CT 中的参数。本节中的示例专门展示了 SNS 主题的用法。

**Topics**
+ [示例 1：对 CloudFormation SNSTopic 资源`TopicName`属性进行硬编码](#cfn-ingest-example-1)
+ [示例 2：使用 SNSTopic 资源引用 AMS 更改类型中的参数](#cfn-ingest-example-2)
+ [示例 3：通过提交具有 AMS 采集更改类型的 JSON 执行参数文件来创建 SNS 主题](#cfn-ingest-example-3)
+ [示例 4：提交引用相同 CloudFormation 模板的新变更类型](#cfn-ingest-example-4)
+ [示例 5：使用 CloudFormation 模板中的默认参数值](#cfn-ingest-example-5)

## 示例 1：对 CloudFormation SNSTopic 资源`TopicName`属性进行硬编码
<a name="cfn-ingest-example-1"></a>

在此示例中，您在 CloudFormation 模板中对 CloudFormation SNSTopic 资源`TopicName`属性进行了硬编码。请注意，该`Parameters`部分为空。

要拥有一个允许您无需创建新 CloudFormation 模板即可更改新堆栈 SNSTopic 名称值的 CloudFormation 模板，您可以使用载入更改类型的 AMS `Parameters` 部分进行该配置。 CloudFormation 通过执行此操作，您可以稍后使用相同的 CloudFormation 模板来创建具有不同`SNSTopic`名称的新堆栈。

```
{
  "AWSTemplateFormatVersion" : "2010-09-09",
  "Description" : "My SNS Topic",
  "Parameters" : {
  },
  "Resources" : {
    "SNSTopic" : {
      "Type" : "AWS::SNS::Topic",
      "Properties" : {
        "TopicName" : "MyTopicName"
      }
    }
  }
}
```



## 示例 2：使用 SNSTopic 资源引用 AMS 更改类型中的参数
<a name="cfn-ingest-example-2"></a>

在此示例中，您使用 CloudFormation 模板中定义的`SNSTopic`资源`TopicName`属性来引用 AMS 更改类型`Parameter`中的。

```
{
  "AWSTemplateFormatVersion" : "2010-09-09",
  "Description" : "My SNS Topic",
  "Parameters" : {
    "TopicName" : {
      "Type" : "String",
      "Description" : "Topic ID",
      "Default" : "MyTopicName"
    }
  },
  "Resources" : {
    "SNSTopic" : {
      "Type" : "AWS::SNS::Topic",
      "Properties" : {
        "TopicName" : { "Ref" : "TopicName"}
      }
    }
  }
}
```

## 示例 3：通过提交具有 AMS 采集更改类型的 JSON 执行参数文件来创建 SNS 主题
<a name="cfn-ingest-example-3"></a>

在此示例中，您提交了一个 JSON 执行参数文件，其中包含创建 SNS 主题的 AMS 收录 CT。`TopicName`必须按照本示例中显示的可修改方式在 CloudFormation 模板中定义 SNS 主题。

```
{
  "Name": "cfn-ingest",
  "Description": "CFNIngest Web Application Stack",
  "CloudFormationTemplateS3Endpoint": "$S3_PRESIGNED_URL",
  "VpcId": "VPC_ID",
  "Tags": [
    {"Key": "Enviroment Type", "Value": "Dev"}
  ],
  "Parameters": [
    {"Name": "TopicName", "Value": "MyTopic1"}
  ],
  "TimeoutInMinutes": 60
}
```

## 示例 4：提交引用相同 CloudFormation 模板的新变更类型
<a name="cfn-ingest-example-4"></a>

此 JSON 示例在不更改 CloudFormation 模板的情况下更改 SNS `TopicName` 值。相反，您可以提交引用相同 CFN CloudFormation 模板的新部署 \$1 Ingestion \$1 Stack from Template \$1 Create 更改类型。

```
{
  "Name": "cfn-ingest",
  "Description": "CFNIngest Web Application Stack",
  "CloudFormationTemplateS3Endpoint": "$S3_PRESIGNED_URL",
  "VpcId": "VPC_ID",
  "Tags": [
    {"Key": "Enviroment Type", "Value": "Dev"}
  ],
  "Parameters": [
    {"Name": "TopicName", "Value": "MyTopic2"}
  ],
  "TimeoutInMinutes": 60
}
```

## 示例 5：使用 CloudFormation 模板中的默认参数值
<a name="cfn-ingest-example-5"></a>

在此示例中，之所以创建 SNS `TopicName` = MyTopicName '，是因为`Parameters`执行参数中未提供任何`TopicName`值。如果您不提供`Parameters`定义，则使用 CloudFormation 模板中的默认参数值。

```
{
  "Name": "cfn-ingest",
  "Description": "CFNIngest Web Application Stack",
  "CloudFormationTemplateS3Endpoint": "$S3_PRESIGNED_URL",
  "VpcId": "VPC_ID",
  "Tags": [
    {"Key": "Enviroment Type", "Value": "Dev"}
  ],
  "TimeoutInMinutes": 60
}
```

# CloudFormation 采集示例：3 层 Web 应用程序
<a name="cfn-ingest-ex-3-tier"></a>

为标准 3 层 Web 应用程序采集 CloudFormation 模板。

![\[AWS 云 architecture diagram showing VPC with two availability zones, load balancer, and multi-AZ RDS setup.\]](http://docs.aws.amazon.com/zh_cn/managedservices/latest/appguide/images/cfn-ingest-ex-3-tier.png)


这包括应用程序负载均衡器、应用程序负载均衡器目标组、Auto Scaling 组、Auto Scaling 组启动模板、带有 MySQL 数据库的亚马逊关系数据库服务（适用于 SQL Server 的 RDS）、 AWS SSM 参数存储和 S AWS ecrets Manager。请等待 30-60 分钟来完成此示例。

## 先决条件
<a name="cfn-ingest-ex-3-tier-prerequisites"></a>
+ 使用 Secrets Manager 创建包含用户名和密码以及相应值的 AWS 密钥。您可以参考包含密钥名称的[示例 JSON 模板（zip 文件）](samples/3-tier-cfn-ingest-2025.zip)`ams-shared/myapp/dev/dbsecrets`，并将其替换为您的密钥名称。有关将 S AWS ecrets Manager 与 AMS 配合使用的信息，请参阅[将 S AWS ecrets Manager 与 AMS 资源配合使用](secrets-manager.md)。
+ 在 AWS SSM 参数存储 (PS) 中设置必需的参数。在此示例中，私有子网`VPCId`和`Subnet-Id`公有子网的和存储在 SSM PS 中，路径如`/app/DemoApp/PublicSubnet1a`、`PublicSubnet1c``PrivateSubnet1a`、`PrivateSubnet1c`和。`VPCCidr`根据需要更新路径、参数名称和值。
+ 创建一个 IAM Amazon EC2 实例角色，该角色具有对 S AWS ecrets Manager 和 SSM 参数存储路径的读取权限（这些示例中创建和使用的 IAM 角色是`customer-ec2_secrets_manager_instance_profile`）。如果您创建 IAM 标准策略，例如实例配置文件角色，则角色名称必须以开头。`customer-`要创建新的 IAM 角色，（你可以给它`customer-ec2_secrets_manager_instance_profile`起名字或其他名字）使用 AMS 更改类型管理 \$1 应用程序 \$1 IAM 实例配置文件 \$1 创建 (ct-0ixp4ch2tiu04) CT，然后附加所需的策略。您可以在 IAM 控制台中查看 AMS AWS IAM 标准策略`customer_secrets_manager_policy`和`customer_systemsmanager_parameterstore_policy`，以便按原样使用或作为参考。

## 摄取标准 3 层 Web 应用程序的 CloudFormation 模板
<a name="cfn-ingest-ex-3-tier-procedure"></a>

1. 将随附的示例 CloudFormation JSON 模板作为 zip 文件（[3-tier-cfn-ingest .zip](samples/3-tier-cfn-ingest-2025.zip)）上传到 S3 存储桶，然后生成签名的 S3 网址以在 CFN Ingest RFC 中使用。有关更多信息，请参阅 [presign](https://docs.aws.amazon.com/cli/latest/reference/s3/presign.html)。当你通过 AMS 控制台提交 RFC 时，CFN 模板也可以 copy/pasted 放在 CFN Ingest RFC 中。

1. 通过 AMS 控制台 CloudFormation 或 AMS CLI 创建 Ingest RFC（部署 \$1 Ingestion \$1 来自 CloudFormation 模板的堆栈 \$1 创建 (ct-36cn2avfrrj9v)）。 CloudFormation 采集自动化流程会对 CloudFormation 模板进行验证，以确保该模板具有 AMS 支持的有效资源并符合安全标准。
   + 使用控制台-对于更改类型，**从 “ CloudFormation 模板”-> “**创建**” 中选择 “**部署**”-> “接**收**”-> “堆栈**”，然后添加以下参数作为示例（请注意，“**多**” 的默认值AZDatabase为 false）：

     ```
     CloudFormationTemplateS3Endpoint: "https://s3-ap-southeast-2.amazonaws.com/amzn-s3-demo-bucket/3-tier-cfn-ingest.json?AWSAccessKeyId=#{S3_ACCESS_KEY_ID}&Expires=#{EXPIRE_DATE}&Signature=#{SIGNATURE}"
     VpcId: "VPC_ID"
     TimeoutInMinutes: 120
     IAMEC2InstanceProfile: "customer_ec2_secrets_manager_instance_profile"
     MultiAZDatabase: "true"
     WebServerCapacity: "2"
     ```
   + 使用 AWS CLI -有关 RFCs 使用创建的详细信息 AWS CLI，请参阅[创建 RFCs](https://docs.aws.amazon.com/managedservices/latest/userguide/create-rfcs.html)。例如，运行以下命令：

     ```
     aws --profile=saml amscm create-rfc  --change-type-id ct-36cn2avfrrj9v --change-type-version "2.0" --title "TEST_CFN_INGEST" --execution-parameters "{\"CloudFormationTemplateS3Endpoint\":\"https://s3-ap-southeast-2.amazonaws.com/my-bucket/3-tier-cfn-ingest.json?AWSAccessKeyId=#{S3_ACCESS_KEY_ID}&Expires=#{EXPIRE_DATE}&Signature=#{SIGNATURE}\",\"TimeoutInMinutes\":120,\"Description\":\"TEST\",\”VpcId”\”:\”VPC_ID\”,\"Name\":\"MY_TEST\",\"Tags\":[{\"Key\":\"env\",\"Value\":\"test\"}],\"Parameters\":[{\"Name\":\"IAMEC2InstanceProfile\",\"Value\":\"customer_ec2_secrets_manager_instance_profile\"},{\"Name\":\"MultiAZDatabase\",\"Value\":\"true\"},{\"Name\":\"VpcId\",\"Value\":\"VPC_ID\"},{\"Name\":\"WebServerCapacity\",\"Value\":\"2\"}]}" --endpoint-url https://amscm.us-east-1.amazonaws.com/operational/ --no-verify-ssl
     ```

   在 CloudFormation RFC 执行输出中找到 Application Load Balancer 网址以访问该网站。有关访问资源的信息，请参阅[访问实例](https://docs.aws.amazon.com/managedservices/latest/userguide/access-instance.html)。

## 创建 CloudFormation 采集堆栈
<a name="ex-cfn-ingest-create-col"></a>

### 使用控制台创建 CloudFormation 采集堆栈
<a name="cfn-ingest-create-con"></a>

![\[Create Stack From CloudFormation Template interface showing description, ID, and version.\]](http://docs.aws.amazon.com/zh_cn/managedservices/latest/appguide/images/guiCfnIngestCT.png)


**使用控制台创建 CloudFormation 采集堆栈**

1. 导航到 “**创建 RFC**” 页面：在 AMS 控制台的左侧导航窗格中，单击**RFCs**打开 RFCs 列表页面，然后单击 “**创建 R** FC”。

1. 在默认的 “**浏览更改类型” 视图中选择常用更改类型** (CT)，或者在 “**按类别选择” 视图中选择** CT。
   + **按更改类型浏览**：您可以单击 “**快速创建**” 区域中的常用 CT，立即打开 “**运行 RFC**” 页面。请注意，您不能使用快速创建来选择较旧的 CT 版本。

     要进行排序 CTs，请使用**卡片**视图或**表格**视图中的**所有更改类型**区域。在任一视图中，选择一个 CT，然后单击 “**创建 RFC**” 打开 “**运行 RFC**” 页面。如果适用，“**创建 RFC” 按钮旁边会出现 “使用旧版本****创建**” 选项。
   + **按类别选择：选择类别**、子类别、项目和操作，CT 详细信息框将打开，并显示 “使用**旧版本创建**” 选项（如果适用）。单击 “**创建 RFC**” 打开 “**运行 RFC**” 页面。

1. 在 “**运行 RFC**” 页面上，打开 CT 名称区域以查看 CT 详细信息框。必须填写**主题**（如果您在 “**浏览更改类型**” 视图中选择 CT，则会为您填写此主题）。打开**其他配置**区域以添加有关 RFC 的信息。

   在**执行配置**区域中，使用可用的下拉列表或输入所需参数的值。要配置可选的执行参数，请打开**其他配置**区域。

1. 完成后，单击 “**运行**”。如果没有错误，则会显示**成功创建的 RFC** 页面，其中包含已提交的 RFC 详细信息和初始**运行**输出。

1. 打开**运行参数**区域以查看您提交的配置。刷新页面以更新 RFC 的执行状态。（可选）取消 RFC 或使用页面顶部的选项创建一个 RFC 的副本。

### 使用 CL CloudFormation I 创建采集堆栈
<a name="cfn-ingest-create-cli"></a>

**使用 CL CloudFormation I 创建采集堆栈**

1. 使用 Inline Create（您发出包含所有 RFC 和执行参数的`create-rfc`命令）或模板创建（创建两个 JSON 文件，一个用于 RFC 参数，一个用于执行参数），然后以这两个文件作为输入发出`create-rfc`命令。这里描述了这两种方法。

1. 提交带有返回的 RFC ID 的 RFC: `aws amscm submit-rfc --rfc-id ID` 命令。

   监控 RFC: `aws amscm get-rfc --rfc-id ID` 命令。

要检查更改类型版本，请使用以下命令：

```
aws amscm list-change-type-version-summaries --filter Attribute=ChangeTypeId,Value=CT_ID
```
**注意**  
您可以将任何`CreateRfc`参数与任何 RFC 一起使用，无论它们是否属于变更类型的架构的一部分。例如，要在 RFC 状态更改时收到通知，请将此行添加到请求的 RFC 参数部分（不是执行参数）。`--notification "{\"Email\": {\"EmailRecipients\" : [\"email@example.com\"]}}"`有关所有 CreateRfc 参数的列表，请参阅《[AMS 变更管理 API 参考](https://docs.aws.amazon.com/managedservices/latest/ApiReference-cm/API_CreateRfc.html)》。

1. 准备用于创建堆栈的 CloudFormation 模板，然后将其上传到您的 S3 存储桶。有关重要详情，请参阅 [AWS CloudFormation Ingest 指南、最佳实践和限制](https://docs.aws.amazon.com/managedservices/latest/appguide/cfn-author-templates.html)。

1. 创建 RFC 并将其提交给 AMS：

   1. 创建并保存执行参数 JSON 文件，包括所需的 CloudFormation 模板参数。以下示例将其命名为 CreateCfnParams .json。

     Web 应用程序堆栈 CreateCfnParams .json 文件示例：

     ```
     {
       "Name": "cfn-ingest",
       "Description": "CFNIngest Web Application Stack",
       "VpcId": "VPC_ID",
       "CloudFormationTemplateS3Endpoint": "$S3_URL",
       "TimeoutInMinutes": 120,
       "Tags": [
        {
         "Key":   "Enviroment Type"
         "Value": "Dev",
        },
        {
         "Key":   "Application"
         "Value": "PCS",
        }
       ],
       "Parameters": [
        {
         "Name": "Parameter-for-S3Bucket-Name",
         "Value":  "BUCKET-NAME"
        },
        {
         "Name": "Parameter-for-Image-Id",
         "Value":  "AMI-ID"
        }
       ],
     }
     ```

     SNS 主题 CreateCfnParams .json 文件示例：

     ```
     {
       "Name": "cfn-ingest",
       "Description": "CFNIngest Web Application Stack",
       "CloudFormationTemplateS3Endpoint": "$S3_URL",
       "Tags": [
         {"Key": "Enviroment Type", "Value": "Dev"}
       ],
       "Parameters": [
         {"Name": "TopicName", "Value": "MyTopic1"}
       ]
     }
     ```

1. 创建并保存包含以下内容的 RFC 参数 JSON 文件。以下示例将其命名为 CreateCfnRfc .json 文件：

   ```
   {
      "ChangeTypeId": "ct-36cn2avfrrj9v",
      "ChangeTypeVersion": "2.0",
      "Title": "cfn-ingest"
   }
   ```

1. 创建 RFC，指定 CreateCfnRfc 文件和 CreateCfnParams 文件：

   ```
   aws amscm create-rfc --cli-input-json file://CreateCfnRfc.json  --execution-parameters file://CreateCfnParams.json
   ```

   您在响应中收到新 RFC 的 ID，并可以使用它来提交和监控 RFC。在您提交之前，RFC 仍处于编辑状态且无法启动。

### 提示
<a name="ex-cfn-ingest-create-tip"></a>

**注意**  
此更改类型为版本 2.0，并且是自动的（不是手动执行的）。这样可以更快地执行 CT，而且，一个新参数允许您将自定义 CloudFormation 模板粘贴到 RFC 中。**CloudFormationTemplate**此外，在此版本中，如果您指定了自己的安全组，我们不会附加默认 AMS 安全组。如果您未在请求中指定自己的安全组，AMS 将附加 AMS 默认安全组。在 CFN Ingest v1.0 中，无论您是否提供了自己的安全组，我们都会附加 AMS 默认安全组。  
AMS 已启用 17 项 AMS 自行配置服务以用于此变更类型。有关支持的资源的信息，请参阅 [ CloudFormation Ingest Stack：支持的资源](https://docs.aws.amazon.com/managedservices/latest/appguide/cfn-ingest-supp-services.html)。

**注意**  
版本 2.0 接受不是预签名 URL 的 S3 终端节点。  
如果您使用此 CT 的先前版本，则 **CloudFormationTemplateS3Endpoint 参数**值必须是预签名 URL。  
生成预签名 S3 存储桶 URL 的命令示例 (Mac/Linux)：  

```
export S3_PRESIGNED_URL=$(aws s3 presign DASHDASHexpires-in 86400 s3://BUCKET_NAME/CFN_TEMPLATE.json)
```
生成预签名 S3 存储桶 URL 的命令示例 (Windows)：  

```
for /f %i in ('aws s3 presign DASHDASHexpires-in 86400 s3://BUCKET_NAME/CFN_TEMPLATE.json') do set S3_PRESIGNED_URL=%i
```
另请参阅[ URLs 为 Amazon S3 存储桶创建预签名存储桶](https://docs.aws.amazon.com/sdk-for-go/v1/developer-guide/s3-example-presigned-urls.html)。

**注意**  
如果 S3 存储桶存在于 AMS 账户中，则必须使用您的 AMS 凭据执行此命令。例如，您可能需要`--profile saml`在获取 AMS AWS Security Token Service (AWS STS) 凭证后追加。

相关变更类型：[批准 CloudFormation 采集堆栈变更集](#ex-cfn-ingest-approve-and-update-col)，[更新 CloudFormation 采集堆栈](#ex-cfn-ingest-update-col)

要了解有关 AWS 的更多信息 CloudFormation，请参阅 AW [S CloudFormation](https://aws.amazon.com/cloudformation/)。要查看 CloudFormation 模板，请打开 AWS CloudFormation [模板参考](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-reference.html)。

### 验证收录 CloudFormation
<a name="cfn-ingest-validation"></a>

模板经过验证以确保可以在 AMS 账户中创建。如果通过验证，则会对其进行更新，使其包含符合 AMS 要求的所有资源或配置。这包括添加诸如 Amazon CloudWatch 警报之类的资源，以允许 AMS 运营部门监控堆栈。

如果满足以下任一条件，则 RFC 将被拒绝：
+ RFC JSON 语法不正确或不符合给定格式。
+ 提供的 S3 存储桶预签名 URL 无效。
+ 模板的 CloudFormation 语法无效。
+ 该模板没有为所有参数值设置默认值。
+ 模板未通过 AMS 验证。有关 AMS 验证步骤，请参阅本主题后面的信息。

如果由于资源创建问题导致 CloudFormation 堆栈创建失败，则 RFC 将失败。

要了解有关 CFN 验证和验证器的更多信息，请参阅[模板验证和CloudFormation 采集堆栈：CFN 验证](https://docs.aws.amazon.com/managedservices/latest/appguide/cfn-author-templates.html)[器](https://docs.aws.amazon.com/managedservices/latest/appguide/ex-cfn-ingest-validator.html)示例。

## 更新 CloudFormation 采集堆栈
<a name="ex-cfn-ingest-update-col"></a>

### 使用控制台更新 CloudFormation 采集堆栈
<a name="cfn-ingest-update-con"></a>

![\[CloudFormation stack update interface showing description, ID, and version details.\]](http://docs.aws.amazon.com/zh_cn/managedservices/latest/appguide/images/guiCfnStackUpdateCT-v2.png)


**使用控制台更新 CloudFormation 收录堆栈**

1. 导航到 “**创建 RFC**” 页面：在 AMS 控制台的左侧导航窗格中，单击**RFCs**打开 RFCs 列表页面，然后单击 “**创建 R** FC”。

1. 在默认的 “**浏览更改类型” 视图中选择常用更改类型** (CT)，或者在 “**按类别选择” 视图中选择** CT。
   + **按更改类型浏览**：您可以单击 “**快速创建**” 区域中的常用 CT，立即打开 “**运行 RFC**” 页面。请注意，您不能使用快速创建来选择较旧的 CT 版本。

     要进行排序 CTs，请使用**卡片**视图或**表格**视图中的**所有更改类型**区域。在任一视图中，选择一个 CT，然后单击 “**创建 RFC**” 打开 “**运行 RFC**” 页面。如果适用，“**创建 RFC” 按钮旁边会出现 “使用旧版本****创建**” 选项。
   + **按类别选择：选择类别**、子类别、项目和操作，CT 详细信息框将打开，并显示 “使用**旧版本创建**” 选项（如果适用）。单击 “**创建 RFC**” 打开 “**运行 RFC**” 页面。

1. 在 “**运行 RFC**” 页面上，打开 CT 名称区域以查看 CT 详细信息框。必须填写**主题**（如果您在 “**浏览更改类型**” 视图中选择 CT，则会为您填写此主题）。打开**其他配置**区域以添加有关 RFC 的信息。

   在**执行配置**区域中，使用可用的下拉列表或输入所需参数的值。要配置可选的执行参数，请打开**其他配置**区域。

1. 完成后，单击 “**运行**”。如果没有错误，则会显示**成功创建的 RFC** 页面，其中包含已提交的 RFC 详细信息和初始**运行**输出。

1. 打开**运行参数**区域以查看您提交的配置。刷新页面以更新 RFC 的执行状态。（可选）取消 RFC 或使用页面顶部的选项创建一个 RFC 的副本。

### 使用 CL CloudFormation I 更新采集堆栈
<a name="cfn-ingest-update-cli"></a>

**使用 CL CloudFormation I 更新采集堆栈**

1. 使用 Inline Create（您发出包含所有 RFC 和执行参数的`create-rfc`命令）或模板创建（创建两个 JSON 文件，一个用于 RFC 参数，一个用于执行参数），然后以这两个文件作为输入发出`create-rfc`命令。这里描述了这两种方法。

1. 提交带有返回的 RFC ID 的 RFC: `aws amscm submit-rfc --rfc-id ID` 命令。

   监控 RFC: `aws amscm get-rfc --rfc-id ID` 命令。

要检查更改类型版本，请使用以下命令：

```
aws amscm list-change-type-version-summaries --filter Attribute=ChangeTypeId,Value=CT_ID
```
**注意**  
您可以将任何`CreateRfc`参数与任何 RFC 一起使用，无论它们是否属于变更类型的架构的一部分。例如，要在 RFC 状态更改时收到通知，请将此行添加到请求的 RFC 参数部分（不是执行参数）。`--notification "{\"Email\": {\"EmailRecipients\" : [\"email@example.com\"]}}"`有关所有 CreateRfc 参数的列表，请参阅《[AMS 变更管理 API 参考](https://docs.aws.amazon.com/managedservices/latest/ApiReference-cm/API_CreateRfc.html)》。

1. 准备要用于更新堆栈的 CloudFormation 模板，然后将其上传到您的 S3 存储桶。有关重要详情，请参阅 [AWS CloudFormation Ingest 指南、最佳实践和限制](https://docs.aws.amazon.com/managedservices/latest/appguide/cfn-author-templates.html)。

1. 创建 RFC 并将其提交给 AMS：

   1. 创建并保存执行参数 JSON 文件，包括所需的 CloudFormation 模板参数。此示例将其命名为 UpdateCfnParams .json。

     包含内联参数更新的 UpdateCfnParams .json 文件示例：

     ```
     {
       "StackId": "stack-yjjoo9aicjyqw4ro2",
       "VpcId": "VPC_ID",
       "CloudFormationTemplate": "{\"AWSTemplateFormatVersion\":\"2010-09-09\",\"Description\":\"Create a SNS topic\",\"Parameters\":{\"TopicName\":{\"Type\":\"String\"},\"DisplayName\":{\"Type\":\"String\"}},\"Resources\":{\"SnsTopic\":{\"Type\":\"AWS::SNS::Topic\",\"Properties\":{\"TopicName\":{\"Ref\":\"TopicName\"},\"DisplayName\":{\"Ref\":\"DisplayName\"}}}}}",
       "TemplateParameters": [
         {
           "Key": "TopicName",
           "Value": "TopicNameCLI"
         },
         {
           "Key": "DisplayName",
           "Value": "DisplayNameCLI"
         }
       ],
       "TimeoutInMinutes": 1440
     }
     ```

     带有 S3 存储桶端点的 UpdateCfnParams .json 文件示例，其中包含更新后的 CloudFormation 模板：

     ```
     {
       "StackId": "stack-yjjoo9aicjyqw4ro2",
       "VpcId": "VPC_ID",
       "CloudFormationTemplateS3Endpoint": "s3_url",
       "TemplateParameters": [
         {
           "Key": "TopicName",
           "Value": "TopicNameCLI"
         },
         {
           "Key": "DisplayName",
           "Value": "DisplayNameCLI"
         }
       ],
       "TimeoutInMinutes": 1080
     }
     ```

1. 创建并保存包含以下内容的 RFC 参数 JSON 文件。此示例将其命名为 UpdateCfnRfc .json 文件。

   ```
   {
      "ChangeTypeId": "ct-361tlo1k7339x",
      "ChangeTypeVersion": "1.0",
      "Title": "cfn-ingest-template-update"
   }
   ```

1. 创建 RFC，指定 UpdateCfnRfc 文件和 UpdateCfnParams 文件：

   ```
   aws amscm create-rfc --cli-input-json file://UpdateCfnRfc.json  --execution-parameters file://UpdateCfnParams.json
   ```

   您在响应中收到新 RFC 的 ID，并可以使用它来提交和监控 RFC。在您提交之前，RFC 仍处于编辑状态且无法启动。

### 提示
<a name="ex-cfn-ingest-update-tip"></a>
+ 此更改类型现在是 2.0 版。更改包括删除此 CT 版本 1.0 中使用的**AutoApproveUpdateForResources**参数，以及添加两个新参数：**AutoApproveRiskyUpdates**和**BypassDriftCheck**。
+ 如果 S3 存储桶存在于 AMS 账户中，则必须使用您的 AMS 凭据执行此命令。例如，您可能需要`--profile saml`在获取 AMS AWS Security Token Service (AWS STS) 凭证后追加。
+  CloudFormation 模板中资源的所有`Parameter`值都必须有一个值，可以是默认值，也可以是通过 CT 参数部分的自定义值。您可以通过构造 CloudFormation 模板资源来引用 Parameters 键来覆盖参数值。有关演示操作方法的示例，请参阅[CloudFormation 采集堆栈：CFN 验证器](https://docs.aws.amazon.com/managedservices/latest/appguide/ex-cfn-ingest-validator.html)示例。

  重要：缺少表单中未明确提供的参数，默认为现有堆栈或模板上当前设置的值。
+ 有关您可以使用 CloudFormation Ingest 添加哪些自行配置服务的列表，请参阅载入[堆栈：CloudFormation 支持的资源](https://docs.aws.amazon.com/managedservices/latest/appguide/cfn-ingest-supp-services.html)。

  要了解 CloudFormation更多信息，请参阅 [AWS CloudFormation](https://aws.amazon.com/cloudformation/)。

### 验证收录 CloudFormation
<a name="cfn-ingest-validation"></a>

模板经过验证以确保可以在 AMS 账户中创建。如果通过验证，则会对其进行更新，使其包含符合 AMS 要求的所有资源或配置。这包括添加诸如 Amazon CloudWatch 警报之类的资源，以允许 AMS 运营部门监控堆栈。

如果满足以下任一条件，则 RFC 将被拒绝：
+ RFC JSON 语法不正确或不符合给定格式。
+ 提供的 S3 存储桶预签名 URL 无效。
+ 模板的 CloudFormation 语法无效。
+ 该模板没有为所有参数值设置默认值。
+ 模板未通过 AMS 验证。有关 AMS 验证步骤，请参阅本主题后面的信息。

如果由于资源创建问题导致 CloudFormation 堆栈创建失败，则 RFC 将失败。

要了解有关 CFN 验证和验证器的更多信息，请参阅[模板验证和CloudFormation 采集堆栈：CFN 验证](https://docs.aws.amazon.com/managedservices/latest/appguide/cfn-author-templates.html)[器](https://docs.aws.amazon.com/managedservices/latest/appguide/ex-cfn-ingest-validator.html)示例。

## 批准 CloudFormation 采集堆栈变更集
<a name="ex-cfn-ingest-approve-and-update-col"></a>

### 使用控制台批准和更新 CloudFormation 采集堆栈
<a name="cfn-ingest-approve-update-con"></a>

![\[Details of a CloudFormation ChangeSet for approving and updating a stack, including ID and execution mode.\]](http://docs.aws.amazon.com/zh_cn/managedservices/latest/appguide/images/guiCfnStackApproveAndUpdateCT.png)


**使用控制台批准和更新 CloudFormation 采集堆栈**

1. 导航到 “**创建 RFC**” 页面：在 AMS 控制台的左侧导航窗格中，单击**RFCs**打开 RFCs 列表页面，然后单击 “**创建 R** FC”。

1. 在默认的 “**浏览更改类型” 视图中选择常用更改类型** (CT)，或者在 “**按类别选择” 视图中选择** CT。
   + **按更改类型浏览**：您可以单击 “**快速创建**” 区域中的常用 CT，立即打开 “**运行 RFC**” 页面。请注意，您不能使用快速创建来选择较旧的 CT 版本。

     要进行排序 CTs，请使用**卡片**视图或**表格**视图中的**所有更改类型**区域。在任一视图中，选择一个 CT，然后单击 “**创建 RFC**” 打开 “**运行 RFC**” 页面。如果适用，“**创建 RFC” 按钮旁边会出现 “使用旧版本****创建**” 选项。
   + **按类别选择：选择类别**、子类别、项目和操作，CT 详细信息框将打开，并显示 “使用**旧版本创建**” 选项（如果适用）。单击 “**创建 RFC**” 打开 “**运行 RFC**” 页面。

1. 在 “**运行 RFC**” 页面上，打开 CT 名称区域以查看 CT 详细信息框。必须填写**主题**（如果您在 “**浏览更改类型**” 视图中选择 CT，则会为您填写此主题）。打开**其他配置**区域以添加有关 RFC 的信息。

   在**执行配置**区域中，使用可用的下拉列表或输入所需参数的值。要配置可选的执行参数，请打开**其他配置**区域。

1. 完成后，单击 “**运行**”。如果没有错误，则会显示**成功创建的 RFC** 页面，其中包含已提交的 RFC 详细信息和初始**运行**输出。

1. 打开**运行参数**区域以查看您提交的配置。刷新页面以更新 RFC 的执行状态。（可选）取消 RFC 或使用页面顶部的选项创建一个 RFC 的副本。

### 使用 CLI 批准和 CloudFormation 更新采集堆栈
<a name="cfn-ingest-approve-update-cli"></a>

**使用 CLI 批准和更新 CloudFormation 采集堆栈**

1. 使用 Inline Create（您发出包含所有 RFC 和执行参数的`create-rfc`命令）或模板创建（创建两个 JSON 文件，一个用于 RFC 参数，一个用于执行参数），然后以这两个文件作为输入发出`create-rfc`命令。这里描述了这两种方法。

1. 提交带有返回的 RFC ID 的 RFC: `aws amscm submit-rfc --rfc-id ID` 命令。

   监控 RFC: `aws amscm get-rfc --rfc-id ID` 命令。

要检查更改类型版本，请使用以下命令：

```
aws amscm list-change-type-version-summaries --filter Attribute=ChangeTypeId,Value=CT_ID
```
**注意**  
您可以将任何`CreateRfc`参数与任何 RFC 一起使用，无论它们是否属于变更类型的架构的一部分。例如，要在 RFC 状态更改时收到通知，请将此行添加到请求的 RFC 参数部分（不是执行参数）。`--notification "{\"Email\": {\"EmailRecipients\" : [\"email@example.com\"]}}"`有关所有 CreateRfc 参数的列表，请参阅《[AMS 变更管理 API 参考](https://docs.aws.amazon.com/managedservices/latest/ApiReference-cm/API_CreateRfc.html)》。

1. 将此更改类型的执行参数 JSON 架构输出到当前文件夹中的文件。这个例子把它命名为 CreateAsgParams .json：

   ```
   aws amscm create-rfc --change-type-id "ct-1404e21baa2ox" --change-type-version "1.0" --title "Approve Update" --execution-parameters file://PATH_TO_EXECUTION_PARAMETERS --profile saml
   ```

1. 按如下方式修改并保存架构：

   ```
   {
     "StackId": "STACK_ID",
     "VpcId": "VPC_ID",
     "ChangeSetName": "UPDATE-ef81e2bc-03f6-4b17-a3c7-feb700e78faa",
     "TimeoutInMinutes": 1080
   }
   ```

### 提示
<a name="ex-cfn-ingest-approve-and-update-tip"></a>

**注意**  
如果堆栈中有多个资源，并且您只想删除堆栈资源的子集，请使用 Update CT；请参阅 [CloudFormation Ingest Stack： CloudFormation 更新](https://docs.aws.amazon.com/managedservices/latest/appguide/ex-cfn-ingest-update-col.html)。您也可以提交服务请求案例，如果需要，AMS 工程师可以帮助您制作变更集。

要了解更多信息 AWS CloudFormation，请参阅[AWS CloudFormation](https://aws.amazon.com/cloudformation/)。

## 更新 CloudFormation 堆栈终止保护
<a name="ex-cfn-term-pro-update-col"></a>

### 使用控制台更新 CloudFormation 终止保护堆栈
<a name="cfn-update-term-pro-con"></a>

下面显示了 AMS 控制台中的此更改类型。

![\[Update Termination Protection interface showing description, ID, and version fields.\]](http://docs.aws.amazon.com/zh_cn/managedservices/latest/appguide/images/guiCfnProTermUpdateCT.png)


工作原理：

1. 导航到 “**创建 RFC**” 页面：在 AMS 控制台的左侧导航窗格中，单击**RFCs**打开 RFCs 列表页面，然后单击 “**创建 R** FC”。

1. 在默认的 “**浏览更改类型” 视图中选择常用更改类型** (CT)，或者在 “**按类别选择” 视图中选择** CT。
   + **按更改类型浏览**：您可以单击 “**快速创建**” 区域中的常用 CT，立即打开 “**运行 RFC**” 页面。请注意，您不能使用快速创建来选择较旧的 CT 版本。

     要进行排序 CTs，请使用**卡片**视图或**表格**视图中的**所有更改类型**区域。在任一视图中，选择一个 CT，然后单击 “**创建 RFC**” 打开 “**运行 RFC**” 页面。如果适用，“**创建 RFC” 按钮旁边会出现 “使用旧版本****创建**” 选项。
   + **按类别选择：选择类别**、子类别、项目和操作，CT 详细信息框将打开，并显示 “使用**旧版本创建**” 选项（如果适用）。单击 “**创建 RFC**” 打开 “**运行 RFC**” 页面。

1. 在 “**运行 RFC**” 页面上，打开 CT 名称区域以查看 CT 详细信息框。必须填写**主题**（如果您在 “**浏览更改类型**” 视图中选择 CT，则会为您填写此主题）。打开**其他配置**区域以添加有关 RFC 的信息。

   在**执行配置**区域中，使用可用的下拉列表或输入所需参数的值。要配置可选的执行参数，请打开**其他配置**区域。

1. 完成后，单击 “**运行**”。如果没有错误，则会显示**成功创建的 RFC** 页面，其中包含已提交的 RFC 详细信息和初始**运行**输出。

1. 打开**运行参数**区域以查看您提交的配置。刷新页面以更新 RFC 的执行状态。（可选）取消 RFC 或使用页面顶部的选项创建一个 RFC 的副本。

### 使用 CLI 更新 CloudFormation 堆栈终止保护
<a name="cfn-update-term-pro-cli"></a>

工作原理：

1. 使用 Inline Create（您发出包含所有 RFC 和执行参数的`create-rfc`命令）或模板创建（创建两个 JSON 文件，一个用于 RFC 参数，一个用于执行参数），然后以这两个文件作为输入发出`create-rfc`命令。这里描述了这两种方法。

1. 提交带有返回的 RFC ID 的 RFC: `aws amscm submit-rfc --rfc-id ID` 命令。

   监控 RFC: `aws amscm get-rfc --rfc-id ID` 命令。

要检查更改类型版本，请使用以下命令：

```
aws amscm list-change-type-version-summaries --filter Attribute=ChangeTypeId,Value=CT_ID
```
**注意**  
您可以将任何`CreateRfc`参数与任何 RFC 一起使用，无论它们是否属于变更类型的架构的一部分。例如，要在 RFC 状态更改时收到通知，请将此行添加到请求的 RFC 参数部分（不是执行参数）。`--notification "{\"Email\": {\"EmailRecipients\" : [\"email@example.com\"]}}"`有关所有 CreateRfc 参数的列表，请参阅《[AMS 变更管理 API 参考](https://docs.aws.amazon.com/managedservices/latest/ApiReference-cm/API_CreateRfc.html)》。

仅指定要更改的参数。缺少的参数会保留现有值。

*内联创建*：

使用内联提供的执行参数发出 create RFC 命令（内联提供执行参数时请转义引号），然后提交返回的 RFC ID。例如，你可以用这样的东西替换内容：

```
aws amscm create-rfc \
--change-type-id "ct-2uzbqr7x7mekd" \
--change-type-version "1.0" \
--title "Enable termination protection on CFN stack" \
--execution-parameters "{\"DocumentName\":\"AWSManagedServices-ManageResourceTerminationProtection\",\"Region\":\"us-east-1\",\"Parameters\":{\"ResourceId\":[\"stack-psvnq6cupymio3enl\"],\"TerminationProtectionDesiredState\":[\"enabled\"]}}"
```

*模板创建*：

1. 将此更改类型的执行参数输出到 JSON 文件；此示例将其命名为 EnableTermPro CFNParams .json：

   ```
   aws amscm get-change-type-version --change-type-id "ct-2uzbqr7x7mekd" --query "ChangeTypeVersion.ExecutionInputSchema" --output text > EnableTermProCFNParams.json
   ```

1. 修改并保存 EnableTermProCFNParams 文件，仅保留要更改的参数。例如，你可以用这样的东西替换内容：

   ```
   {
     "DocumentName": "AWSManagedServices-ManageResourceTerminationProtection",
     "Region": "us-east-1",
     "Parameters": {
       "ResourceId": ["stack-psvnq6cupymio3enl"],
       "TerminationProtectionDesiredState": ["enabled"]
     }
   }
   ```

1. 将 RFC 模板输出到当前文件夹中的一个文件中；此示例将其命名为 EnableTermPro CFNRfc .json：

   ```
   aws amscm create-rfc --generate-cli-skeleton > EnableTermProCFNRfc.json
   ```

1. 修改并保存 EnableTermPro CFNRfc .json 文件。例如，你可以用这样的东西替换内容：

   ```
   {
       "ChangeTypeId": "ct-2uzbqr7x7mekd",
       "ChangeTypeVersion": "1.0",
       "Title": "Enable termination protection on CFN instance"
   }
   ```

1. 创建 RFC，指定 EnableTermProCFNRfc 文件和 EnableTermProCFNParams 文件：

   ```
   aws amscm create-rfc --cli-input-json file://EnableTermProCFNRfc.json  --execution-parameters file://EnableTermProCFNParams.json
   ```

   您在响应中收到新 RFC 的 ID，并可以使用它来提交和监控 RFC。在您提交之前，RFC 仍处于编辑状态且无法启动。

### 提示
<a name="ex-cfn-term-pro-update-tip"></a>

**注意**  
Amazon EC2 有一个相关的 CT，即 [EC2 堆栈：更新终止保护](https://docs.aws.amazon.com/managedservices/latest/ctref/ex-ec2-term-pro-update-col.html)。

要了解有关终止保护的更多信息，请参阅[保护堆栈不被删除](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-protect-stacks.html)。

# 在 AMS 中使用 CFN 采集或堆栈更新 CTs 自动部署 IAM
<a name="cfn-ingest-iam-deploy"></a>

您可以使用这些 AMS 变更类型在多账户着陆区 (MALZ) 和单账户着陆区 (SALZ) 中部署 IAM 角色（`AWS::IAM::Role`资源）：
+ 部署 \$1 摄取 \$1 从 CloudFormation 模板堆栈 \$1 创建 (ct-36cn2avfrrj9v)
+ 管理 \$1 自定义堆栈 \$1 来自 CloudFormation 模板的堆栈 \$1 更新 (ct-361tlo1k7339x)
+ 管理 \$1 自定义堆栈 \$1 来自 CloudFormation 模板的堆栈 \$1 批准和更新 (ct-1404e21baa2ox)

**对您的 CFN 模板中的 IAM 角色执行的验证：**
+ **ManagedPolicyArns**: 该属性**ManagedPolicyArns**不得存在于中`AWS::IAM::Role`。该验证不允许将托管策略附加到正在置备的角色。相反，可以通过属性 Policies 使用内联策略来管理角色的权限。
+ **PermissionsBoundary**: 用于为角色设置权限边界的策略只能是 AMS 提供的托管策略:`AWSManagedServices_IAM_PermissionsBoundary`。此策略起到防护栏的作用，可保护 AMS 基础设施资源不被使用所配置的角色进行修改。使用此默认权限边界，AMS 提供的安全优势得以保留。

  `AWSManagedServices_IAM_PermissionsBoundary`（默认）为必填项，否则，请求将被拒绝。
+ **MaxSessionDuration**：可以为 IAM 角色设置的最大会话持续时间为 1 到 4 小时。AMS 技术标准要求客户接受会话持续时间超过 4 小时的风险。
+ **RoleName**：以下命名空间由 AMS 保留，不能用作 IAM 角色名称前缀：

  ```
  AmazonSSMRole,
  AMS,
  Ams,
  ams,
  AWSManagedServices,
  customer_developer_role,
  customer-mc-,
  Managed_Services,
  MC,
  Mc,
  mc,
  SENTINEL,
  Sentinel,
  sentinel,
  StackSet-AMS,
  StackSet-Ams,
  StackSet-ams,
  StackSet-AWS,
  StackSet-MC,
  StackSet-Mc,
  StackSet-mc
  ```
+ **策略**：IAM 角色中嵌入的内联策略只能包含一组 AMS 预先批准的 IAM 操作。这是允许使用（控制策略）创建 IAM 角色的所有 IAM 操作的上限。控制策略包括：
  +  AWS 托管策略中的所有操作 ReadOnlyAccess ，提供对所有资源 AWS 服务 和资源的只读访问权限
  + 以下操作仅限于跨账户 S3 操作，即允许的 S3 操作，只能对与正在创建的角色相同的账户中存在的资源执行：

    ```
    amscm:*,
    amsskms:*,
    lambda:InvokeFunction,
    logs:CreateLogStream,
    logs:PutLogEvents,
    s3:AbortMultipartUpload,
    s3:DeleteObject,
    s3:DeleteObjectVersion,
    s3:ObjectOwnerOverrideToBucketOwner,
    s3:PutObject,
    s3:ReplicateTags,
    secretsmanager:GetRandomPassword,
    sns:Publish
    ```

    通过 CFN ingest 创建或更新的任何 IAM 角色都可以允许此控制策略中列出的操作，或者允许范围从控制策略中列出的操作范围缩小（不那么宽松）的操作。目前，我们允许这些可归类为只读操作的安全 IAM 操作，以及上述无法完成 CTs 且按照 AMS 技术标准预先批准的非只读操作。
+ **AssumeRolePolicyDocument**：以下实体已获得预先批准，可以包含在信任策略中以承担正在创建的角色：
  + 同一账户中的任何 IAM 实体（角色、用户、根用户、STS 假设角色会话）都可以担任该角色。
  + 以下人员 AWS 服务 可以担任该角色：

    ```
    apigateway.amazonaws.com,
    autoscaling.amazonaws.com,
    cloudformation.amazonaws.com,
    codebuild.amazonaws.com,
    codedeploy.amazonaws.com,
    codepipeline.amazonaws.com,
    datapipeline.amazonaws.com,
    datasync.amazonaws.com,
    dax.amazonaws.com,
    dms.amazonaws.com,
    ec2.amazonaws.com,
    ecs-tasks.amazonaws.com,
    ecs.application-autoscaling.amazonaws.com,
    elasticmapreduce.amazonaws.com,
    es.amazonaws.com,
    events.amazonaws.com,
    firehose.amazonaws.com,
    glue.amazonaws.com,
    lambda.amazonaws.com,
    monitoring.rds.amazonaws.com,
    pinpoint.amazonaws.com,
    rds.amazonaws.com,
    redshift.amazonaws.com,
    s3.amazonaws.com,
    sagemaker.amazonaws.com,
    servicecatalog.amazonaws.com,
    sns.amazonaws.com,
    ssm.amazonaws.com,
    states.amazonaws.com,
    storagegateway.amazonaws.com,
    transfer.amazonaws.com,
    vmie.amazonaws.com
    ```
  + 同一账户中的 SAML 提供商可以担任该角色。目前，唯一支持的 SAML 提供商名称是`customer-saml`。

如果一项或多项验证失败，则 RFC 将被拒绝。RFC 拒绝原因示例如下：

```
{"errorMessage":"[ 'LambdaRole: The maximum session duration (in seconds) should be a numeric value in the range 3600 to 14400 (i.e. 1 to 4 hours).', 'lambda-policy: Policy document is too permissive.']","errorType":"ClientError"}
```

如果您在 RFC 验证或执行失败时需要帮助，请使用 RFC 信函与 AMS 联系。有关说明，请参阅 [RFC 通信和附件（控制台）](https://docs.aws.amazon.com/managedservices/latest/ctref/ex-rfc-correspondence.html)。如有任何其他问题，请提交服务请求。有关操作方法，请参阅[创建服务请求](https://docs.aws.amazon.com/managedservices/latest/userguide/gui-ex-create-service-request.html)。

**注意**  
作为我们的 IAM 验证的一部分，我们目前不强制执行任何 IAM 最佳实践。有关 IAM 最佳实践，请参阅 [IAM 中的安全最佳实践](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)。

**创建具有更宽松操作的 IAM 角色或执行 IAM 最佳实践**

使用以下手动更改类型创建您的 IAM 实体：
+ 部署 \$1 高级堆栈组件 \$1 身份和访问管理 (IAM) Management \$1 创建实体或策略 (ct-3dpd8mdd9jn1r)
+ 管理 \$1 高级堆栈组件 \$1 身份和访问管理 (IAM) \$1 更新实体或策略 (ct-27tuth19k52b4)

我们建议您在提交这些手册之前阅读并理解我们的技术标准 RFCs。有关访问权限，请参阅[如何访问技术标准](https://docs.aws.amazon.com/managedservices/latest/ctref/rfc-security.html#rfc-sec-tech-standards-access)。

**注意**  
使用这些手动更改类型直接创建的每个 IAM 角色都属于自己的单独堆栈，并且不位于通过 CFN Ingest CT 创建其他基础设施资源的同一个堆栈中。

**当无法通过自动更改类型进行更新时，通过手动更改类型更新使用 CFN 提取创建的 IAM 角色**

使用管理 \$1 高级堆栈组件 \$1 身份和访问管理 (IAM) \$1 更新实体或策略 (ct-27tuth19k52b4) 更改类型。

**重要**  
通过手动 CT 对 IAM 角色的更新不会反映在 CFN 堆栈模板中，这会导致堆栈偏移。通过手动请求将角色更新到未通过我们验证的状态后，只要角色仍然不符合我们的验证，就无法再次使用堆栈更新 CT (ct-361tlo1k7339x) 对其进行进一步更新。只有当 CFN 堆栈模板符合我们的验证标准时，才能使用更新 CT。但是，只要不更新不符合我们验证的 IAM 资源并且 CFN 模板通过我们的验证，仍然可以通过堆栈更新 CT (ct-361tlo1k7339x) 更新堆栈。

**删除通过 AWS CloudFormation 采集创建的 IAM 角色**

如果要删除整个堆栈，请使用以下自动删除堆栈更改类型。有关说明，请参阅[删除堆栈](https://docs.aws.amazon.com/managedservices/latest/ctref/ex-stack-delete-col.html)：
+ 更改类型 ID：ct-0q0bic0ywqk6c
+ 分类：管理 \$1 标准堆栈 \$1 堆栈 \$1 删除和管理 \$1 高级堆栈组件 \$1 堆栈 \$1 删除

如果您想在不删除整个堆栈的情况下删除 IAM 角色，则可以从 CloudFormation 模板中移除 IAM 角色，然后使用更新的模板作为自动堆栈更新更改类型的输入：
+ 更改类型 ID：ct-361tlo1k7339x
+ 分类：管理 \$1 自定义堆栈 \$1 来自 CloudFormation 模板的堆栈 \$1 更新

有关说明，请参阅[更新 AWS CloudFormation 采集堆栈](https://docs.aws.amazon.com/managedservices/latest/appguide/ex-cfn-ingest-update-col.html)。