

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

# 将工作流导出到 IaC 模板
<a name="exporting-iac-templates"></a>

借助 Amazon Step Functions 控制台，您可以导出保存的工作流并以 Amazon CloudFormation 或 Amazon SAM（SAM）模板形式下载。对于支持 Amazon 基础设施编辑器 的 Amazon Web Services 区域，还可以将工作流导出到基础设施编辑器并导航到基础设施编辑器控制台，您可以在控制台中继续处理新生成的模板。

## 模板配置选项
<a name="exporting-iac-templates-config-options"></a>

此功能提供以下选项。如果您选择导出并下载 IaC 模板文件，则控制台会显示适用于所保存状态机的选项以供选择。如果您要导出到基础设施编辑器，Step Functions 控制台会自动实施适用于状态机的配置。
+  **包括控制台代表您创建的 IAM 角色** – 此选项可导出执行角色策略。它在模板中构造一个 IAM 角色并将其附加到状态机资源。仅当状态机具有由控制台创建的执行角色时，此选项才适用。
+  **包括 CloudWatch 日志组** – 在模板中构造一个 CloudWatch 日志组并将其附加到状态机资源。仅当状态机附有 CloudWatch 日志组且[日志级别](cw-logs.md#cloudwatch-log-level)*未*设置为 `OFF` 时，此选项才适用。
+  **将资源引用替换为 DefinitionSubstitutions** – 此选项为以下组件生成 [DefinitionSubstitutions](concepts-sam-sfn.md#sam-definition-substitution-eg)：
  + [分布式 Map](state-map-distributed.md) S3 字段。
  + `Activity` 资源。导出内容包括 Amazon CloudFormation 模板中适用于任何 `Run Activity` 任务的 `Activity` 资源。导出还提供 `DefinitionSubstitutions`，用于引用所创建的 `Activity` 资源。
  + 所有服务集成的有效载荷字段中的任何 `ARN` 或 `S3URI`。
  + 除 `ARN` 和 `S3URI` 字段外，导出还会为其他常用的服务集成有效载荷字段生成 `DefinitionSubstitutions`。具体的服务集成如下：
    + `athena:startQueryExecution`
    + `batch:submitJob`
    +  `dynamodb:getItem`, `dynamodb:updateItem`, `dynamodb:updateItem`, `dynamodb:deleteItem` 
    + `ecs:runTask`
    + `glue:startJobRun`
    + `http:invoke`
    + `lambda:invoke`
    + `sns:publish`
    + `sqs:sendMessage`
    + `states:startExecution`

## 导出并下载工作流的 IaC 模板
<a name="exporting-iac-templates-files-procedure"></a>

**将工作流导出到 IaC 模板文件**

1. 打开 [Step Functions 控制台](https://console.amazonaws.cn/states/home?region=us-east-1#/)并选择要使用的状态机。继续执行下一步操作之前，请务必先保存对状态机所做的任何更改。

1. 从**操作**菜单中选择**导出到 CloudFormation 或 SAM 模板**。

1. 在出现的对话框中，对于**类型**，选择 **SAM** 或 **CloudFormation**。
   + 如果选择了 **CloudFormation** 模板，则接下来选择 **JSON** 或 **YAML** 文件格式。
   + 如果选择了 **SAM** 模板，则不会显示任何格式选项。SAM 模板默认采用 YAML 文件格式。

1. 展开**其他配置**。默认情况下，所有选项均已选中。查看并更新 IaC 模板的选项选择。上一部分（标题为[模板配置选项](#exporting-iac-templates-config-options)）详细介绍了这些选项。

   如果某个选项不适用于您的特定工作流，则该选项将不会显示在对话框中。

1. 选择**下载**，导出并下载生成的 IaC 模板文件。

## 将工作流直接导出到 Amazon 基础设施编辑器
<a name="exporting-iac-templates-infra-composer-procedure"></a>

**将工作流导出到 Infrastructure Composer**

1. 打开 [Step Functions 控制台](https://console.amazonaws.cn/states/home?region=us-east-1#/)并选择要使用的状态机。继续执行下一步操作之前，请务必先保存对状态机所做的任何更改。

1. 从**操作**菜单中选择**导出到基础设施编辑器**。

1. 此时将显示**导出到基础设施编辑器**对话框。可以使用**传输存储桶名称**字段中显示的默认名称，也可以输入新名称。Amazon S3 存储桶的名称必须全局唯一，并遵守[存储桶命名规则](https://docs.amazonaws.cn/AmazonS3/latest/userguide/bucketnamingrules.html)。

1. 选择**确认并创建项目**，将工作流导出到基础设施编辑器。

1. 要在基础设施编辑器中保存项目和工作流定义，请激活[本地同步模式](https://docs.amazonaws.cn/application-composer/latest/dg/reference-features-local-sync.html)。

**注意**  
如果您之前使用过**导出到基础设施编辑器**功能并使用默认名称创建了 Amazon S3 存储桶，Step Functions 可以重复使用该存储桶（如果它仍然存在）。接受对话框中的默认存储桶名称以重复使用现有存储桶。

### Amazon S3 传输存储桶配置
<a name="export-appcomposer-bucket-info"></a>

Step Functions 为传输您的工作流而创建的 Amazon S3 存储桶会使用 AES 256 加密标准自动加密对象。Step Functions 还将存储桶配置为使用[存储桶拥有者条件](https://docs.amazonaws.cn/AmazonS3/latest/userguide/bucket-owner-condition.html)，以确保只有您的 Amazon Web Services 账户 能向存储桶添加对象。

默认存储桶名称使用前缀 `states-templates`、10 位字母数字字符串以及您创建工作流所在的 Amazon Web Services 区域：`states-templates-amzn-s3-demo-bucket-us-east-1`。为避免给您的 Amazon Web Services 账户 增加额外费用，建议在完成将工作流导出到基础设施编辑器后立即删除 Amazon S3 存储桶。

标准 [Amazon S3 定价](https://www.amazonaws.cn/s3/pricing/)适用。

### 所需的权限
<a name="export-appcomposer-permissions"></a>

要将此 Step Functions 导出功能与基础设施编辑器结合使用，您需要一定的权限才能下载 Amazon SAM 模板并将模板配置写入 Amazon S3。

要下载 Amazon SAM 模板，您必须拥有使用以下 API 操作的权限：
+ [iam:GetPolicy](https://docs.amazonaws.cn/IAM/latest/APIReference/API_GetPolicy.html)
+ [iam:GetPolicyVersion](https://docs.amazonaws.cn/IAM/latest/APIReference/API_GetPolicyVersion.html)
+ [iam:GetRole](https://docs.amazonaws.cn/IAM/latest/APIReference/API_GetRole.html)
+ [iam:GetRolePolicy](https://docs.amazonaws.cn/IAM/latest/APIReference/API_GetRolePolicy.html)
+ [iam:ListAttachedRolePolicies](https://docs.amazonaws.cn/IAM/latest/APIReference/API_ListAttachedRolePolicies.html)
+ [iam:ListRolePolicies](https://docs.amazonaws.cn/IAM/latest/APIReference/API_ListRolePolicies.html)
+ [iam:ListRoles](https://docs.amazonaws.cn/IAM/latest/APIReference/API_ListRoles.html)

要让 Step Functions 将您的函数配置写入 Amazon S3，您必须拥有使用以下 API 操作的权限：
+ [S3:PutObject](https://docs.amazonaws.cn/AmazonS3/latest/API/API_PutObject.html)
+ [S3:CreateBucket](https://docs.amazonaws.cn/AmazonS3/latest/API/API_CreateBucket.html)
+ [S3:PutBucketEncryption](https://docs.amazonaws.cn/AmazonS3/latest/API/API_PutBucketEncryption.html)

如果无法将函数的配置导出到基础设施编辑器，请检查账户是否具有这些操作所需的权限。