

# 使用 AWS CLI 的 Amazon SWF 示例
<a name="cli_swf_code_examples"></a>

以下代码示例演示如何通过将 AWS Command Line Interface与 Amazon SWF 结合使用，来执行操作和实现常见场景。

*操作是大型程序的代码摘录*，必须在上下文中运行。您可以通过操作了解如何调用单个服务函数，还可以通过函数相关场景的上下文查看操作。

每个示例都包含一个指向完整源代码的链接，您可以从中找到有关如何在上下文中设置和运行代码的说明。

**Topics**
+ [操作](#actions)

## 操作
<a name="actions"></a>

### `count-closed-workflow-executions`
<a name="swf_CountClosedWorkflowExecutions_cli_topic"></a>

以下代码示例演示了如何使用 `count-closed-workflow-executions`。

**AWS CLI**  
**统计已关闭的工作流执行次数**  
您可以使用 `swf count-closed-workflow-executions` 检索给定域的已关闭工作流执行次数。您可以指定筛选器来统计指定的执行类别。  
`--domain` 和 `--close-time-filter` *或* `--start-time-filter` 参数为必填项。所有其他参数都为可选项。  

```
aws swf count-closed-workflow-executions \
    --domain DataFrobtzz \
    --close-time-filter "{ \"latestDate\" : 1377129600, \"oldestDate\" : 1370044800 }"
```
输出：  

```
{
    "count": 2,
    "truncated": false
}
```
如果“truncated”为 `true`，则“count”表示 Amazon SWF 可以返回的最大数量。任何其他结果都会被截断。  
要减少返回结果的数量，您可以：  
修改 `--close-time-filter` 或 `--start-time-filter` 值以缩小搜索的时间范围。其中每一个参数都是互斥的：您*只能在请求中指定其中一个*。使用 `--close-status-filter`、`--execution-filter`、`--tag-filter` 或 `--type-filter` 参数可进一步筛选结果。但是，这些参数也是相互排斥的。  
另请参阅《Amazon Simple Workflow 服务 API 参考》**中的 [CountClosedWorkflowExecutions](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_CountClosedWorkflowExecutions.html)  
+  有关 API 详细信息，请参阅《AWS CLI 命令参考》**中的 [CountClosedWorkflowExecutions](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/swf/count-closed-workflow-executions.html)。

### `count-open-workflow-executions`
<a name="swf_CountOpenWorkflowExecutions_cli_topic"></a>

以下代码示例演示了如何使用 `count-open-workflow-executions`。

**AWS CLI**  
**统计打开的工作流执行次数**  
您可以使用 `swf count-open-workflow-executions` 检索给定域的打开的工作流执行次数。您可以指定筛选器来统计指定的执行类别。  
`--domain` 和 `--start-time-filter` 是必填参数。所有其他参数都为可选项。  

```
aws swf count-open-workflow-executions \
    --domain DataFrobtzz \
    --start-time-filter "{ \"latestDate\" : 1377129600, \"oldestDate\" : 1370044800 }"
```
输出：  

```
{
    "count": 4,
    "truncated": false
}
```
如果“truncated”为 `true`，则“count”表示 Amazon SWF 可以返回的最大数量。任何其他结果都会被截断。  
要减少返回结果的数量，您可以：  
修改 `--start-time-filter` 值以缩小搜索的时间范围。使用`--close-status-filter`、`--execution-filter`、`--tag-filter` 或 `--type-filter` 参数进一步筛选结果。其中每一参数都是互斥的：您*只能在请求中指定其中一个*。  
有关更多信息，请参阅《Amazon Simple Workflow 服务 API 参考》**中的“CountOpenWorkflowExecutions”  
+  有关 API 详细信息，请参阅《AWS CLI 命令参考》**中的 [CountOpenWorkflowExecutions](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/swf/count-open-workflow-executions.html)。

### `deprecate-domain`
<a name="swf_DeprecateDomain_cli_topic"></a>

以下代码示例演示了如何使用 `deprecate-domain`。

**AWS CLI**  
**弃用域**  
要弃用域（您仍可以看到它，但不能在它上面创建新工作流执行或注册类型），请使用 `swf deprecate-domain`。它只有一个必需参数 `--name`，此参数用于指定要弃用的域的名称。  

```
aws swf deprecate-domain \
    --name MyNeatNewDomain ""
```
与 `register-domain` 一样，不会返回任何输出。不过，如果您使用 `list-domains` 查看已注册的域，则会看到该域已弃用，不会再显示在返回的数据中。  

```
aws swf list-domains \
    --registration-status REGISTERED
        {
            "domainInfos": [
                {
                    "status": "REGISTERED",
                    "name": "DataFrobotz"
                },
                {
                    "status": "REGISTERED",
                    "name": "erontest"
                }
            ]
        }
```
如果您将 `list-domains` 与 `--registration-status DEPRECATED` 一起使用，则会看到已弃用的域。  

```
aws swf list-domains \
    --registration-status DEPRECATED
        {
            "domainInfos": [
                {
                    "status": "DEPRECATED",
                    "name": "MyNeatNewDomain"
                }
            ]
        }
```
您还可以使用 `describe-domain` 获取有关已弃用域的信息。  

```
aws swf describe-domain \
    --name MyNeatNewDomain
        {
            "domainInfo": {
                "status": "DEPRECATED",
                "name": "MyNeatNewDomain"
            },
            "configuration": {
                "workflowExecutionRetentionPeriodInDays": "0"
            }
        }
```
另请参阅《Amazon Simple Workflow 服务 API 参考》**中的 [DeprecateDomain](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_DeprecateDomain.html)  
+  有关 API 详细信息，请参阅《AWS CLI 命令参考》**中的 [DeprecateDomain](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/swf/deprecate-domain.html)。

### `describe-domain`
<a name="swf_DescribeDomain_cli_topic"></a>

以下代码示例演示了如何使用 `describe-domain`。

**AWS CLI**  
**获取有关域的信息**  
要获取有关特定域的详细信息，请使用 `swf describe-domain` 命令。有一个必需参数：`--name`，此参数用于指定您要获取其信息的域的名称。  

```
aws swf describe-domain \
    --name DataFrobotz
        {
            "domainInfo": {
                "status": "REGISTERED",
                "name": "DataFrobotz"
            },
            "configuration": {
                "workflowExecutionRetentionPeriodInDays": "1"
            }
        }
```
您还可以使用 `describe-domain` 获取有关已弃用域的信息。  

```
aws swf describe-domain \
    --name MyNeatNewDomain
        {
            "domainInfo": {
                "status": "DEPRECATED",
                "name": "MyNeatNewDomain"
            },
            "configuration": {
                "workflowExecutionRetentionPeriodInDays": "0"
            }
        }
```
另请参阅《Amazon Simple Workflow 服务 API 参考》**中的 [DescribeDomain](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_DescribeDomain.html)  
+  有关 API 详细信息，请参阅《AWS CLI 命令参考》**中的 [DescribeDomain](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/swf/describe-domain.html)。

### `list-activity-types`
<a name="swf_ListActivityTypes_cli_topic"></a>

以下代码示例演示了如何使用 `list-activity-types`。

**AWS CLI**  
**列出活动类型**  
要获取域的活动类型列表，请使用 `swf list-activity-types`。`--domain` 和 `--registration-status` 是必填参数。  

```
aws swf list-activity-types \
    --domain DataFrobtzz \
    --registration-status REGISTERED
```
输出：  

```
{
    "typeInfos": [
        {
            "status": "REGISTERED",
            "creationDate": 1371454150.451,
            "activityType": {
                "version": "1",
                "name": "confirm-user-email"
            },
            "description": "subscribe confirm-user-email activity"
        },
        {
            "status": "REGISTERED",
            "creationDate": 1371454150.709,
            "activityType": {
                "version": "1",
                "name": "confirm-user-phone"
            },
            "description": "subscribe confirm-user-phone activity"
        },
        {
            "status": "REGISTERED",
            "creationDate": 1371454149.871,
            "activityType": {
                "version": "1",
                "name": "get-subscription-info"
            },
            "description": "subscribe get-subscription-info activity"
        },
        {
            "status": "REGISTERED",
            "creationDate": 1371454150.909,
            "activityType": {
                "version": "1",
                "name": "send-subscription-success"
            },
            "description": "subscribe send-subscription-success activity"
        },
        {
            "status": "REGISTERED",
            "creationDate": 1371454150.085,
            "activityType": {
                "version": "1",
                "name": "subscribe-user-sns"
            },
            "description": "subscribe subscribe-user-sns activity"
        }
    ]
}
```
您可以使用 `--name` 参数仅选择具有特定名称的活动类型：  

```
aws swf list-activity-types \
    --domain DataFrobtzz \
    --registration-status REGISTERED \
    --name "send-subscription-success"
```
输出：  

```
{
    "typeInfos": [
        {
            "status": "REGISTERED",
            "creationDate": 1371454150.909,
            "activityType": {
                "version": "1",
                "name": "send-subscription-success"
            },
            "description": "subscribe send-subscription-success activity"
        }
    ]
}
```
要在页面中检索结果，可以设置 `--maximum-page-size` 参数。如果返回的结果多于结果页所能容纳的数量，则会在结果集中返回“nextPageToken”：  

```
aws swf list-activity-types \
    --domain DataFrobtzz \
    --registration-status REGISTERED \
    --maximum-page-size 2
```
输出：  

```
{
    "nextPageToken": "AAAAKgAAAAEAAAAAAAAAA1Gp1BelJq+PmHvAnDxJYbup8+0R4LVtbXLDl7QNY7C3OpHo9Sz06D/GuFz1OyC73umBQ1tOPJ/gC/aYpzDMqUIWIA1T9W0s2DryyZX4OC/6Lhk9/o5kdsuWMSBkHhgaZjgwp3WJINIFJFdaSMxY2vYAX7AtRtpcqJuBDDRE9RaRqDGYqIYUMltarkiqpSY1ZVveBasBvlvyUb/WGAaqehiDz7/JzLT/wWNNUMOd+Nhe",
    "typeInfos": [
        {
            "status": "REGISTERED",
            "creationDate": 1371454150.451,
            "activityType": {
                "version": "1",
                "name": "confirm-user-email"
            },
            "description": "subscribe confirm-user-email activity"
        },
        {
            "status": "REGISTERED",
            "creationDate": 1371454150.709,
            "activityType": {
                "version": "1",
                "name": "confirm-user-phone"
            },
            "description": "subscribe confirm-user-phone activity"
        }
    ]
}
```
您可以将 nextPageToken 值传递给 `--next-page-token` 参数中的下一个调用 `list-activity-types`，检索下一页的结果：  

```
aws swf list-activity-types \
    --domain DataFrobtzz \
    --registration-status REGISTERED \
    --maximum-page-size 2 \
    --next-page-token "AAAAKgAAAAEAAAAAAAAAA1Gp1BelJq+PmHvAnDxJYbup8+0R4LVtbXLDl7QNY7C3OpHo9Sz06D/GuFz1OyC73umBQ1tOPJ/gC/aYpzDMqUIWIA1T9W0s2DryyZX4OC/6Lhk9/o5kdsuWMSBkHhgaZjgwp3WJINIFJFdaSMxY2vYAX7AtRtpcqJuBDDRE9RaRqDGYqIYUMltarkiqpSY1ZVveBasBvlvyUb/WGAaqehiDz7/JzLT/wWNNUMOd+Nhe"
```
输出：  

```
{
    "nextPageToken": "AAAAKgAAAAEAAAAAAAAAAw+7LZ4GRZPzTqBHsp2wBxWB8m1sgLCclgCuq3J+h/m3+vOfFqtkcjLwV5cc4OjNAzTCuq/XcylPumGwkjbajtqpZpbqOcVNfjFxGoi0LB2Olbvv0krbUISBvlpFPmSWpDSZJsxg5UxCcweteSlFn1PNSZ/MoinBZo8OTkjMuzcsTuKOzH9wCaR8ITcALJ3SaqHU3pyIRS5hPmFA3OLIc8zaAepjlaujo6hntNSCruB4"
    "typeInfos": [
        {
            "status": "REGISTERED",
            "creationDate": 1371454149.871,
            "activityType": {
                "version": "1",
                "name": "get-subscription-info"
            },
            "description": "subscribe get-subscription-info activity"
        },
        {
            "status": "REGISTERED",
            "creationDate": 1371454150.909,
            "activityType": {
                "version": "1",
                "name": "send-subscription-success"
            },
            "description": "subscribe send-subscription-success activity"
        }
    ]
}
```
如果还有更多结果要返回，“nextPageToken”将与结果一起返回。当没有更多的结果页要返回时，“nextPageToken”将*不会*在结果集中返回。  
您可以使用 `--reverse-order` 参数来颠倒返回结果的顺序。这也会影响分页结果。  

```
aws swf list-activity-types \
    --domain DataFrobtzz \
    --registration-status REGISTERED \
    --maximum-page-size 2 \
    --reverse-order
```
输出：  

```
{
    "nextPageToken": "AAAAKgAAAAEAAAAAAAAAAwXcpu5ePSyQkrC+8WMbmSrenuZC2ZkIXQYBPB/b9xIOVkj+bMEFhGj0KmmJ4rF7iddhjf7UMYCsfGkEn7mk+yMCgVc1JxDWmB0EH46bhcmcLmYNQihMDmUWocpr7To6/R7CLu0St1gkFayxOidJXErQW0zdNfQaIWAnF/cwioBbXlkz1fQzmDeU3M5oYGMPQIrUqkPq7pMEW0q0lK5eDN97NzFYdZZ/rlcLDWPZhUjY",
    "typeInfos": [
        {
            "status": "REGISTERED",
            "creationDate": 1371454150.085,
            "activityType": {
                "version": "1",
                "name": "subscribe-user-sns"
            },
            "description": "subscribe subscribe-user-sns activity"
        },
        {
            "status": "REGISTERED",
            "creationDate": 1371454150.909,
            "activityType": {
                "version": "1",
                "name": "send-subscription-success"
            },
            "description": "subscribe send-subscription-success activity"
        }
    ]
}
```
另请参阅《Amazon Simple Workflow 服务 API 参考》**中的 [ListActivityTypes](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_ListActivityTypes.html)  
+  有关 API 详细信息，请参阅《AWS CLI 命令参考》**中的 [ListActivityTypes](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/swf/list-activity-types.html)。

### `list-domains`
<a name="swf_ListDomains_cli_topic"></a>

以下代码示例演示了如何使用 `list-domains`。

**AWS CLI**  
**示例 1：列出您注册的域**  
以下 `list-domains` 命令示例列出已为您账户注册的 `REGISTERED` SWF 域。  

```
aws swf list-domains \
    --registration-status REGISTERED
```
输出：  

```
{
  "domainInfos": [
    {
      "status": "REGISTERED",
      "name": "DataFrobotz"
    },
    {
      "status": "REGISTERED",
      "name": "erontest"
    }
  ]
}
```
有关更多信息，请参阅《Amazon Simple Workflow 服务 API 参考》**中的 [ListDomains](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_ListDomains.html)。  
**示例 2：列出已弃用的域**  
以下 `list-domains` 命令示例列出已为您账户注册的 `DEPRECATED` SWF 域。已弃用的域是指无法注册新工作流或活动，但仍可以查询的域。  

```
aws swf list-domains \
    --registration-status DEPRECATED
```
输出：  

```
{
  "domainInfos": [
    {
      "status": "DEPRECATED",
      "name": "MyNeatNewDomain"
    }
  ]
}
```
有关更多信息，请参阅《Amazon Simple Workflow 服务 API 参考》**中的 [ListDomains](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_ListDomains.html)。  
**示例 3：列出已注册域的第一页**  
以下 `list-domains` 命令示例列出使用 `--maximum-page-size` 选项已为您账户注册的第一页 `REGISTERED` SWF 域。  

```
aws swf list-domains \
    --registration-status REGISTERED \
    --maximum-page-size 1
```
输出：  

```
{
    "domainInfos": [
        {
            "status": "REGISTERED",
            "name": "DataFrobotz"
        }
    ],
"nextPageToken": "AAAAKgAAAAEAAAAAAAAAA2QJKNtidVgd49TTeNwYcpD+QKT2ynuEbibcQWe2QKrslMGe63gpS0MgZGpcpoKttL4OCXRFn98Xif557it+wSZUsvUDtImjDLvguyuyyFdIZtvIxIKEOPm3k2r4OjAGaFsGOuVbrKljvla7wdU7FYH3OlkNCP8b7PBj9SBkUyGoiAghET74P93AuVIIkdKGtQ=="
}
```
有关更多信息，请参阅《Amazon Simple Workflow 服务 API 参考》**中的 [ListDomains](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_ListDomains.html)。  
**示例 4：列出已注册域的指定一页**  
以下 `list-domains` 命令示例列出使用 `--maximum-page-size` 选项已为您账户注册的第一页 `REGISTERED` SWF 域。  
再次调用时，如果在 `--next-page-token` 参数中提供 `nextPageToken` 的值，那么您将会得到另外一页结果。  

```
aws swf list-domains \
    --registration-status REGISTERED \
    --maximum-page-size 1 \
    --next-page-token "AAAAKgAAAAEAAAAAAAAAA2QJKNtidVgd49TTeNwYcpD+QKT2ynuEbibcQWe2QKrslMGe63gpS0MgZGpcpoKttL4OCXRFn98Xif557it+wSZUsvUDtImjDLvguyuyyFdIZtvIxIKEOPm3k2r4OjAGaFsGOuVbrKljvla7wdU7FYH3OlkNCP8b7PBj9SBkUyGoiAghET74P93AuVIIkdKGtQ=="
```
输出：  

```
{
    "domainInfos": [
        {
            "status": "REGISTERED",
            "name": "erontest"
        }
    ]
}
```
当没有要检索的其他结果页时，`nextPageToken` 不会在结果中返回。  
有关更多信息，请参阅《Amazon Simple Workflow 服务 API 参考》**中的 [ListDomains](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_ListDomains.html)。  
+  有关 API 详细信息，请参阅《AWS CLI 命令参考》**中的 [ListDomains](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/swf/list-domains.html)。

### `list-workflow-types`
<a name="swf_ListWorkflowTypes_cli_topic"></a>

以下代码示例演示了如何使用 `list-workflow-types`。

**AWS CLI**  
**列出工作流类型**  
要获取域的工作流类型列表，请使用 `swf list-workflow-types`。`--domain` 和 `--registration-status` 是必填参数。下面是一个简单的示例。  

```
aws swf list-workflow-types \
    --domain DataFrobtzz \
    --registration-status REGISTERED
```
输出：  

```
{
    "typeInfos": [
        {
            "status": "REGISTERED",
            "creationDate": 1371454149.598,
            "description": "DataFrobtzz subscribe workflow",
            "workflowType": {
                "version": "v3",
                "name": "subscribe"
            }
        }
    ]
}
```
与 `list-activity-types` 一样，您可以使用 `--name` 参数仅选择具有特定名称的工作流类型，并将 `--next-page-token` 与 `--maximum-page-size` 参数结合使用来查看结果。要颠倒返回结果的顺序，请使用 `--reverse-order`。  
另请参阅《Amazon Simple Workflow 服务 API 参考》**中的 [ListWorkflowTypes](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_ListWorkflowTypes.html)  
+  有关 API 详细信息，请参阅《AWS CLI 命令参考》**中的 [ListWorkflowTypes](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/swf/list-workflow-types.html)。

### `register-domain`
<a name="swf_RegisterDomain_cli_topic"></a>

以下代码示例演示了如何使用 `register-domain`。

**AWS CLI**  
**注册域**  
您可以使用 AWS CLI 注册新域。使用 `swf register-domain` 命令。有两个必需参数：`--name` 和 `--workflow-execution-retention-period-in-days`，前者指定域名，后者使用一个整数指定在该域上保留工作流程执行数据的天数，最长 90 天（有关更多信息，请参阅 SWF 常见问题 <https://aws.amazon.com/swf/faqs/\$1retain\$1limit>）。在指定的天数过后，系统将不会保留工作流执行数据。  

```
aws swf register-domain \
    --name MyNeatNewDomain \
    --workflow-execution-retention-period-in-days 0
    ""
```
注册域时，不会返回任何内容 ("")，但您可以使用 `swf list-domains` 或 `swf describe-domain` 查看新域。  

```
aws swf list-domains \
    --registration-status REGISTERED
        {
            "domainInfos": [
                {
                    "status": "REGISTERED",
                    "name": "DataFrobotz"
                },
                {
                    "status": "REGISTERED",
                    "name": "MyNeatNewDomain"
                },
                {
                    "status": "REGISTERED",
                    "name": "erontest"
                }
            ]
        }
```
使用 `swf describe-domain`：  

```
aws swf describe-domain --name MyNeatNewDomain
{
    "domainInfo": {
        "status": "REGISTERED",
        "name": "MyNeatNewDomain"
    },
    "configuration": {
        "workflowExecutionRetentionPeriodInDays": "0"
    }
}
```
另请参阅《Amazon Simple Workflow 服务 API 参考》**中的 [RegisterDomain](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_RegisterDomain.html)  
+  有关 API 详细信息，请参阅《AWS CLI 命令参考》**中的 [RegisterDomain](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/swf/register-domain.html)。

### `register-workflow-type`
<a name="swf_RegisterWorkflowType_cli_topic"></a>

以下代码示例演示了如何使用 `register-workflow-type`。

**AWS CLI**  
**注册工作流类型**  
要使用 AWS CLI 注册工作流类型，请使用 `swf register-workflow-type` 命令。  

```
aws swf register-workflow-type \
    --domain DataFrobtzz \
    --name "MySimpleWorkflow" \
    --workflow-version "v1"
```
如果成功，此命令不会产生任何输出。  
如果出现错误（例如，两次尝试注册相同的工作流类型，或指定一个不存在的域），您将收到一个 JSON 格式的响应。  

```
{
    "message": "WorkflowType=[name=MySimpleWorkflow, version=v1]",
    "__type": "com.amazonaws.swf.base.model#TypeAlreadyExistsFault"
}
```
`--domain`、`--name` 和 `--workflow-version` 为必填。您还可以设置工作流描述、超时和子工作流策略。  
有关更多信息，请参阅《Amazon Simple Workflow 服务 API 参考》**中的 [RegisterWorkflowType](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_RegisterWorkflowType.html)  
+  有关 API 详细信息，请参阅《AWS CLI 命令参考》**中的 [RegisterWorkflowType](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/swf/register-workflow-type.html)。