

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

# 手动设置以开发自定义组件 EC2 TOE
<a name="toe-get-started"></a>

 EC2 Task Orchestrator and Executor (EC2 TOE) 应用程序是一个独立的应用程序，用于在组件定义框架内创建、验证和运行命令。 Amazon 服务可用于 EC2 TOE 协调工作流程、安装软件、修改系统配置和测试映像构建。

按照以下步骤手动安装 EC2 TOE 应用程序，并将其用作独立应用程序来开发自定义组件。如果您使用 Image Builder 控制台或 Amazon CLI 命令创建自定义组件，Image Builder 会为您完成这些步骤。有关更多信息，请参阅 [使用 Image Builder 创建自定义组件](create-component.md)。

**Topics**
+ [验证 EC2 TOE 安装下载的签名](awstoe-verify-sig.md)
+ [步骤 1：安装 EC2 TOE](#toe-start-install)
+ [步骤 2：设置 Amazon 凭证](#toe-start-credentials)
+ [第 3 步：在本地开发组件文档](#toe-start-develop)
+ [步骤 4：验证 EC2 TOE 组件](#toe-start-validate)
+ [步骤 5：运行 EC2 TOE 组件](#toe-start-run)

## 步骤 1：安装 EC2 TOE
<a name="toe-start-install"></a>

要在本地开发组件，请下载并安装该 EC2 TOE 应用程序。

1. 

**下载 EC2 TOE 应用程序**

   要进行安装 EC2 TOE，请选择适合您的架构和平台的下载链接。有关应用程序下载链接的完整列表，请参阅 [EC2 TOE 下载](toe-component-manager.md#toe-downloads)
**重要**  
Amazon 正在逐步取消对 TLS 版本 1.0 和 1.1 的支持。要访问 S3 存储桶进行 EC2 TOE 下载，您的客户端软件必须使用 TLS 版本 1.2 或更高版本。有关更多信息，请参阅此 [Amazon 安全博客文章](https://www.amazonaws.cn/blogs/security/tls-1-2-required-for-aws-endpoints/)。

1. 

**验证签名**

   验证下载的步骤取决于安装 EC2 TOE 应用程序后在其中运行应用程序的服务器平台。要在 Linux 服务器上验证您的下载，请参阅 [在 Linux 或 macOS 上验证签名](awstoe-verify-sig.md#awstoe-verify-sig-linux)。要在 Windows 服务器上验证您的下载，请参阅 [在 Windows 上验证签名](awstoe-verify-sig.md#awstoe-verify-sig-win)。

**注意**  
EC2 TOE 直接从其下载位置调用。无需单独执行安装步骤。这也意味着 EC2 TOE 可以对本地环境进行更改。  
为确保在组件开发过程中隔离更改，我们建议您使用 EC2 实例来开发和测试 EC2 TOE 组件。

## 步骤 2：设置 Amazon 凭证
<a name="toe-start-credentials"></a>

 EC2 TOE 运行任务时需要 Amazon 凭证才能连接到其他任务 Amazon Web Services 服务，例如 Amazon S3 和 Amazon CloudWatch，例如：
+ 从用户提供的 Amazon S3 路径下载 EC2 TOE 文档。
+ 运行 `S3Download` 或 `S3Upload` 操作模块。
+ 启用后 CloudWatch，将日志流式传输到。

如果您 EC2 TOE 在 EC2 实例上运行，则运行 EC2 TOE 使用的权限与附加到该 EC2 实例的 IAM 角色相同。

有关的 IAM 角色的更多信息 EC2，请参阅适用于 A [mazon 的 IAM 角色EC2](https://docs.amazonaws.cn/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html)。

以下示例说明如何使用`AWS_ACCESS_KEY_ID`和`AWS_SECRET_ACCESS_KEY`环境变量设置 Amazon 凭证。

要在 Linux、macOS 或 Unix 上设置这些变量，请使用 `export`。

```
export AWS_ACCESS_KEY_ID=your_access_key_id
```

```
export AWS_SECRET_ACCESS_KEY=your_secret_access_key
```

要在 Windows 上使用设置这些变量 PowerShell，请使用`$env`。

```
$env:AWS_ACCESS_KEY_ID=your_access_key_id
```

```
$env:AWS_SECRET_ACCESS_KEY=your_secret_access_key
```

要在 Windows 上使用命令提示设置这些变量，请使用 `set`。

```
set AWS_ACCESS_KEY_ID=your_access_key_id
```

```
set AWS_SECRET_ACCESS_KEY=your_secret_access_key
```

## 第 3 步：在本地开发组件文档
<a name="toe-start-develop"></a>

组件是用纯文本 YAML 文档编写的。有关文档语法的更多信息，请参阅 [使用 EC2 TOE 组件文档框架创建自定义组件](toe-use-documents.md)。

以下是 *Hello World* 组件文档示例，可帮助您快速入门。

------
#### [ Linux ]

本指南中的某些 Linux 组件示例引用名为 `hello-world-linux.yml` 的组件文档文件。您可以使用下面的文档来着手这些示例。

```
name: Hello World
description: This is hello world testing document for Linux.
schemaVersion: 1.0
phases:
  - name: build
    steps:
      - name: HelloWorldStep
        action: ExecuteBash
        inputs:
          commands:
            - echo 'Hello World from the build phase.'
  - name: validate
    steps:
      - name: HelloWorldStep
        action: ExecuteBash
        inputs:
          commands:
            - echo 'Hello World from the validate phase.'
  - name: test
    steps:
      - name: HelloWorldStep
        action: ExecuteBash
        inputs:
          commands:
            - echo 'Hello World from the test phase.'
```

------
#### [ Windows ]

本指南中的某些 Windows 组件示例引用名为 `hello-world-windows.yml` 的组件文档文件。您可以使用下面的文档来着手这些示例。

```
name: Hello World
description: This is Hello World testing document for Windows.
schemaVersion: 1.0
phases:
  - name: build
    steps:
      - name: HelloWorldStep
        action: ExecutePowerShell
        inputs:
          commands:
            - Write-Host 'Hello World from the build phase.'
  - name: validate
    steps:
      - name: HelloWorldStep
        action: ExecutePowerShell
        inputs:
          commands:
            - Write-Host 'Hello World from the validate phase.'
  - name: test
    steps:
      - name: HelloWorldStep
        action: ExecutePowerShell
        inputs:
          commands:
            - Write-Host 'Hello World from the test phase.'
```

------
#### [ macOS ]

本指南中的某些 macOS 组件示例引用名为 `hello-world-macos.yml` 的组件文档文件。您可以使用下面的文档来着手这些示例。

```
name: Hello World
description: This is hello world testing document for macOS.
schemaVersion: 1.0
phases:
  - name: build
    steps:
      - name: HelloWorldStep
        action: ExecuteBash
        inputs:
          commands:
            - echo 'Hello World from the build phase.'
  - name: validate
    steps:
      - name: HelloWorldStep
        action: ExecuteBash
        inputs:
          commands:
            - echo 'Hello World from the validate phase.'
  - name: test
    steps:
      - name: HelloWorldStep
        action: ExecuteBash
        inputs:
          commands:
            - echo 'Hello World from the test phase.'
```

------

## 步骤 4：验证 EC2 TOE 组件
<a name="toe-start-validate"></a>

您可以使用 EC2 TOE 应用程序在本地验证 EC2 TOE 组件的语法。以下示例显示了无需运行组件即可验证其语法的 EC2 TOE 应用程序`validate`命令。

**注意**  
 EC2 TOE 应用程序只能验证当前操作系统的组件语法。例如，在 Windows 上运行 `awstoe.exe` 时，您无法验证使用 `ExecuteBash` 操作模块的 Linux 文档的语法。

Linux 或 macOS

```
awstoe validate --documents /home/user/hello-world.yml
```

Windows

```
awstoe.exe validate --documents C:\Users\user\Documents\hello-world.yml
```

## 步骤 5：运行 EC2 TOE 组件
<a name="toe-start-run"></a>

 EC2 TOE 应用程序可以使用`--phases`命令行参数运行指定文档的一个或多个阶段。`--phases` 支持的值有 `build`、`validate` 和 `test`。可以用逗号分隔的值形式输入多个阶段值。

当您提供阶段列表时， EC2 TOE 应用程序会按顺序运行每个文档的指定阶段。例如， EC2 TOE 运行的`build`和`validate`阶段`document1.yaml`，然后运行的`build`和`validate`阶段`document2.yaml`。

为了确保您的日志安全存储并保留以供故障排除，我们建议您在 Amazon S3 中配置日志存储。在 Image Builder 中，用于发布日志的 Amazon S3 位置是在基础设施配置中指定的。有关基础设施配置的更多信息，请参阅 [管理 Image Builder 基础设施配置](manage-infra-config.md)

如果未提供阶段列表，则 EC2 TOE 应用程序将按照 YAML 文档中列出的顺序运行所有阶段。

要在单个或多个文档中运行特定阶段，请使用以下命令。

单个阶段

```
awstoe run --documents hello-world.yml --phases build
```

多个阶段

```
awstoe run --documents hello-world.yml --phases build,test
```

**文档运行**  
在单个文档中运行所有阶段

```
awstoe run --documents documentName.yaml
```

在多个文档中运行所有阶段

```
awstoe run --documents documentName1.yaml,documentName2.yaml
```

输入 Amazon S3 信息以从用户定义的本地路径上传 EC2 TOE 日志（推荐）

```
awstoe run --documents documentName.yaml --log-s3-bucket-name amzn-s3-demo-destination-bucket --log-s3-key-prefix S3KeyPrefix --log-s3-bucket-owner S3BucketOwner --log-directory local_path
```

在单个文档中运行所有阶段，并在控制台上显示所有日志

```
awstoe run --documents documentName.yaml --trace
```

示例命令

```
awstoe run --documents s3://bucket/key/doc.yaml --phases build,validate
```

运行具有唯一 ID 的文档

```
awstoe run --documents documentName.yaml --execution-id user-provided-id --phases build,test
```

获取以下方面的帮助 EC2 TOE

```
awstoe --help
```