AWS Command Line Interface
ユーザーガイド

AWS Command Line Interface のパラメータ値の指定

多くのパラメータは、以下の例のキーペア名 my-key-pair などのように、単純な文字列または数値です。

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

スペース文字のない文字列は引用符で囲んでも囲まなくてもかまいません。ただし、1 つ以上のスペース文字を含む文字列は引用符で囲む必要があります。次の例に示すとおり、Linux, macOS, or Unix および Windows PowerShell では一重引用符 (') を使用し、Windows コマンドプロンプトでは二重引用符 (") を使用します。

Windows PowerShell、Linux, macOS, or Unix

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

Windows コマンドプロセッサ

> aws ec2 create-key-pair --key-name "my key pair"

スペースの代わりに等号も使用できます。通常、これはパラメータの値がハイフンで始まる場合にのみ必要です。

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

一般的なパラメータタイプ

このセクションでは、サービスが準拠することを想定しているいくつかの一般的なパラメータタイプとその形式について説明します。特定のコマンドでパラメータのフォーマットに問題がある場合、コマンド名の後に help と入力してマニュアルを確認します。次に例を示します。

$ aws ec2 describe-spot-price-history help

各サブコマンドのヘルプでは、関数、オプション、出力、および例について説明します。オプションのセクションでは、各オプションの名前と説明とともに括弧内にオプションのパラメータタイプが示されています。

文字列 – 文字列パラメータには、ASCII 文字セットで英数字、記号、および空白文字が含まれます。空白文字を含む文字列は引用符で囲んである必要があります。標準の空白文字以外の記号と空白文字の使用は推奨されておらず、AWS CLI の使用中に問題が発生する可能性があります。

一部の文字列パラメータはファイルからバイナリデータを受け取ることができます。例については、「バイナリファイル」を参照してください。

タイムスタンプ – タイムスタンプは ISO 8601 標準形式に基づいています。これらは、「DateTime」または「Date」タイプのパラメータとも呼ばれます。

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

有効な形式は次のとおりです。

  • YYYY-MM-DDThh:mm:ss.sssTZD (UTC)、例:2014-10-01T20:30:00.000Z

  • YYYY-MM-DDThh:mm:ss.sssTZD (オフセットあり)、例:2014-10-01T12:30:00.000-08:00

  • YYYY-MM-DD、例:2014-10-01

  • Unix 時間 (秒)、例:1412195400

リスト – スペースで区切られた 1 つ以上の文字列です。

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

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

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

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

整数 – 符号なしの整数です。

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

BLOB – バイナリオブジェクトです。BLOB パラメータは、バイナリデータが格納されているローカルファイルへのパスを取ります。パスにはプロトコル識別子 (http://file:// など) を含まないようにします。

aws s3api put-object--body パラメータは、BLOB です。

$ aws s3api put-object --bucket my-bucket --key testimage.png --body /tmp/image.png

マップ – JSON または短縮構文で指定された一連のキーと値のペアです。次の例では、マップパラメータ --keymy-table という名前の DynamoDB テーブルから項目を読み取ります。パラメータは、ネストされた JSON 構造の数値 1id という名前のプライマリキーを指定します。

$ aws dynamodb get-item --table-name my-table --key '{"id": {"N":"1"}}' { "Item": { "name": { "S": "John" }, "id": { "N": "1" } } }

次のセクションでは、JSON 引数について詳しく説明します。

JSON をパラメータに使用する

JSON は複雑なコマンドラインパラメータを指定する場合に便利です。たとえば、次のコマンドでは、us-west-2c アベイラビリティーゾーンにもあり m1.small または m1.medium のインスタンスタイプを持つすべての EC2 インスタンスをリスト表示します。

$ aws ec2 describe-instances --filters "Name=instance-type,Values=t2.micro,m1.medium" "Name=availability-zone,Values=us-west-2c"

次の例では、JSON 配列で同等のフィルタのリストを指定します。角括弧は、カンマで区切られた JSON オブジェクトの配列を作成するために使用されます。各オブジェクトはカンマで区切られたキーと値のペアのリストです (「Name」と「Values」は両方ともこのインスタンスのキー)。

「Values」キーの右側にある値は、それ自体が配列です。配列に 1 つの値の文字列のみが含まれている場合でも、これは必要です。

[ { "Name": "instance-type", "Values": ["t2.micro", "m1.medium"] }, { "Name": "availability-zone", "Values": ["us-west-2c"] } ]

一方、最も外側の角括弧は、複数のフィルタが指定された場合にのみ必要です。上記のコマンドの 1 つのフィルタのバージョンを JSON 形式にしたら、次のようになります。

$ aws ec2 describe-instances --filters '{"Name": "instance-type", "Values": ["t2.micro", "m1.medium"]}'

一部のオペレーションでは、データが JSON 形式である必要があります。たとえば、ec2 run-instances コマンドの --block-device-mappings パラメータにパラメータを渡すには、ブロックデバイスの情報を JSON 形式にする必要があります。

この例では、JSON で単一の 20 GiB Elastic Block Store デバイスを指定し、起動中のインスタンスで /dev/sdb にマッピングします。

{ "DeviceName": "/dev/sdb", "Ebs": { "VolumeSize": 20, "DeleteOnTermination": false, "VolumeType": "standard" } }

複数のデバイスにアタッチするには、次の例のように配列内のオブジェクトをリストにします。

[ { "DeviceName": "/dev/sdb", "Ebs": { "VolumeSize": 20, "DeleteOnTermination": false, "VolumeType": "standard" } }, { "DeviceName": "/dev/sdc", "Ebs": { "VolumeSize": 10, "DeleteOnTermination": true, "VolumeType": "standard" } } ]

コマンドラインで直接 JSON を入力することもできますし (文字列の引用 を参照)、または、ファイルに保存しコマンドラインから参照することもできます (ファイルからパラメータをロードする を参照)。

大量のデータを渡すときは、JSON をファイルに保存し、コマンドラインから参照する方が簡単かもしれません。ファイル内の JSON データは、読み込み、編集、および他のユーザーとの共有がより簡単にできます。この手法は次のセクションで説明されます。

JSON の詳細については、「Wikipedia-JSON」および「RFC4627 - application/json JSON のメディアタイプ」を参照してください。

文字列の引用

コマンドラインで JSON 形式のパラメータを入力する方法はオペレーティングシステムによって異なります。Linux, macOS, or Unix と Windows PowerShell では、以下の例のように一重引用符 (') を使用して JSON データ構造を囲みます。

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

一方、Windows コマンドプロンプトでは、二重引用符 ('') を使用して JSON データ構造を囲みます。さらに、次の例のように、JSON データ構造自体の中にある各二重引用符 (") にはバックスラッシュ (\) のエスケープ文字が必要です。

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

Windows PowerShell では、次の例に示すように、JSON データ構造を囲む一重引用符 (')、および JSON 構造内で各二重引用符をエスケープするバックスラッシュ (\) が必要です。

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

パラメータの値自体が JSON ドキュメントである場合は、埋め込み JSON ドキュメントの引用符をエスケープします。たとえば、aws sqs create-queueattribute パラメータが RedrivePolicy キーであることがあります。RedrivePolicy の値は JSON ドキュメントで、エスケープする必要があります。

$ aws sqs create-queue --queue-name my-queue --attributes '{ "RedrivePolicy":"{\"deadLetterTargetArn\":\"arn:aws:sqs:us-west-2:0123456789012:deadletter\", \"maxReceiveCount\":\"5\"}"}'

ファイルからパラメータをロードする

コマンドラインの JSON 文字列をエスケープする必要をなくすには、JSON をファイルからロードします。ローカルファイルからパラメーターをロードするには、次の例に示すように、file:// プレフィックスを使用してファイルへのパスを提供します。

Linux, macOS, or Unix

// 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

Windows

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

file:// プレフィックスのオプションは、'~/', ' を含め Unix 形式の拡張をサポートしています。/', および '../'. Windows では、'~/' 式で %USERPROFILE% 環境変数に保存されているユーザーディレクトリへ拡張します。たとえば、Windows 7 では、一般的に、ユーザーディレクトリは C:\Users\User Name\ です。

パラメータキーの値として提供されている 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\"}" }

バイナリファイル

バイナリデータをパラメーターとして取るコマンドでは、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 my-bucket --key test.txt --body test.txt --sse-customer-key fileb://sse.key --sse-customer-algorithm AES256 { "SSECustomerKeyMD5": "iVg8oWa8sy714+FjtesrJg==", "SSECustomerAlgorithm": "AES256", "ETag": "\"a6118e84b76cf98bf04bbe14b6045c6c\"" }

リモートファイル

AWS CLI http:// または https:// の URL でインターネット上にホストされているファイルからのパラメーターのロードもサポートしています。以下の例では、Amazon S3 バケットにあるファイルを参照しています。これにより、任意のコンピュータからパラメータファイルにアクセスできますが、ファイルはパブリックアクセス可能な場所に保存されている必要があります。

$ aws ec2 run-instances --image-id ami-a13d6891 --block-device-mappings http://my-bucket.s3.amazonaws.com/filename.json

上記の例で、filename.json ファイルには以下の JSON データが含まれます。

[ { "DeviceName": "/dev/sdb", "Ebs": { "VolumeSize": 20, "DeleteOnTermination": false, "VolumeType": "standard" } } ]

より複雑な JSON 形式のパラメータを含むファイルを参照する別の例については、「IAM ユーザー用の IAM ポリシーを設定する」を参照してください。