

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Amazon SWF に対する HTTP リクエストの実行
<a name="UsingJSON-swf"></a>

 AWS SDKs のいずれかを使用しない場合は、POST リクエストメソッドを使用して、HTTP 経由で Amazon Simple Workflow Service (Amazon SWF) オペレーションを実行できます。POST メソッドでは、リクエストのヘッダーでオペレーションを指定し、リクエストの本文に、オペレーションのデータを JSON 形式で入力します。

## HTTP ヘッダーの内容
<a name="HTTPHeader"></a>

Amazon SWF では、HTTP リクエストのヘッダーに次の情報を入力する必要があります。
+ `host` Amazon SWF エンドポイント。
+ `x-amz-date` タイムスタンプは HTTP `Date`ヘッダーまたは AWS `x-amz-date header` で指定する必要があります (一部の HTTP クライアントライブラリでは `Date`ヘッダーを設定できません）。`x-amz-date` ヘッダーがある場合、リクエストの認証時に `Date` ヘッダーは無視されます。

  日付は、HTTP/1.1 RFC で規定されている次の 3 つ形式のいずれかで指定する必要があります。
  + Sun, 06 Nov 1994 08:49:37 GMT (RFC 822、RFC 1123 により更新)
  + Sunday, 06-Nov-94 08:49:37 GMT (RFC 850、RFC 1036 により廃止)
  + Sun Nov 6 08:49:37 1994 (ANSI C asctime() 形式)
+ `x-amzn-authorization` 形式の署名付きリクエストパラメータ。

  ```
  AWS3 AWSAccessKeyId=####,Algorithm=HmacSHA256, [,SignedHeaders=Header1;Header2;...]
  Signature=S(StringToSign)
  ```

  `AWS3` – これは、リクエストの署名に使用される認証バージョンを示す AWS 実装固有のタグです (現在、Amazon SWF の場合、この値は常に です`AWS3`）。

  `AWSAccessKeyId` – AWS アクセスキー ID。

  `Algorithm` - `HmacSHA256` や `HmacSHA1` など、署名対象の文字列の HMAC-SHA 値を作成するために使用されるアルゴリズム。

  `Signature` - Base64 (アルゴリズム (StringToSign、SigningKey)。詳細については、「[Amazon SWF の HMAC-SHA 署名の生成](HMACAuth-swf.md)」を参照してください。

  `SignedHeaders` - (オプション) 存在する場合、正規化された HttpHeaders 計算で使用されるすべての HTTP ヘッダーのリストを含める必要があります。1 つのセミコロンの文字 (;) (ASCII 文字 59) をリスト値の区切り文字として使用する必要があります。
+  `x-amz-target` - 次の形式で指定する、リクエストの送信先サービスおよびデータのオペレーション 

  ` com.amazonaws.swf.service.model.SimpleWorkflowService. + <action> `

   例: `com.amazonaws.swf.service.model.SimpleWorkflowService.RegisterDomain` 
+ `content-type` - タイプは JSON に、文字セットは `application/json; charset=UTF-8` に指定する必要があります。

 次に、ドメインを作成する HTTP リクエストのサンプルヘッダーの例を示します。

```
POST http://swf.us-east-1.amazonaws.com/ HTTP/1.1
Host: swf.us-east-1.amazonaws.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.25) Gecko/20111212 Firefox/3.6.25 ( .NET CLR 3.5.30729; .NET4.0E)
Accept: application/json, text/javascript, */*
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Content-Type: application/json; charset=UTF-8
X-Requested-With: XMLHttpRequest
X-Amz-Date: Fri, 13 Jan 2012 18:42:12 GMT
X-Amz-Target: com.amazonaws.swf.service.model.SimpleWorkflowService.RegisterDomain
Content-Encoding: amz-1.0
X-Amzn-Authorization: AWS3 AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE,Algorithm=HmacSHA256,SignedHeaders=Host;X-Amz-Date;X-Amz-Target;Content-Encoding,Signature=tzjkF55lxAxPhzp/BRGFYQRQRq6CqrM254dTDE/EncI=
Referer: http://swf.us-east-1.amazonaws.com/explorer/index.html
Content-Length: 91
Pragma: no-cache
Cache-Control: no-cache

{"name": "867530902",
 "description": "music",
 "workflowExecutionRetentionPeriodInDays": "60"}
```

以下に、対応する HTTP レスポンスの例を示します。

```
HTTP/1.1 200 OK
Content-Length: 0
Content-Type: application/json
x-amzn-RequestId: 4ec4ac3f-3e16-11e1-9b11-7182192d0b57
```

## HTTP 本文の内容
<a name="JSONschema"></a>

HTTP リクエストの本文には、HTTP リクエストのヘッダーで指定されたオペレーションのデータが含まれます。JSON データ形式を使用すると、データ値とデータ構造を同時に送信できます。エレメントは、ブラケット表記を使用することで他のエレメント内にネストすることができます。次の例では、指定された 2 つのポイント間で開始されたすべてのワークフローの実行を、Unix Time 表記を使用して一覧表示するリクエストを示しています。

```
{
 "domain": "867530901",
 "startTimeFilter":
 {
   "oldestDate": 1325376070,
	 "latestDate": 1356998399
 },
 "tagFilter":
 {
   "tag": "music purchase"
 }
}
```

## Amazon SWF JSON のリクエストと応答のサンプル
<a name="JSONMajorExample"></a>

次の例は、以前に作成したドメインの説明についての Amazon SWF へのリクエストを示しています。次に、Amazon SWF 応答が表示されます。

### HTTP POST リクエスト
<a name="http-post-request"></a>

```
POST http://swf.us-east-1.amazonaws.com/ HTTP/1.1
Host: swf.us-east-1.amazonaws.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.25) Gecko/20111212 Firefox/3.6.25 ( .NET CLR 3.5.30729; .NET4.0E)
Accept: application/json, text/javascript, */*
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Content-Type: application/json; charset=UTF-8
X-Requested-With: XMLHttpRequest
X-Amz-Date: Sun, 15 Jan 2012 03:13:33 GMT
X-Amz-Target: com.amazonaws.swf.service.model.SimpleWorkflowService.DescribeDomain
Content-Encoding: amz-1.0
X-Amzn-Authorization: AWS3 AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE,Algorithm=HmacSHA256,SignedHeaders=Host;X-Amz-Date;X-Amz-Target;Content-Encoding,Signature=IFJtq3M366CHqMlTpyqYqd9z0ChCoKDC5SCJBsLifu4=
Referer: http://swf.us-east-1.amazonaws.com/explorer/index.html
Content-Length: 21
Pragma: no-cache
Cache-Control: no-cache

{"name": "867530901"}
```

### Amazon SWF 応答
<a name="swf-response"></a>

```
HTTP/1.1 200 OK
Content-Length: 137
Content-Type: application/json
x-amzn-RequestId: e86a6779-3f26-11e1-9a27-0760db01a4a8

{"configuration":
  {"workflowExecutionRetentionPeriodInDays": "60"},
 "domainInfo":
  {"description": "music",
   "name": "867530901",
   "status": "REGISTERED"}
}
```

プロトコル (`HTTP/1.1`) の後にステータスコード (`200`) が付いていることに注意してください。コードの値 `200` は、オペレーションが成功したことを示します。

Amazon SWF は null 値をシリアル化しません。JSON パーサーをリクエストに対する null 値をシリアル化するように設定している場合、Amazon SWF ではそれらの値が無視されます。

# Amazon SWF の HMAC-SHA 署名の生成
<a name="HMACAuth-swf"></a>

Amazon SWF へのリクエストはすべて認証されている必要があります。 AWS SDKsリクエストに署名し、トークンベースの認証を管理します。ただし、独自の HTTP `POST` リクエストを作成する場合は、リクエストの認証の一部として HTTP `POST Header` コンテンツの `x-amzn-authorization` 値を作成する必要があります。

ヘッダーの書式設定の詳細については、「[HTTP ヘッダーの内容](UsingJSON-swf.md#HTTPHeader)」を参照してください。 AWS バージョン 3 署名の AWS SDK for Java 実装については、[AWSSigner.java](https://github.com/aws/aws-sdk-java/blob/master/aws-java-sdk-core/src/main/java/com/amazonaws/auth/AWS3Signer.java) クラスを参照してください。

## リクエスト署名の作成
<a name="AuthProcess"></a>

HMAC-SHA リクエスト署名を作成する前に、 AWS 認証情報 (アクセスキー ID とシークレットキー) を取得する必要があります。

**重要**  
SHA1 または SHA256 のいずれかを使用してリクエストに署名できます。ただし、署名プロセス全体で同じ方法を使用するようにしてください。選択するメソッドは、HTTP ヘッダーの `Algorithm` 名の値と一致する必要があります。

### リクエストの署名を作成するには
<a name="swf-create-request-signature-steps"></a>

1. HTTP リクエストヘッダーの正規形式を作成します。HTTP ヘッダーの正規形式には次のものが含まれます。
   + `host`
   + `x-amz-` で始まるヘッダー要素

   含まれるヘッダーの詳細については、「[HTTP ヘッダーの内容](UsingJSON-swf.md#HTTPHeader)」を参照してください。

   1. 各ヘッダー名と値のペアについて、ヘッダー名 (ヘッダー値ではない) を小文字に変換します。

   1. カンマ区切りのヘッダー値にヘッダー名のマップを作成します。

      ```
      x-amz-example: value1
      x-amz-example: value2  =>  x-amz-example:value1,value2
      ```

      詳細については、「[RFC 2616 のセクション 4.2](http://tools.ietf.org/html/rfc2616)」を参照してください。

   1. ヘッダー名と値のペアごとに、名前と値のペアを `headerName:headerValue` 形式の文字列に変換します。`headerName` と `headerValue` の両方の先頭と末尾にある空白を削除します。コロンの前後に空白が無いようにします。

      ```
      x-amz-example1:value1,value2
      x-amz-example2:value3
      ```

   1. 最後の文字列も含め、変換された各文字列の後に改行 (`U+000A`) を挿入します。

   1. 変換された文字列のコレクションをヘッダー名ごとに並べ替えます。

1. 以下の項目を含む署名文字列の値を作成します。
   + `1` 行目: HTTP メソッド (`POST`)、その後に改行が続きます。
   + `2` 行目: リクエスト URI (`/`)、その後に改行が続きます。
   + `3` 行目: 空の文字列、その後に改行が続きます。
**注記**  
通常、クエリ文字列はここに表示されますが、Amazon SWF ではクエリ文字列を使用しません。
   + `4–n` 行目: ステップ 1 で作成した正規化されたリクエストヘッダーを表す文字列。改行が続きます。この改行はヘッダーと HTTP リクエストの本文の間に空白行を作成します。詳細については、「[RFC 2616](http://www.w3.org/Protocols/rfc2616/rfc2616-sec5.html)」を参照してください。
   + リクエストの本文、改行は*続きません*。

1. 署名文字列の値の SHA256 または SHA1 ダイジェストを計算します。プロセス全体で同じ SHA メソッドを使用します。

1. 前のステップで得られた値の SHA256 または SHA1 ダイジェスト (使用した方法によって異なります) と、 API アクションを使用して Security Token Service からの一時的なシークレットアクセスキーを使用して、HMAC-SHA をコンピューティングおよび Base64-encodeします。 SHA1 AWS `[GetSessionToken](https://docs.aws.amazon.com/STS/latest/UsingSTS/CreatingSessionTokens.html)` 
**注記**  
Amazon SWF では、Base64 エンコードされた HMAC-SHA 値の末尾に等号 (`=`) が必要です。Base64 エンコードルーチンに等号が追加されていない場合は、値の最後に 1 を追加します。

   Amazon SWF およびその他の AWS サービスで一時的なセキュリティ認証情報を使用する方法の詳細については、IAM *ユーザーガイド*の[AWS 「IAM と連携するサービス](https://docs.aws.amazon.com/STS/latest/UsingSTS/UsingTokens.html)」を参照してください。

1. 結果の値を、Amazon SWF への HTTP リクエストの `x-amzn-authorization` ヘッダーの `Signature` 名の値として配置します。

1. Amazon SWF はリクエストを認証し、指定されたオペレーションを実行します。