向 AWS Data Pipeline 发出 HTTP 请求 - AWS Data Pipeline

向 AWS Data Pipeline 发出 HTTP 请求

有关 AWS Data Pipeline 中编程对象的完整说明,请参阅 AWS Data Pipeline API 参考

如果您没有使用任何 AWS 开发工具包,可以使用 POST 请求方法通过 HTTP 执行 AWS Data Pipeline 操作。POST 方法需要您在请求标头中指定具体操作,并在请求正文中以 JSON 格式提供操作数据。

HTTP 标头内容

AWS Data Pipeline 要求在 HTTP 请求标头中包含以下信息:

  • host:AWS Data Pipeline 终端节点。

    有关终端节点的信息,请参阅区域和终端节点

  • x-amz-date 您必须在 HTTP Date 标头或 AWS x-amz-date 标头中提供时间戳。(有些 HTTP 客户端库不允许设置 Date 标头。) 当 x-amz-date 标头存在时,系统会在请求身份验证期间忽略所有 Date 标头。

    必须利用以下三种格式中的一种来指定数据,如 HTTP/1.1 RFC 中所规定:

    • 格林威治时间 1994 年 11 月 6 日,星期日 08:49:37(RFC 822,由 RFC 1123 更新)

    • 格林威治时间 1994 年 11 月 6 日,星期日 08:49:37(RFC 850,由 RFC 1036 废弃)

    • 1994 年 11 月 6 日 08:49:37,星期六 (ANSI C asctime() 格式)

  • Authorization:授权参数的集合,AWS 使用这些参数确保请求的有效性和可靠性。有关配置标头的更多信息,请转至 Signature Version 4 Signing Process

  • x-amz-target 请求的目标服务和数据的操作,格式如下:<<serviceName>>_<<API version>>.<<operationName>>

    例如 DataPipeline_20121129.ActivatePipeline

  • content-type:指定 JSON 和版本。例如 Content-Type: application/x-amz-json-1.0

以下示例为激活管道所用的 HTTP 请求的标头。

POST / HTTP/1.1 host: https://datapipeline.us-east-1.amazonaws.com x-amz-date: Mon, 12 Nov 2012 17:49:52 GMT x-amz-target: DataPipeline_20121129.ActivatePipeline Authorization: AuthParams Content-Type: application/x-amz-json-1.1 Content-Length: 39 Connection: Keep-Alive

HTTP 正文内容

HTTP 请求的正文包含 HTTP 请求标头中指定的操作数据。数据的格式必须遵照每个 AWS Data Pipeline API 的 JSON 数据架构。AWS Data Pipeline JSON 数据架构定义了每个操作可用的数据和参数(例如比较运算符和枚举常量)的类型。

确定 HTTP 请求正文的格式

使用 JSON 数据格式可以同时传递数据值和数据结构。以方括号注释的形式可以在元素中嵌套其他元素。以下示例显示了放置由三个对象及其对应槽组成的管道定义的请求。

{ "pipelineId": "df-00627471SOVYZEXAMPLE", "pipelineObjects": [ {"id": "Default", "name": "Default", "slots": [ {"key": "workerGroup", "stringValue": "MyWorkerGroup"} ] }, {"id": "Schedule", "name": "Schedule", "slots": [ {"key": "startDateTime", "stringValue": "2012-09-25T17:00:00"}, {"key": "type", "stringValue": "Schedule"}, {"key": "period", "stringValue": "1 hour"}, {"key": "endDateTime", "stringValue": "2012-09-25T18:00:00"} ] }, {"id": "SayHello", "name": "SayHello", "slots": [ {"key": "type", "stringValue": "ShellCommandActivity"}, {"key": "command", "stringValue": "echo hello"}, {"key": "parent", "refValue": "Default"}, {"key": "schedule", "refValue": "Schedule"} ] } ] }

处理 HTTP 响应

以下是 HTTP 响应中的一些重要标头,以及您在应用程序中对其进行处理的方法:

  • HTTP/1.1 - 此标头后跟状态代码,200 的代码值表示操作成功。任何其他值指示错误。

  • x-amzn-RequestId - 此标头包含请求 ID,如果需要使用 AWS Data Pipeline 对请求进行问题排查,就可以使用此 ID。请求 ID 的示例:K2QH8DNOU907N97FNA2GDLL8OBVV4KQNSO5AEMVJF66Q9ASUAAJG。

  • x-amz-crc32 - AWS Data Pipeline 计算 HTTP 负载的 CRC32 校验和,并在 x-amz-crc32 标头中返回此校验和。我们建议您在客户端计算自己的 CRC32 校验和,并将其与 x-amz-crc32 标头进行比较。如果校验和不匹配,则可能表示传输中发生数据损坏。如果发生数据毁坏,则应重试请求。

AWS 开发工具包用户不需要手动执行这种验证,因为开发工具包会从 Amazon DynamoDB 中计算每个回复的校验和,如果检测到不匹配就会自动重试。

AWS Data Pipeline JSON 请求和响应示例

以下示例显示了用于创建新管道的请求。然后,它显示了 AWS Data Pipeline 响应,包括新创建管道的管道标识符。

HTTP POST 请求

POST / HTTP/1.1 host: https://datapipeline.us-east-1.amazonaws.com x-amz-date: Mon, 12 Nov 2012 17:49:52 GMT x-amz-target: DataPipeline_20121129.CreatePipeline Authorization: AuthParams Content-Type: application/x-amz-json-1.1 Content-Length: 50 Connection: Keep-Alive {"name": "MyPipeline", "uniqueId": "12345ABCDEFG"}

AWS Data Pipeline 响应

HTTP/1.1 200 x-amzn-RequestId: b16911ce-0774-11e2-af6f-6bc7a6be60d9 x-amz-crc32: 2215946753 Content-Type: application/x-amz-json-1.0 Content-Length: 2 Date: Mon, 16 Jan 2012 17:50:53 GMT {"pipelineId": "df-00627471SOVYZEXAMPLE"}