

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

# 使用自动执行您的管理任务 AWS OpsHub
<a name="automate-task"></a>

您可以使用 AWS OpsHub 自动执行经常在 Snowball Edge 上执行的操作任务。您可以为可能需要对资源执行的重复操作创建任务，例如重启虚拟服务器、停止 EC2与 Amazon 兼容的实例等。您提供一份自动化文档，该文档可以安全地执行操作任务并对 AWS 资源进行批量操作。您还可以安排常用的 IT 工作流程。

**注意**  
在集群上不支持自动执行任务。  
要使用任务，必须先启动 Amazon EC2 Systems Manager 服务。有关更多信息，请参阅在 [Snowball Edge 上激活 Snowball Edge 设备管理](https://docs.aws.amazon.com/snowball/latest/developer-guide/aws-sdm.html#enable-sdm)。

**Topics**
+ [使用创建和启动任务 AWS OpsHub](#create-task)
+ [在中查看任务的详细信息 AWS OpsHub](#view-task)
+ [删除中的任务 AWS OpsHub](#delete-task)

## 使用创建和启动任务 AWS OpsHub
<a name="create-task"></a>

创建任务时，您可以指定任务运行应使用的资源类型，然后提供包含运行任务的说明的任务文档。任务文档采用 YAML 格式或 JSON 格式。然后，您提供任务所需的参数并启动任务。

**要创建任务，请执行以下操作**

1. 在控制面板的 **Launch tasks（启动任务）**部分中，选择 **Get started（开始）**以打开 **Tasks（任务）**页面。如果您已创建任务，它们将显示在**任务**下。

1. 选择**创建任务**并提供任务的详细信息。

1. 对于 **Name（名称）**，输入任务的唯一名称。
**提示**  
名称长度必须介于 3 到 128 个字符之间。有效字符为 `a-z`、`A-Z`、`0-9`、`.`、`_` 和 `-`。

1. 或者，您可以从 **Target type-optional（目标类型-可选）**列表中选择目标类型。这是您希望任务运行所使用的资源类型。

   例如，您可以指定要**/AWS::EC2::Instance**在 EC2兼容 Amazon 的实例上运行或**/**在所有资源类型上运行的任务。

1. 在**内容**部分中，选择 **YAML** 或 **JSON**，然后提供执行任务的脚本。您有两个选项：YAML 或 JSON 格式。有关示例，请参阅[中的任务示例 AWS OpsHub](#task-examples)。

1. 选择**创建**。然后，您创建的任务将显示在 **Tasks（任务）**页面上。

**启动任务**

1. 在控制面板的 **Launch tasks（启动任务）**部分中，选择 **Get started（开始）**以打开 **Tasks（任务）**页面。您的任务显示在**任务**下。

1. 选择您的任务以打开**启动任务**页面。

1. 选择 **Simple execution（简单执行）**以在目标上运行。

   选择 **Rate control（速率控制）**可在多个目标上安全运行，并定义并发和错误阈值。对于此选项，您可以在 **Rate control（速率控制）**部分中提供额外的目标和错误阈值信息。

1. 提供所需的输入参数，然后选择 **Start task（启动任务）**。

   任务的状态为 **Pending（挂起）**，并在任务成功运行时更改为 **Success（成功）**。

### 中的任务示例 AWS OpsHub
<a name="task-examples"></a>

以下示例重新启动与 Amazon EC2 兼容的实例。需要两个输入参数：`endpoint` 和 `instance ID`。

*YAML 示例*

```
description: Restart EC2 instance
schemaVersion: '0.3'
parameters:
  Endpoint:
    type: String
    description: (Required) EC2 Service Endpoint URL
  Id:
    type: String
    description: (Required) Instance Id
mainSteps:
  - name: restartInstance
    action: aws:executeScript
    description: Restart EC2 instance step
    inputs:
      Runtime: python3.7
      Handler: restart_instance
      InputPayload:
        Endpoint: "{{ Endpoint }}"
        Id: "{{ Id }}"
      TimeoutSeconds: 30
      Script: |-
        import boto3
        import time
        def restart_instance(payload, context):
            ec2_endpoint = payload['Endpoint']
            instance_id = payload['Id']
            ec2 = boto3.resource('ec2', endpoint_url=ec2_endpoint)
            instance = ec2.Instance(instance_id)
            if instance.state['Name'] != 'stopped':
                instance.stop()
                instance.wait_until_stopped()
            instance.start()
            instance.wait_until_running()
            return {'InstanceState': instance.state}
```

*JSON 示例*

```
{
  "description" : "Restart EC2 instance",
  "schemaVersion" : "0.3",
  "parameters" : {
    "Endpoint" : {
      "type" : "String",
      "description" : "(Required) EC2 Service Endpoint URL"
    },
    "Id" : {
      "type" : "String",
      "description" : "(Required) Instance Id"
    }
  },
  "mainSteps" : [ {
    "name" : "restartInstance",
    "action" : "aws:executeScript",
    "description" : "Restart EC2 instance step",
    "inputs" : {
      "Runtime" : "python3.7",
      "Handler" : "restart_instance",
      "InputPayload" : {
        "Endpoint" : "{{ Endpoint }}",
        "Id" : "{{ Id }}"
      },
      "TimeoutSeconds" : 30,
      "Script" : "import boto3\nimport time\ndef restart_instance(payload, context):\n    
            ec2_endpoint = payload['Endpoint']\n    instance_id = payload['Id']\n    
            ec2 = boto3.resource('ec2', endpoint_url=ec2_endpoint)\n    
            instance = ec2.Instance(instance_id)\n    
            if instance.state['Name'] != 'stopped':\n        
            instance.stop()\n        
            instance.wait_until_stopped()\n    
            instance.start()\n    
            instance.wait_until_running()\n    
            return {'InstanceState': instance.state}"
    }
  } ]
}
```

## 在中查看任务的详细信息 AWS OpsHub
<a name="view-task"></a>

您可以查看管理任务的详细信息，例如描述和运行任务所需的参数。

**查看任务的详细信息**

1. 在控制面板的 **Launch tasks（启动任务）**部分中，选择 **Get started（开始）**以打开 **Tasks（任务）**页面。

1. 在 **Tasks（任务）**页面上，找到并选择要查看其详细信息的任务。

1. 选择 **View details（查看详细信息）**，然后选择其中一个选项卡以查看详细信息。例如，**Parameters（参数）**选项卡会显示脚本中的输入参数。

## 删除中的任务 AWS OpsHub
<a name="delete-task"></a>

请按照以下步骤删除管理任务。

**删除任务**

1. 在控制面板的 **Launch tasks（启动任务）**部分中，选择 **Get started（开始）**以打开 **Tasks（任务）**页面。

1. 找到要删除的任务。选择任务，然后选择 **Delete（删除）**。