

# AWS CLI でのパラメータ値の指定
<a name="cli-usage-parameters"></a>

AWS Command Line Interface (AWS CLI) で使用される多くのパラメータは、以下の `aws ec2 create-key-pair` コマンド例のキーペア名 `my-key-pair` などのように、単純な文字列または数値です。

```
$ aws ec2 create-key-pair --key-name my-key-pair
```

コマンドのフォーマットは、ターミナルによって異なる場合があります。たとえば、ほとんどのターミナルは大文字と小文字を区別しますが、Powershell は大文字と小文字を区別しません。つまり、以下の 2 つのコマンド例では、`MyFile*.txt` と `myfile*.txt` を**異なる**パラメータとして表示するため、大文字と小文字が区別されるターミナルでは異なる結果になります。

ただし、PowerShell はこれらのリクエストを、`MyFile*.txt` と `myfile*.txt` を**同じ**パラメータと見なすのと同じように処理します。次のコマンド例は、`aws s3 cp` コマンドを使用したこれらのパラメータを示しています。

```
$ aws s3 cp . s3://amzn-s3-demo-bucket/path --include "MyFile*.txt"
$ aws s3 cp . s3://amzn-s3-demo-bucket/path --include "myfile*.txt"
```

PowerShell で大文字と小文字が区別されないことの詳細については、*PowerShell のドキュメント*の「[about\$1Case-Sensitivity](https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_case-sensitivity)」を参照してください。

特殊文字やスペース文字を含む文字列を引用符やリテラルで囲む必要がある場合があります。このフォーマットに関する規則は、ターミナルによっても異なる場合があります。複雑なパラメータを引用符で囲む方法の詳細については、「[Using quotation marks and literals with strings in the AWS CLI](cli-usage-parameters-quoting-strings.md)」を参照してください。

これらのトピックでは、最も一般的なターミナルフォーマットルールについて説明します。ターミナルでパラメータ値を認識できない場合は、このセクションのトピックを確認し、ターミナルのドキュメントで特定の構文ルールを確認してください。

**Topics**
+ [

# Common parameter types in the AWS CLI
](cli-usage-parameters-types.md)
+ [

# Using quotation marks and literals with strings in the AWS CLI
](cli-usage-parameters-quoting-strings.md)
+ [

# AWS CLI でのファイルからのパラメータの読み込み
](cli-usage-parameters-file.md)
+ [

# AWS CLI skeletons and input files in the AWS CLI
](cli-usage-skeleton.md)
+ [

# Using shorthand syntax in the AWS CLI
](cli-usage-shorthand.md)

# Common parameter types in the AWS CLI
<a name="cli-usage-parameters-types"></a>

このセクションでは、いくつかの一般的なパラメータタイプと一般的に必要な形式について説明します。

特定のコマンドでパラメータの書式化に問題がある場合には、コマンド名の後に **help** と入力することによって、ヘルプを確認してみてください。各サブコマンドのヘルプには、オプションの名前と説明が示されています。オプションのパラメータタイプは、括弧内に一覧表示されています。ヘルプ表示の詳細については、「[Accessing help and resources for the AWS CLI](cli-usage-help.md)」を参照してください。

**Topics**
+ [

## String
](#parameter-type-string)
+ [

## タイムスタンプ
](#parameter-type-timestamp)
+ [

## リスト
](#parameter-type-list)
+ [

## ブール値
](#parameter-type-boolean)
+ [

## 整数
](#parameter-type-integer)
+ [

## バイナリ/blob (バイナリラージオブジェクト) とストリーミング blob
](#parameter-type-blobs)
+ [

## マップ
](#parameter-type-map)
+ [

## ドキュメント
](#parameter-type-document)

## String
<a name="parameter-type-string"></a>

文字列パラメータには、[ASCII](https://wikipedia.org/wiki/ASCII) 文字セットの英数字、記号、空白文字が使用できます。空白文字を含む文字列は引用符で囲まれている必要があります。予期しない結果を避けるため、標準の空白文字以外の記号や空白文字は使用せず、お使いの端末の[引用符のルール](cli-usage-parameters-quoting-strings.md)に従うことをお勧めします。

一部の文字列パラメータはファイルからバイナリデータを受け取ることができます。例については、「[バイナリファイル](cli-usage-parameters-file.md#cli-usage-parameters-file-binary)」を参照してください。

## タイムスタンプ
<a name="parameter-type-timestamp"></a>

タイムスタンプの形式は [ISO 8601](https://www.iso.org/iso-8601-date-and-time-format.html) 標準に従います。これらは「`DateTime`」または「`Date`」パラメータと呼ばれることもあります。

```
$ aws ec2 describe-spot-price-history --start-time 2014-10-13T19:00:00Z
```

有効な形式は次のとおりです。
+ *YYYY*-*MM*-*DD*T*hh*:*mm*:*ss.sss**TZD (UTC)* (例: 2014-10-01T20:30:00.000Z)
+ *YYYY*-*MM*-*DD*T*hh*:*mm*:*ss.sss**TZD (オフセットあり)* (例: 2014-10-01T12:30:00.000-08:00)
+ *YYYY*-*MM*-*DD* (例: 2014-10-01)
+ Unix 時間 (秒)、例: 1412195400。これは [Unix エポック時間](https://wikipedia.org/wiki/Unix_time)と呼ばれることもあり、1970 年 1 月 1 日午前 0 時 (UTC) からの秒数を表します。

AWS CLI バージョン 2 はデフォルトで、すべての***レスポンス***の DateTime 値を ISO 8601 形式に変換します。

`cli\$1timestamp\$1format` ファイル設定を使用して、タイプスタンプ形式を設定できます。

## リスト
<a name="parameter-type-list"></a>

スペースで区切られた 1 つ以上の文字列。文字列項目にスペースがある場合は、その項目を引用符で囲む必要があります。予期しない結果を避けるため。お使いの端末の[引用のルール](cli-usage-parameters-quoting-strings.md)を遵守してください。

```
$ aws ec2 describe-spot-price-history --instance-types m1.xlarge m1.medium
```

## ブール値
<a name="parameter-type-boolean"></a>

オプションをオンまたはオフにするバイナリフラグです。例えば、`ec2 describe-spot-price-history` にはブール型の `--dry-run` パラメータがあり、このパラメータが指定されると、クエリを実際に実行することなくサービスのクエリを検証します。

```
$ aws ec2 describe-spot-price-history --dry-run
```

出力にはコマンドが正しい形式だったかどうかが示されます。このコマンドには、`--no-dry-run` バージョンのパラメータも含まれ、これを使用して、コマンドを通常どおりに実行することを明示的に示すことができます。これは、デフォルトの動作であるため、含める必要はありません。

## 整数
<a name="parameter-type-integer"></a>

符号なしの整数。

```
$ aws ec2 describe-spot-price-history --max-items 5
```

## バイナリ/blob (バイナリラージオブジェクト) とストリーミング blob
<a name="parameter-type-blobs"></a>

AWS CLI では、バイナリ値を文字列としてコマンドラインで直接渡すことができます。blob には 2 つのタイプがあります。
+ [blob](#parameter-type-blob)
+ [ストリーミング blob](#parameter-type-streaming-blob)

### blob
<a name="parameter-type-blob"></a>

タイプ `blob` で、パラメータに値を渡すには、`fileb://` プレフィックスを使用してバイナリデータを含むローカルファイルへのパスを指定する必要があります。`fileb://` プレフィックスを使用して参照されるファイルは、常に、エンコードされていない raw バイナリとして扱われます。指定されたパスは、現在の作業ディレクトリに対する相対パスとして解釈されます。例えば、`--plaintext` の `aws kms encrypt` パラメータは blob です。

```
$ aws kms encrypt \
    --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \
    --plaintext fileb://ExamplePlaintextFile \
    --output text \
    --query CiphertextBlob | base64 \
    --decode > ExampleEncryptedFile
```

**注記**  
下位互換性を保つため、`file://` プレフィックスを使用できます。ファイル設定 `cli\$1binary\$1format` または `--cli-binary-format` コマンドラインオプションに応じて、次の 2 つの形式が使用されます。  
AWS CLI バージョン 2 のデフォルト。設定の値が `base64` の場合、`file://` プレフィックスを使用して参照されるファイルは、base64 でエンコードされたテキストとして扱われます。
AWS CLI バージョン 1 のデフォルト。設定の値が `raw-in-base64-out` の場合、`file://` プレフィックスを使用して参照されるファイルはテキストとして読み取られます。AWS CLI は、これをバイナリにエンコードしようとします。
詳細については、ファイル設定 `cli\$1binary\$1format` または `--cli-binary-format` コマンドラインオプションを参照してください。

### ストリーミング blob
<a name="parameter-type-streaming-blob"></a>

`aws cloudsearchdomain upload-documents` などのストリーミング blob はプレフィックスを使用しません。代わりに、ストリーミング blob パラメータは直接ファイルパスを使用してフォーマットされます。次の例では、`aws cloudsearchdomain upload-documents` コマンドに直接ファイルパス `document-batch.json` を使用しています。

```
$ aws cloudsearchdomain upload-documents \
    --endpoint-url https://doc-my-domain.us-west-1.cloudsearch.amazonaws.com \
    --content-type application/json \
    --documents document-batch.json
```

## マップ
<a name="parameter-type-map"></a>

JSON または CLI の[短縮構文](cli-usage-shorthand.md)を使用して指定されたキーと値のペアのセット。次の JSON の例では、マップパラメータ `--key`を使用して、* my-table *という名前の Amazon DynamoDB テーブルから項目を読み取ります。パラメータは、ネストされた JSON 構造の数値 *1* で *id* という名前のプライマリキーを指定します。

コマンドラインでより高度な JSON を使用するには、`jq` のようなコマンドライン JSON プロセッサを使用して JSON 文字列を作成することを検討してください。`jq` の詳細については、*GitHub* の [jq repository](http://stedolan.github.io/jq/) を参照してください。

```
$ aws dynamodb get-item --table-name my-table --key '{"id": {"N":"1"}}'

{
    "Item": {
        "name": {
            "S": "John"
        },
        "id": {
            "N": "1"
        }
    }
}
```

## ドキュメント
<a name="parameter-type-document"></a>

**注記**  
[短縮構文](cli-usage-shorthand.md)は、ドキュメントタイプと互換性がありません。

ドキュメントタイプは、文字列内に JSON を埋め込む必要なく、データを送信するために使用されます。ドキュメントタイプによってサービスが任意のスキーマを提供することで、より柔軟なデータ型を使用できます。

これにより、値をエスケープすることなく JSON データを送信できます。例えば、次のようにエスケープされた JSON 入力の代わりに使用します。

```
{"document": "{\"key\":true}"}
```

次のドキュメントタイプが使用できます。

```
{"document": {"key": true}}
```

### ドキュメントタイプに対し有効な値
<a name="parameter-type-document-valid"></a>

ドキュメントタイプは柔軟な性質を持っているため、有効な値のタイプは複数あります。有効な値には次のようなものがあります。

**String**  

```
--option '"value"'
```

**Number**  

```
--option 123
--option 123.456
```

**ブール値**  

```
--option true
```

**Null**  

```
--option null
```

**配列**  

```
--option '["value1", "value2", "value3"]'
--option '["value", 1, true, null, ["key1", 2.34], {"key2": "value2"}]'
```

**オブジェクト**  

```
--option '{"key": "value"}'
--option '{"key1": "value1", "key2": 123, "key3": true, "key4": null, "key5": ["value3", "value4"], "key6": {"value5": "value6"}'
```

# Using quotation marks and literals with strings in the AWS CLI
<a name="cli-usage-parameters-quoting-strings"></a>

AWS CLI では、主に、一重引用符と二重引用符の使用方法が 2 つあります。
+ [空白を含む文字列を引用符で囲む](#cli-usage-parameters-quoting-strings-around)
+ [文字列内での引用符の使用](#cli-usage-parameters-quoting-strings-containing)

## 空白を含む文字列を引用符で囲む
<a name="cli-usage-parameters-quoting-strings-around"></a>

コマンドラインでパラメータ名とその値はスペースで区切ります。文字列値にスペースが埋め込まれている場合は、文字列全体を引用符で囲むことで、AWS CLI によってスペースが値と次のパラメータ名との区切りとして誤って解釈されないようにする必要があります。使用する引用符のタイプは、AWS CLI を実行しているオペレーティングシステムによって異なります。

------
#### [ Linux and macOS ]

一重引用符 `' '` を使用します。

```
$ aws ec2 create-key-pair --key-name 'my key pair'
```

引用符の使用方法の詳細については、使用するシェルのユーザードキュメントを参照してください。

------
#### [ PowerShell ]

**一重引用符 (推奨)**

一重引用符 `' '` は `verbatim` 文字列と呼ばれます。文字列は、入力したとおりにコマンドに渡されるため、PowerShell 変数は通過しません。

```
PS C:\> aws ec2 create-key-pair --key-name 'my key pair'
```

**二重引用符**

二重引用符 `" "` は `expandable` 文字列と呼ばれます。変数は拡張可能な文字列で渡すことができます。

```
PS C:\> aws ec2 create-key-pair --key-name "my key pair"
```

引用符の使用方法の詳細については、*Microsoft PowerShell ドキュメント*の「[About Quoting Rules](https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_quoting_rules?view=powershell-7)」を参照してください。

------
#### [ Windows command prompt ]

二重引用符 `" "` を使用します。

```
C:\> aws ec2 create-key-pair --key-name "my key pair"
```

------

オプションとして、パラメータ名と値をスペースの代わりに等号 `=` で区切ることができます。通常、これはパラメータの値がハイフンで始まる場合にのみ必要です。

```
$ aws ec2 delete-key-pair --key-name=-mykey
```

## 文字列内での引用符の使用
<a name="cli-usage-parameters-quoting-strings-containing"></a>

文字列に引用符が含まれている場合があり、シェルが正しく動作するためには、引用符のエスケープが必要になることがあります。パラメータ値の一般的なタイプの 1 つとして JSON 文字列があります。JSON 構造内の各要素の名前と値の前後にスペースと二重引用符 `" "` が含まれているため、これは複雑です。コマンドラインで JSON 形式のパラメータを入力する方法はオペレーティングシステムによって異なります。

コマンドラインでより高度な JSON を使用するには、`jq` のようなコマンドライン JSON プロセッサを使用して JSON 文字列を作成することを検討してください。`jq` の詳細については、*GitHub* の [jq repository](http://stedolan.github.io/jq/) を参照してください。

------
#### [ Linux and macOS ]

Linux および macOS で文字列を文字どおりに解釈するには、次の例のように、一重引用符 `' '` を使用して JSON データ構造を囲みます。JSON 文字列に埋め込まれた二重引用符は、文字どおり処理されるため、エスケープする必要はありません。JSON は一重引用符で囲まれているため、文字列内の一重引用符はエスケープする必要があります。このためには、通常は一重引用符 `\'` の前にバックスラッシュを使用します。

```
$ aws ec2 run-instances \
    --image-id ami-12345678 \
    --block-device-mappings '[{"DeviceName":"/dev/sdb","Ebs":{"VolumeSize":20,"DeleteOnTermination":false,"VolumeType":"standard"}}]'
```

引用符の使用方法の詳細については、使用するシェルのユーザードキュメントを参照してください。

------
#### [ PowerShell ]

一重引用符 `' '` または二重引用符 `" "` を使用します。

**一重引用符 (推奨)**

一重引用符 `' '` は `verbatim` 文字列と呼ばれます。文字列は、入力したとおりにコマンドに渡されるため、PowerShell 変数は通過しません。

JSON データ構造には二重引用符が含まれているため、**一重**引用符 `' '` で囲むことをお勧めします。**一重**引用符を使用する場合は、JSON 文字列に埋め込まれた**二重**引用符をエスケープする必要はありません。ただし、JSON 構造内では、各**一重**引用符をバックティック ``` でエスケープする必要があります。

```
PS C:\> aws ec2 run-instances `
    --image-id ami-12345678 `
    --block-device-mappings '[{"DeviceName":"/dev/sdb","Ebs":{"VolumeSize":20,"DeleteOnTermination":false,"VolumeType":"standard"}}]'
```

**二重引用符**

二重引用符 `" "` は `expandable` 文字列と呼ばれます。変数は拡張可能な文字列で渡すことができます。

**二重**引用符を使用する場合は、JSON 文字列に埋め込まれた **一重**引用符をエスケープする必要はありません。ただし、次の例のように、JSON 構造内で各**二重**引用符をバックティック ``` でエスケープする必要があります。

```
PS C:\> aws ec2 run-instances `
    --image-id ami-12345678 `
    --block-device-mappings "[{`"DeviceName`":`"/dev/sdb`",`"Ebs`":{`"VolumeSize`":20,`"DeleteOnTermination`":false,`"VolumeType`":`"standard`"}}]"
```

引用符の使用方法の詳細については、*Microsoft PowerShell ドキュメント*の「[About Quoting Rules](https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_quoting_rules?view=powershell-7)」を参照してください。

**警告**  
PowerShell は AWS CLI にコマンドを送信する前に、コマンドが一般的な PowerShell と `CommandLineToArgvW` 引用ルールのどちらを使用して解釈されるかを判断します。PowerShell が `CommandLineToArgvW` を使用して処理する場合は、バックスラッシュ `\` で文字をエスケープする必要があります。  
PowerShell の`CommandLineToArgvW` 詳細については、[ マイクロソフトドキュメントブログの](https://devblogs.microsoft.com/oldnewthing/20100917-00/?p=12833)「*Microsoft DevBlogs* [の CommandLineToArgvW による引用符とバックスラッシュの奇妙な扱いの理由](https://docs.microsoft.com/en-us/archive/blogs/twistylittlepassagesallalike/everyone-quotes-command-line-arguments-the-wrong-way)」を参照してください。*コマンドライン引数を間違った方法で引用する人々*、[ および Microsoft Docs ](https://docs.microsoft.com/en-us/windows/win32/api/shellapi/nf-shellapi-commandlinetoargvw#remarks)の *CommandLineToArgvW 関数を参照してください * 。  
**一重引用符**  
一重引用符 `' '` は `verbatim` 文字列と呼ばれます。文字列は、入力したとおりにコマンドに渡されるため、PowerShell 変数は通過しません。バックスラッシュ `\` で文字をエスケープします。  

```
PS C:\> aws ec2 run-instances `
    --image-id ami-12345678 `
    --block-device-mappings '[{\"DeviceName\":\"/dev/sdb\",\"Ebs\":{\"VolumeSize\":20,\"DeleteOnTermination\":false,\"VolumeType\":\"standard\"}}]'
```
**二重引用符**  
二重引用符 `" "` は `expandable` 文字列と呼ばれます。変数は `expandable` 文字列で渡すことができます。二重引用符で囲まれた文字列の場合、バックティックだけを使用するのではなく、引用符ごとに *`\$1* を使用して 2 回エスケープする必要があります。バックティックはバックスラッシュをエスケープし、バックスラッシュは `CommandLineToArgvW` プロセスのエスケープ文字として使用されます。  

```
PS C:\> aws ec2 run-instances `
    --image-id ami-12345678 `
    --block-device-mappings "[{`\"DeviceName`\":`\"/dev/sdb`\",`\"Ebs`\":{`\"VolumeSize`\":20,`\"DeleteOnTermination`\":false,`\"VolumeType`\":`\"standard`\"}}]"
```
**Blobs (推奨)**  
JSON データ入力の PowerShell 引用ルールをバイパスするには、BLOB を使用して JSON データを AWS CLI に直接渡します。BLOB の詳細については、「[blob](cli-usage-parameters-types.md#parameter-type-blob)」を参照してください。

------
#### [ Windows command prompt ]

Windows コマンドプロンプトでは、JSON データ構造を二重引用符 `" "` で囲む必要があります。また、コマンドプロセッサによって、JSON に埋め込まれた二重引用符が誤って解釈されないようにするには、以下の例のように、JSON データ構造内の各二重引用符 `\` をエスケープする (バックスラッシュ `"` 文字で始める) 必要もあります。

```
C:\> aws ec2 run-instances ^
    --image-id ami-12345678 ^
    --block-device-mappings "[{\"DeviceName\":\"/dev/sdb\",\"Ebs\":{\"VolumeSize\":20,\"DeleteOnTermination\":false,\"VolumeType\":\"standard\"}}]"
```

最も外側の二重引用符のみエスケープしません。

------

# AWS CLI でのファイルからのパラメータの読み込み
<a name="cli-usage-parameters-file"></a>

一部のパラメータでは、AWS CLI がデータをロードするファイル名を引数として期待します。他のパラメータを使用すると、コマンドラインで入力するテキストまたはファイルから読み取るテキストとしてパラメータ値を指定できます。ファイルが必須であるか省略可能であるかに関係なく、AWS CLI がファイルを理解できるように、ファイルを正しくエンコードする必要があります。ファイルのエンコーディングは、読み取りシステムのデフォルトロケールと一致する必要があります。これは、Python の `locale.getpreferredencoding()` メソッドを使用して判断できます。

この方法は 1 つのファイルで 1 つのパラメータを読み込む場合に使用します。1 つのファイルで複数のパラメータを読み込む方法については、「[AWS CLI skeletons and input files in the AWS CLI](cli-usage-skeleton.md)」を参照してください。

**注記**  
デフォルトでは、Windows PowerShell はテキストを UTF-16 として出力します。これは、JSON ファイルおよび多くの Linux システムで使用されている UTF-8 エンコードと競合します。`-Encoding ascii` が結果として得られるファイルを読み取ることができるように、PowerShell `Out-File` コマンドで AWS CLI を使用することをお勧めします。

**Topics**
+ [

## ファイルからパラメータを読み込む方法
](#cli-usage-parameters-file-how)
+ [

## バイナリファイル
](#cli-usage-parameters-file-binary)
+ [

## 短縮構文の値としてファイルを読み込む
](#cli-usage-parameters-file-shorthand)

## ファイルからパラメータを読み込む方法
<a name="cli-usage-parameters-file-how"></a>

場合によっては、コマンドラインパラメータ値としてすべてを入力することを試みる代わりに、ファイルからパラメータ値をロードすることが便利なことがあります (パラメータが複雑な JSON 文字列の場合など)。値を含むファイルを指定するには、次の形式でファイル URL を指定します。

```
file://complete/path/to/file
```
+ 最初の 2 つのスラッシュ「/」文字は仕様の一部です。必要なパスが「/」で始まる場合、結果は 3 つのスラッシュ文字 `file:///folder/file` になります。
+ この URI は、実際のパラメータコンテンツが含まれているファイルへのパスを示します。
+ スペースまたは特殊文字を含むファイルを使用する場合は、お使いの端末の[引用符とエスケープのルール](cli-usage-parameters-quoting-strings.md)に従ってください。

次の例のファイルパスは、現在の作業ディレクトリに対する相対値として解釈されます。

------
#### [ Linux or macOS ]

```
// Read from a file in the current directory
$ aws ec2 describe-instances --filters file://filter.json

// Read from a file in /tmp
$ aws ec2 describe-instances --filters file:///tmp/filter.json

// Read from a file with a filename with whitespaces
$ aws ec2 describe-instances --filters 'file://filter content.json'
```

------
#### [ Windows command prompt ]

```
// Read from a file in C:\temp
C:\> aws ec2 describe-instances --filters file://C:\temp\filter.json

// Read from a file with a filename with whitespaces
C:\> aws ec2 describe-instances --filters "file://C:\temp\filter content.json"
```

------

`file://` プレフィックスオプションは、「`~/`」、「`./`」、および「`../`」など、Unix 形式の拡張子をサポートしています。Windows では、「`~/`」式は、`%USERPROFILE%` 環境変数に格納されているユーザーディレクトリに展開されます。例えば、Windows 10 では、一般にユーザーディレクトリは `%USERPROFILE%` にあります。

別の JSON ドキュメントの値として埋め込まれている JSON ドキュメントもエスケープする必要があります。

```
$ aws sqs create-queue --queue-name my-queue --attributes file://attributes.json
```

**attributes.json**

```
{
  "RedrivePolicy": "{\"deadLetterTargetArn\":\"arn:aws:sqs:us-west-2:0123456789012:deadletter\", \"maxReceiveCount\":\"5\"}"
}
```

## バイナリファイル
<a name="cli-usage-parameters-file-binary"></a>

バイナリデータをパラメータとして取るコマンドでは、`fileb://` プレフィックスを使用して、データがバイナリコンテンツであることを指定します。バイナリデータを受け入れるコマンドは次のとおりです。
+  **`aws ec2 run-instances:`**`--user-data`パラメータ 
+  **`aws s3api put-object:`**`--sse-customer-key`パラメータ 
+  **`aws kms decrypt:`**`--ciphertext-blob`パラメータ 

次の例では、Linux コマンドラインツールを使用してバイナリ 256 ビット AES キーを生成し、Amazon S3 に渡して、アップロードされたファイルをサーバー側で暗号化します。

```
$ dd if=/dev/urandom bs=1 count=32 > sse.key
32+0 records in
32+0 records out
32 bytes (32 B) copied, 0.000164441 s, 195 kB/s
$ aws s3api put-object \
    --bucket amzn-s3-demo-bucket \
    --key test.txt \
    --body test.txt \
    --sse-customer-key fileb://sse.key \
    --sse-customer-algorithm AES256
{
    "SSECustomerKeyMD5": "iVg8oWa8sy714+FjtesrJg==",
    "SSECustomerAlgorithm": "AES256",
    "ETag": "\"a6118e84b76cf98bf04bbe14b6045c6c\""
}
```

JSON 形式のパラメータを含むファイルを参照する別の例については、[ユーザーへの IAM 管理ポリシーのアタッチ](cli-services-iam.md#cli-services-iam-policy) をご参照ください。

## 短縮構文の値としてファイルを読み込む
<a name="cli-usage-parameters-file-shorthand"></a>

短縮構文を使用する場合、値が大きいときや複雑なときは、値をファイルとして読み込む方が簡単なことがよくあります。ファイルを短縮構文の値として読み込む場合、形式が少し変わります。`key=value` で、`=` 演算子の代わりに `@=` 演算子を使用します。`@=` は AWS CLI に対して、その値を文字列ではなくファイルパスとして解釈するように指示します。次の例では、キーと値のペアを使用してファイルを読み込む方法を示しています。

------
#### [ Linux or macOS ]

```
--option key@=file://template.txt
```

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

```
--option "key1@=file://template.txt"
```

------

次の例では、`aws rolesanywhere create-trust-anchor` コマンドで証明書ファイルを読み込む方法を示しています。

```
$ aws rolesanywhere create-trust-anchor --name TrustAnchor \
    --source sourceData={x509CertificateData@=file://root-ca.crt},sourceType="CERTIFICATE_BUNDLE"  \ 
    --enabled
```

短縮構文の詳細については、「[Using shorthand syntax in the AWS CLI](cli-usage-shorthand.md)」を参照してください。

# AWS CLI skeletons and input files in the AWS CLI
<a name="cli-usage-skeleton"></a>

ほとんどの AWS CLI コマンドは、ファイルからのパラメータ入力のインポートに対応しています。これらのテンプレートは `generate-cli-skeleton` オプションを使用して生成し、`--cli-input-json` および `--cli-input-yaml` パラメータを使用してインポートできます。

**Topics**
+ [

## AWS CLI スケルトンと入力ファイルについて
](#cli-usage-skeleton-about)
+ [

## コマンドスケルトンを生成してインポートする
](#cli-usage-skeleton-generate)
+ [

## 入力ファイルとコマンドラインパラメータの組み合わせ
](#cli-usage-skeleton-combine)

## AWS CLI スケルトンと入力ファイルについて
<a name="cli-usage-skeleton-about"></a>

ほとんどの AWS Command Line Interface (AWS CLI) コマンドは、`--cli-input-json` および `--cli-input-yaml` パラメータを使用してファイルからパラメータ入力をインポートする機能をサポートしています。

これらの同じコマンドは、`--generate-cli-skeleton` パラメータを使用して、JSON または YAML 形式のファイルを生成します。このファイルには、編集および入力できるすべてのパラメータが含まれています。その後、入力済みのファイルを `--cli-input-json` または `--cli-input-yaml` パラメータで指定してこのコマンドを実行できます。

**重要**  
 [`aws s3` コマンド](https://docs.aws.amazon.com/cli/latest/reference/s3/index.html) などのカスタム AWS CLI コマンドは、このトピックで説明している `--generate-cli-skeleton` または `--cli-input-json` および `--cli-input-yaml` パラメータをサポートしていません。特定のコマンドがこれらのパラメータをサポートしているかどうかを確認するには、使用するコマンドに対して [`help` コマンド](cli-usage-help.md#cli-usage-help-command)を実行するか、[AWS CLI バージョン 2 リファレンスガイド](https://docs.aws.amazon.com/cli/latest/reference/index.html)を参照してください。

`--generate-cli-skeleton` は、カスタマイズしてコマンドの入力として使用できるパラメータテンプレートを生成して表示します。生成されるテンプレートには、そのコマンドによってサポートされているすべてのパラメータが含まれています。

`--generate-cli-skeleton` パラメータには、次のいずれかの値を指定できます。
+ `input` - 生成されたテンプレートには、JSON 形式の入力パラメータがすべて含まれます。これは、デフォルト値です。
+ `yaml-input` - 生成されたテンプレートには、YAML 形式の入力パラメータがすべて含まれます。
+ `output` - 生成されたテンプレートには、JSON 形式の出力パラメータがすべて含まれます。現在、YAML 形式で出力パラメータを要求することはできません。

AWS CLI は基本的にサービスの API の「ラッパー」であるため、スケルトンファイルは、すべてのパラメータを、基になる API パラメータ名で参照することを想定しています。このパラメータ名は AWS CLI のものとは異なることがあります。例えば、AWS CLI という名前の `user-name` パラメータは、AWS という名前の `UserName` のサービスの API パラメータにマップされる場合があります (大文字小文字が変更されダッシュがないことに注意)。エラーを回避するために、`--generate-cli-skeleton` オプションを使用して「正しい」パラメータ名でテンプレートを生成することをお勧めします。サービスの API リファレンスガイドを参照して、使用可能なパラメータ名を確認できます。テンプレートから、値を指定しない必須でないパラメータを削除できます。

例えば、次のコマンドを実行すると、Amazon Elastic Compute Cloud (Amazon EC2) コマンド**run-instances**のパラメータテンプレートが生成されます 。

------
#### [ JSON ]

次の例は、`input` パラメータのデフォルト値 (`--generate-cli-skeleton`) を使用して JSON でフォーマットされたテンプレートを生成する方法を示しています。

```
$ aws ec2 run-instances --generate-cli-skeleton
```

```
{
    "DryRun": true,
    "ImageId": "",
    "MinCount": 0,
    "MaxCount": 0,
    "KeyName": "",
    "SecurityGroups": [
        ""
    ],
    "SecurityGroupIds": [
        ""
    ],
    "UserData": "",
    "InstanceType": "",
    "Placement": {
        "AvailabilityZone": "",
        "GroupName": "",
        "Tenancy": ""
    },
    "KernelId": "",
    "RamdiskId": "",
    "BlockDeviceMappings": [
        {
            "VirtualName": "",
            "DeviceName": "",
            "Ebs": {
                "SnapshotId": "",
                "VolumeSize": 0,
                "DeleteOnTermination": true,
                "VolumeType": "",
                "Iops": 0,
                "Encrypted": true
            },
            "NoDevice": ""
        }
    ],
    "Monitoring": {
        "Enabled": true
    },
    "SubnetId": "",
    "DisableApiTermination": true,
    "InstanceInitiatedShutdownBehavior": "",
    "PrivateIpAddress": "",
    "ClientToken": "",
    "AdditionalInfo": "",
    "NetworkInterfaces": [
        {
            "NetworkInterfaceId": "",
            "DeviceIndex": 0,
            "SubnetId": "",
            "Description": "",
            "PrivateIpAddress": "",
            "Groups": [
                ""
            ],
            "DeleteOnTermination": true,
            "PrivateIpAddresses": [
                {
                    "PrivateIpAddress": "",
                    "Primary": true
                }
            ],
            "SecondaryPrivateIpAddressCount": 0,
            "AssociatePublicIpAddress": true
        }
    ],
    "IamInstanceProfile": {
        "Arn": "",
        "Name": ""
    },
    "EbsOptimized": true
}
```

------
#### [ YAML ]

次の例は、`yaml-input` パラメータの値 (`--generate-cli-skeleton`) を使用して YAML でフォーマットされたテンプレートを生成する方法を示しています。

```
$ aws ec2 run-instances --generate-cli-skeleton yaml-input
```

```
BlockDeviceMappings:  # The block device mapping entries.
- DeviceName: ''  # The device name (for example, /dev/sdh or xvdh).
  VirtualName: '' # The virtual device name (ephemeralN).
  Ebs: # Parameters used to automatically set up Amazon EBS volumes when the instance is launched.
    DeleteOnTermination: true  # Indicates whether the EBS volume is deleted on instance termination.
    Iops: 0 # The number of I/O operations per second (IOPS) that the volume supports.
    SnapshotId: '' # The ID of the snapshot.
    VolumeSize: 0 # The size of the volume, in GiB.
    VolumeType: st1 # The volume type. Valid values are: standard, io1, gp2, sc1, st1.
    Encrypted: true # Indicates whether the encryption state of an EBS volume is changed while being restored from a backing snapshot.
    KmsKeyId: '' # Identifier (key ID, key alias, ID ARN, or alias ARN) for a customer managed KMS key under which the EBS volume is encrypted.
  NoDevice: '' # Suppresses the specified device included in the block device mapping of the AMI.
ImageId: '' # The ID of the AMI.
InstanceType: c4.4xlarge # The instance type. Valid values are: t1.micro, t2.nano, t2.micro, t2.small, t2.medium, t2.large, t2.xlarge, t2.2xlarge, t3.nano, t3.micro, t3.small, t3.medium, t3.large, t3.xlarge, t3.2xlarge, t3a.nano, t3a.micro, t3a.small, t3a.medium, t3a.large, t3a.xlarge, t3a.2xlarge, m1.small, m1.medium, m1.large, m1.xlarge, m3.medium, m3.large, m3.xlarge, m3.2xlarge, m4.large, m4.xlarge, m4.2xlarge, m4.4xlarge, m4.10xlarge, m4.16xlarge, m2.xlarge, m2.2xlarge, m2.4xlarge, cr1.8xlarge, r3.large, r3.xlarge, r3.2xlarge, r3.4xlarge, r3.8xlarge, r4.large, r4.xlarge, r4.2xlarge, r4.4xlarge, r4.8xlarge, r4.16xlarge, r5.large, r5.xlarge, r5.2xlarge, r5.4xlarge, r5.8xlarge, r5.12xlarge, r5.16xlarge, r5.24xlarge, r5.metal, r5a.large, r5a.xlarge, r5a.2xlarge, r5a.4xlarge, r5a.8xlarge, r5a.12xlarge, r5a.16xlarge, r5a.24xlarge, r5d.large, r5d.xlarge, r5d.2xlarge, r5d.4xlarge, r5d.8xlarge, r5d.12xlarge, r5d.16xlarge, r5d.24xlarge, r5d.metal, r5ad.large, r5ad.xlarge, r5ad.2xlarge, r5ad.4xlarge, r5ad.8xlarge, r5ad.12xlarge, r5ad.16xlarge, r5ad.24xlarge, x1.16xlarge, x1.32xlarge, x1e.xlarge, x1e.2xlarge, x1e.4xlarge, x1e.8xlarge, x1e.16xlarge, x1e.32xlarge, i2.xlarge, i2.2xlarge, i2.4xlarge, i2.8xlarge, i3.large, i3.xlarge, i3.2xlarge, i3.4xlarge, i3.8xlarge, i3.16xlarge, i3.metal, i3en.large, i3en.xlarge, i3en.2xlarge, i3en.3xlarge, i3en.6xlarge, i3en.12xlarge, i3en.24xlarge, i3en.metal, hi1.4xlarge, hs1.8xlarge, c1.medium, c1.xlarge, c3.large, c3.xlarge, c3.2xlarge, c3.4xlarge, c3.8xlarge, c4.large, c4.xlarge, c4.2xlarge, c4.4xlarge, c4.8xlarge, c5.large, c5.xlarge, c5.2xlarge, c5.4xlarge, c5.9xlarge, c5.12xlarge, c5.18xlarge, c5.24xlarge, c5.metal, c5d.large, c5d.xlarge, c5d.2xlarge, c5d.4xlarge, c5d.9xlarge, c5d.18xlarge, c5n.large, c5n.xlarge, c5n.2xlarge, c5n.4xlarge, c5n.9xlarge, c5n.18xlarge, cc1.4xlarge, cc2.8xlarge, g2.2xlarge, g2.8xlarge, g3.4xlarge, g3.8xlarge, g3.16xlarge, g3s.xlarge, g4dn.xlarge, g4dn.2xlarge, g4dn.4xlarge, g4dn.8xlarge, g4dn.12xlarge, g4dn.16xlarge, cg1.4xlarge, p2.xlarge, p2.8xlarge, p2.16xlarge, p3.2xlarge, p3.8xlarge, p3.16xlarge, p3dn.24xlarge, d2.xlarge, d2.2xlarge, d2.4xlarge, d2.8xlarge, f1.2xlarge, f1.4xlarge, f1.16xlarge, m5.large, m5.xlarge, m5.2xlarge, m5.4xlarge, m5.8xlarge, m5.12xlarge, m5.16xlarge, m5.24xlarge, m5.metal, m5a.large, m5a.xlarge, m5a.2xlarge, m5a.4xlarge, m5a.8xlarge, m5a.12xlarge, m5a.16xlarge, m5a.24xlarge, m5d.large, m5d.xlarge, m5d.2xlarge, m5d.4xlarge, m5d.8xlarge, m5d.12xlarge, m5d.16xlarge, m5d.24xlarge, m5d.metal, m5ad.large, m5ad.xlarge, m5ad.2xlarge, m5ad.4xlarge, m5ad.8xlarge, m5ad.12xlarge, m5ad.16xlarge, m5ad.24xlarge, h1.2xlarge, h1.4xlarge, h1.8xlarge, h1.16xlarge, z1d.large, z1d.xlarge, z1d.2xlarge, z1d.3xlarge, z1d.6xlarge, z1d.12xlarge, z1d.metal, u-6tb1.metal, u-9tb1.metal, u-12tb1.metal, u-18tb1.metal, u-24tb1.metal, a1.medium, a1.large, a1.xlarge, a1.2xlarge, a1.4xlarge, a1.metal, m5dn.large, m5dn.xlarge, m5dn.2xlarge, m5dn.4xlarge, m5dn.8xlarge, m5dn.12xlarge, m5dn.16xlarge, m5dn.24xlarge, m5n.large, m5n.xlarge, m5n.2xlarge, m5n.4xlarge, m5n.8xlarge, m5n.12xlarge, m5n.16xlarge, m5n.24xlarge, r5dn.large, r5dn.xlarge, r5dn.2xlarge, r5dn.4xlarge, r5dn.8xlarge, r5dn.12xlarge, r5dn.16xlarge, r5dn.24xlarge, r5n.large, r5n.xlarge, r5n.2xlarge, r5n.4xlarge, r5n.8xlarge, r5n.12xlarge, r5n.16xlarge, r5n.24xlarge.
Ipv6AddressCount: 0 # [EC2-VPC] The number of IPv6 addresses to associate with the primary network interface.
Ipv6Addresses: # [EC2-VPC] The IPv6 addresses from the range of the subnet to associate with the primary network interface.
- Ipv6Address: ''  # The IPv6 address.
KernelId: '' # The ID of the kernel.
KeyName: '' # The name of the key pair.
MaxCount: 0 # [REQUIRED] The maximum number of instances to launch.
MinCount: 0 # [REQUIRED] The minimum number of instances to launch.
Monitoring: # Specifies whether detailed monitoring is enabled for the instance.
  Enabled: true  # [REQUIRED] Indicates whether detailed monitoring is enabled.
Placement: # The placement for the instance.
  AvailabilityZone: ''  # The Availability Zone of the instance.
  Affinity: '' # The affinity setting for the instance on the Dedicated Host.
  GroupName: '' # The name of the placement group the instance is in.
  PartitionNumber: 0 # The number of the partition the instance is in.
  HostId: '' # The ID of the Dedicated Host on which the instance resides.
  Tenancy: dedicated # The tenancy of the instance (if the instance is running in a VPC). Valid values are: default, dedicated, host.
  SpreadDomain: '' # Reserved for future use.
RamdiskId: '' # The ID of the RAM disk to select.
SecurityGroupIds: # The IDs of the security groups.
- ''
SecurityGroups: # [default VPC] The names of the security groups.
- ''
SubnetId: '' # [EC2-VPC] The ID of the subnet to launch the instance into.
UserData: '' # The user data to make available to the instance.
AdditionalInfo: '' # Reserved.
ClientToken: '' # Unique, case-sensitive identifier you provide to ensure the idempotency of the request.
DisableApiTermination: true # If you set this parameter to true, you can't terminate the instance using the Amazon EC2 console, CLI, or API; otherwise, you can.
DryRun: true # Checks whether you have the required permissions for the action, without actually making the request, and provides an error response.
EbsOptimized: true # Indicates whether the instance is optimized for Amazon EBS I/O.
IamInstanceProfile: # The IAM instance profile.
  Arn: ''  # The Amazon Resource Name (ARN) of the instance profile.
  Name: '' # The name of the instance profile.
InstanceInitiatedShutdownBehavior: stop # Indicates whether an instance stops or terminates when you initiate shutdown from the instance (using the operating system command for system shutdown). Valid values are: stop, terminate.
NetworkInterfaces: # The network interfaces to associate with the instance.
- AssociatePublicIpAddress: true  # Indicates whether to assign a public IPv4 address to an instance you launch in a VPC.
  DeleteOnTermination: true # If set to true, the interface is deleted when the instance is terminated.
  Description: '' # The description of the network interface.
  DeviceIndex: 0 # The position of the network interface in the attachment order.
  Groups: # The IDs of the security groups for the network interface.
  - ''
  Ipv6AddressCount: 0 # A number of IPv6 addresses to assign to the network interface.
  Ipv6Addresses: # One or more IPv6 addresses to assign to the network interface.
  - Ipv6Address: ''  # The IPv6 address.
  NetworkInterfaceId: '' # The ID of the network interface.
  PrivateIpAddress: '' # The private IPv4 address of the network interface.
  PrivateIpAddresses: # One or more private IPv4 addresses to assign to the network interface.
  - Primary: true  # Indicates whether the private IPv4 address is the primary private IPv4 address.
    PrivateIpAddress: '' # The private IPv4 addresses.
  SecondaryPrivateIpAddressCount: 0 # The number of secondary private IPv4 addresses.
  SubnetId: '' # The ID of the subnet associated with the network interface.
  InterfaceType: '' # The type of network interface.
PrivateIpAddress: '' # [EC2-VPC] The primary IPv4 address.
ElasticGpuSpecification: # An elastic GPU to associate with the instance.
- Type: ''  # [REQUIRED] The type of Elastic Graphics accelerator.
ElasticInferenceAccelerators: # An elastic inference accelerator to associate with the instance.
- Type: ''  # [REQUIRED]  The type of elastic inference accelerator.
TagSpecifications: # The tags to apply to the resources during launch.
- ResourceType: network-interface  # The type of resource to tag. Valid values are: client-vpn-endpoint, customer-gateway, dedicated-host, dhcp-options, elastic-ip, fleet, fpga-image, host-reservation, image, instance, internet-gateway, launch-template, natgateway, network-acl, network-interface, reserved-instances, route-table, security-group, snapshot, spot-instances-request, subnet, traffic-mirror-filter, traffic-mirror-session, traffic-mirror-target, transit-gateway, transit-gateway-attachment, transit-gateway-route-table, volume, vpc, vpc-peering-connection, vpn-connection, vpn-gateway.
  Tags: # The tags to apply to the resource.
  - Key: ''  # The key of the tag.
    Value: '' # The value of the tag.
LaunchTemplate: # The launch template to use to launch the instances.
  LaunchTemplateId: ''  # The ID of the launch template.
  LaunchTemplateName: '' # The name of the launch template.
  Version: '' # The version number of the launch template.
InstanceMarketOptions: # The market (purchasing) option for the instances.
  MarketType: spot  # The market type. Valid values are: spot.
  SpotOptions: # The options for Spot Instances.
    MaxPrice: ''  # The maximum hourly price you're willing to pay for the Spot Instances.
    SpotInstanceType: one-time # The Spot Instance request type. Valid values are: one-time, persistent.
    BlockDurationMinutes: 0 # The required duration for the Spot Instances (also known as Spot blocks), in minutes.
    ValidUntil: 1970-01-01 00:00:00 # The end date of the request.
    InstanceInterruptionBehavior: terminate # The behavior when a Spot Instance is interrupted. Valid values are: hibernate, stop, terminate.
CreditSpecification: # The credit option for CPU usage of the T2 or T3 instance.
  CpuCredits: ''  # [REQUIRED] The credit option for CPU usage of a T2 or T3 instance.
CpuOptions: # The CPU options for the instance.
  CoreCount: 0  # The number of CPU cores for the instance.
  ThreadsPerCore: 0 # The number of threads per CPU core.
CapacityReservationSpecification: # Information about the Capacity Reservation targeting option.
  CapacityReservationPreference: none  # Indicates the instance's Capacity Reservation preferences. Valid values are: open, none.
  CapacityReservationTarget: # Information about the target Capacity Reservation.
    CapacityReservationId: ''  # The ID of the Capacity Reservation.
HibernationOptions: # Indicates whether an instance is enabled for hibernation.
  Configured: true  # If you set this parameter to true, your instance is enabled for hibernation.
LicenseSpecifications: # The license configurations.
- LicenseConfigurationArn: ''  # The Amazon Resource Name (ARN) of the license configuration.
```

------

## コマンドスケルトンを生成してインポートする
<a name="cli-usage-skeleton-generate"></a>

**パラメータスケルトンファイルを生成して使用するには**

1. `--generate-cli-skeleton` パラメータを指定してコマンドを実行して JSON または YAML のいずれかを生成し、出力を保存用ファイルに送ります。

------
#### [ JSON ]

   ```
   $ aws ec2 run-instances --generate-cli-skeleton input > ec2runinst.json
   ```

------
#### [ YAML ]

   ```
   $ aws ec2 run-instances --generate-cli-skeleton yaml-input > ec2runinst.yaml
   ```

------

1. テキストエディタでパラメータスケルトンファイルを開き、不要なパラメータを削除します。例えば、テンプレートを次のように削除できます。不要な要素を削除した後、ファイルが有効な JSON または YAML であることを確認します。

------
#### [ JSON ]

   ```
   {
       "DryRun": true,
       "ImageId": "",
       "KeyName": "",
       "SecurityGroups": [
           ""
       ],
       "InstanceType": "",
       "Monitoring": {
           "Enabled": true
       }
   }
   ```

------
#### [ YAML ]

   ```
   DryRun: true
   ImageId: ''
   KeyName: ''
   SecurityGroups:
   - ''
   InstanceType:
   Monitoring: 
     Enabled: true
   ```

------

   この例では、Amazon EC2 ドライラン機能を使用するには、`DryRun` パラメータを `true` に設定したままにします。この機能を使用すると、実際にリソースを作成または変更することなく、コマンドを安全にテストできます。

1. 残りの値には、シナリオに適した値を入力します。この例では、インスタンスタイプ、キー名、セキュリティグループ、および使用する Amazon マシンイメージ (AMI) の識別子を指定しています。この例では、デフォルトの AWS リージョン リージョンを前提としています。AMI `ami-dfc39aef` は、`us-west-2` リージョンでホストされている 64 ビットの Amazon Linux イメージです。別のリージョンを使用する場合は、[使用する正しい AMI ID を見つける必要があります](https://aws.amazon.com/amazon-linux-ami/)。

------
#### [ JSON ]

   ```
   {
       "DryRun": true,
       "ImageId": "ami-dfc39aef",
       "KeyName": "mykey",
       "SecurityGroups": [
           "my-sg"
       ],
       "InstanceType": "t2.micro",
       "Monitoring": {
           "Enabled": true
       }
   }
   ```

------
#### [ YAML ]

   ```
   DryRun: true
   ImageId: 'ami-dfc39aef'
   KeyName: 'mykey'
   SecurityGroups:
   - 'my-sg'
   InstanceType: 't2.micro'
   Monitoring: 
     Enabled: true
   ```

------

1. `file://` プレフィックスを使用して、完了したテンプレートファイルを `--cli-input-json` または --`cli-input-yaml` パラメータのいずれかに渡すことによって、入力済みパラメータでコマンドを実行します。AWS CLI は、パスを現在の作業ディレクトリからの相対パスとして解釈します。次の例では、AWS CLI は現在の作業ディレクトリ内のファイルを検索します。

------
#### [ JSON ]

   ```
   $ aws ec2 run-instances --cli-input-json file://ec2runinst.json
   ```

   ```
   A client error (DryRunOperation) occurred when calling the RunInstances operation: Request would have succeeded, but DryRun flag is set.
   ```

------
#### [ YAML ]

   ```
   $ aws ec2 run-instances --cli-input-yaml file://ec2runinst.yaml
   ```

   ```
   A client error (DryRunOperation) occurred when calling the RunInstances operation: Request would have succeeded, but DryRun flag is set.
   ```

------

   リハーサルのエラーは、JSON または YAML の形式が正しく、パラメータ値が有効であることを示します。出力でその他の問題が報告された場合は、それを修正し、「`Request would have succeeded`」というメッセージが表示されるまで前のステップを繰り返します。

1. これで、`DryRun` パラメータを `false` に設定して、dry run を無効にできます。

------
#### [ JSON ]

   ```
   {
       "DryRun": false,
       "ImageId": "ami-dfc39aef",
       "KeyName": "mykey",
       "SecurityGroups": [
           "my-sg"
       ],
       "InstanceType": "t2.micro",
       "Monitoring": {
           "Enabled": true
       }
   }
   ```

------
#### [ YAML ]

   ```
   DryRun: false
   ImageId: 'ami-dfc39aef'
   KeyName: 'mykey'
   SecurityGroups:
   - 'my-sg'
   InstanceType: 't2.micro'
   Monitoring: 
     Enabled: true
   ```

------

1. コマンドを実行すると、`run-instances` は Amazon EC2 インスタンスを実際に起動し、正常起動によって生成された詳細を表示します。出力の形式は、入力パラメータテンプレートの形式とは別に、`--output` パラメータによって制御されます。

------
#### [ JSON ]

   ```
   $ aws ec2 run-instances --cli-input-json file://ec2runinst.json --output json
   ```

   ```
   {
       "OwnerId": "123456789012",
       "ReservationId": "r-d94a2b1",
       "Groups": [],
       "Instances": [
   ...
   ```

------
#### [ YAML ]

   ```
   $ aws ec2 run-instances --cli-input-yaml file://ec2runinst.yaml --output yaml
   ```

   ```
   OwnerId: '123456789012'
   ReservationId: 'r-d94a2b1',
   Groups":
   - ''
   Instances:
   ...
   ```

------

## 入力ファイルとコマンドラインパラメータの組み合わせ
<a name="cli-usage-skeleton-combine"></a>

入力ファイルはすべてのパラメータに使用することも、AWS CLI で指定したパラメータと組み合わせることもできます。この機能を利用すると、繰り返し使用する設定は入力ファイルに保存する一方で、個別の設定はコマンド自体で指定できます。

次の `aws ec2 run-instances` の例では、入力ファイルとパラメータを組み合わせて使用しています。使用する Amazon マシンイメージ (AMI) のインスタンスタイプ、キー名、セキュリティグループ、識別子を指定し、デフォルトの AWS リージョン を前提としています。AMI `ami-dfc39aef` は、`us-west-2` リージョンでホストされている 64 ビットの Amazon Linux イメージです。別のリージョンを使用する場合は、[使用する正しい AMI ID を見つける必要があります](https://aws.amazon.com/amazon-linux-ami/)。

------
#### [ JSON ]

JSON ファイルの内容:

```
{
    "ImageId": "ami-dfc39aef",
    "KeyName": "mykey",
    "SecurityGroups": [
        "my-sg"
    ],
    "InstanceType": "t2.micro",
    "Monitoring": {
        "Enabled": true
    }
}
```

------
#### [ YAML ]

YAML ファイルの内容:

```
ImageId: 'ami-dfc39aef'
KeyName: 'mykey'
SecurityGroups:
- 'my-sg'
InstanceType: 't2.micro'
Monitoring: 
  Enabled: true
```

------

次の例では、入力ファイルと `--dry-run` パラメータを組み合わせて使用して、コマンドをドライランし、必要なアクセス許可があるかどうか、ファイルに有効な値が入力されているかどうかを確認します。

------
#### [ JSON ]

```
$ aws ec2 run-instances --cli-input-json file://ec2runinst.json --dry-run
```

```
A client error (DryRunOperation) occurred when calling the RunInstances operation: Request would have succeeded, but DryRun flag is set.
```

------
#### [ YAML ]

```
$ aws ec2 run-instances --cli-input-yaml file://ec2runinst.yaml --dry-run
```

```
A client error (DryRunOperation) occurred when calling the RunInstances operation: Request would have succeeded, but DryRun flag is set.
```

------

次の例では、同じ入力ファイルを使用しますが、`--no-dry-run` パラメータを使用してコマンドを本番実行しています。

------
#### [ JSON ]

```
$ aws ec2 run-instances --cli-input-json file://ec2runinst.json --no-dry-run --output json
```

```
{
    "OwnerId": "123456789012",
    "ReservationId": "r-d94a2b1",
    "Groups": [],
    "Instances": [
...
```

------
#### [ YAML ]

```
$ aws ec2 run-instances --cli-input-yaml file://ec2runinst.yaml --no-dry-run --output yaml
```

```
OwnerId: '123456789012'
ReservationId: 'r-d94a2b1',
Groups":
- ''
Instances:
...
```

------

# Using shorthand syntax in the AWS CLI
<a name="cli-usage-shorthand"></a>

AWS Command Line Interface (AWS CLI) は、JSON 形式の多くのオプションパラメータを受け入れることができます。ただし、大きな JSON リストや構造体をコマンドラインに入力するのは手間がかかる場合があります。これを簡単にするために、AWS CLI は短縮構文もサポートしているため、完全な JSON 形式を使用するより、オプションパラメータを簡単に表現できます。

**Topics**
+ [

## キーと値のペアでパラメータを構造化する
](#shorthand-structure-parameters)
+ [

## 短縮構文の値としてファイルを読み込む
](#shorthand-files)
+ [

## AWS CLI を使用した短縮構文の使用
](#shorthand-list-parameters)

## キーと値のペアでパラメータを構造化する
<a name="shorthand-structure-parameters"></a>

AWS CLI の短縮構文を利用すると、ユーザーがフラットなパラメータ (ネストされていない構造) に入力するのが容易になります。形式は、キーと値のペアのカンマ区切りリストです。短縮構文は文字列であるため、必ず、お使いのターミナルに適した[引用](cli-usage-parameters-quoting-strings.md)とエスケープの規則を使用してください。

------
#### [ Linux or macOS ]

```
--option key1=value1,key2=value2,key3=value3
```

JSON 形式の次の例と同じになっています。

```
--option '{"key1":"value1","key2":"value2","key3":"value3"}'
```

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

```
--option "key1=value1,key2=value2,key3=value3"
```

JSON 形式の次の例と同じになっています。

```
--option '{"key1":"value1","key2":"value2","key3":"value3"}'
```

------

それぞれのカンマ区切りのキーと値のペアの間に空白があってはいけません。以下に、Amazon DynamoDB `update-table` コマンドの例を示します。`--provisioned-throughput` オプションは、省略表記で指定されています。

```
$ aws dynamodb update-table \
    --provisioned-throughput ReadCapacityUnits=15,WriteCapacityUnits=10 \
    --table-name MyDDBTable
```

これは、JSON 形式の次の例と同じになっています。

```
$ aws dynamodb update-table \
    --provisioned-throughput '{"ReadCapacityUnits":15,"WriteCapacityUnits":10}' \
    --table-name MyDDBTable
```

## 短縮構文の値としてファイルを読み込む
<a name="shorthand-files"></a>

値が大きいときや複雑なときは、値として読み込む方が簡単なことがよくあります。ファイルを短縮構文の値として読み込む場合、形式が少し変わります。`key=value` で、`=` 演算子の代わりに `@=` 演算子を使用します。`@=` は AWS CLI に対して、その値を文字列ではなくファイルパスとして解釈するように指示します。短縮構文でファイルを読み込む場合、通常の [AWS CLI ファイル形式ルールが適用](cli-usage-parameters-file.md)されます。次の例では、キーと値のペアを使用してファイルを読み込む方法を示しています。

------
#### [ Linux or macOS ]

```
--option key@=file://template.txt
```

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

```
--option "key1@=file://template.txt"
```

------

次の例では、`aws rolesanywhere create-trust-anchor` コマンドで証明書ファイルを読み込む方法を示しています。

```
$ aws rolesanywhere create-trust-anchor --name TrustAnchor \
    --source sourceData={x509CertificateData@=file://root-ca.crt},sourceType="CERTIFICATE_BUNDLE"  \ 
    --enabled
```

## AWS CLI を使用した短縮構文の使用
<a name="shorthand-list-parameters"></a>

リストフォーム内の入力パラメータは、JSON または省略形の 2 つの方法で指定できます。AWS CLI の短縮構文は、数値、文字列、またはネストされていない構造体が含まれるリストを簡単に渡せるように設計されています。

基本的な形式を次に示します。ここで、リストの値は、1 つのスペースで区切られます。

```
--option value1 value2 value3
```

これは、JSON 形式の次の例と同じになっています。

```
--option '[value1,value2,value3]'
```

前述したように、数字のリスト、文字列のリスト、またはネストされていない構造の省略表現のリストを指定できます。Amazon Elastic Compute Cloud (Amazon EC2) の `stop-instances` コマンドの例を次に示します。ここで、`--instance-ids` オプションの入力パラメータ (文字列のリスト) は省略表現で指定されています。

```
$ aws ec2 stop-instances \
    --instance-ids i-1486157a i-1286157c i-ec3a7e87
```

これは、JSON 形式の次の例と同じになっています。

```
$ aws ec2 stop-instances \
    --instance-ids '["i-1486157a","i-1286157c","i-ec3a7e87"]'
```

次の例は、Amazon EC2 `create-tags` コマンドを示しています。このコマンドは、`--tags` オプションのネストされていない構造のリストを取得します。`--resources` オプションは、タグを付けるインスタンスの ID を指定します。

```
$ aws ec2 create-tags \
    --resources i-1286157c \
    --tags Key=My1stTag,Value=Value1 Key=My2ndTag,Value=Value2 Key=My3rdTag,Value=Value3
```

これは、JSON 形式の次の例と同じになっています。JSON パラメータは、読みやすくするために複数行で記述されます。

```
$ aws ec2 create-tags \
    --resources i-1286157c \
    --tags '[
        {"Key": "My1stTag", "Value": "Value1"},
        {"Key": "My2ndTag", "Value": "Value2"},
        {"Key": "My3rdTag", "Value": "Value3"}
    ]'
```