

# 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은 대소문자를 구분하지 않습니다. 즉, 다음 두 명령 예시는 대소문자를 구분하는 터미널에서 서로 다른 결과를 얻습니다. `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)를 참조하세요.

특수 문자나 공백 문자가 포함된 문자열을 따옴표 또는 리터럴로 묶어야 하는 경우가 있습니다. 이 형식에 대한 규칙도 터미널마다 다를 수 있습니다. 복잡한 파라미터를 따옴표로 묶는 방법에 대한 자세한 내용은 [AWS CLI에서 문자열에 따옴표와 리터럴 사용](cli-usage-parameters-quoting-strings.md) 섹션을 참조하세요.

이러한 토픽에서는 가장 일반적인 터미널 형식 지정 규칙을 다룹니다. 터미널에서 파라미터 값을 인식하는 데 문제가 있는 경우 이 섹션의 토픽을 검토하고 터미널의 문서에서 특정 구문 규칙을 확인해야 합니다.

**Topics**
+ [

# AWS CLI에서 공통 파라미터 유형
](cli-usage-parameters-types.md)
+ [

# AWS CLI에서 문자열에 따옴표와 리터럴 사용
](cli-usage-parameters-quoting-strings.md)
+ [

# AWS CLI에서 파일의 파라미터 로드
](cli-usage-parameters-file.md)
+ [

# AWS CLI에서 AWS CLI 스켈레톤 및 입력 파일
](cli-usage-skeleton.md)
+ [

# AWS CLI에서 간편 구문 사용
](cli-usage-shorthand.md)

# AWS CLI에서 공통 파라미터 유형
<a name="cli-usage-parameters-types"></a>

이 섹션에서는 몇 가지 공통 파라미터 유형과 일반적으로 필요한 형식에 대해 설명합니다.

특정 명령에 대한 파라미터의 형식 지정에 문제가 있는 경우, 명령 이름 다음에 **help**를 입력하여 도움말을 검토합니다. 각 하위 명령에 대한 도움말에는 옵션의 이름과 설명이 포함되어 있습니다. 옵션의 파라미터 유형이 괄호 안에 나열됩니다. 도움말 보기에 대한 자세한 내용은 [AWS CLI에 대한 도움말 및 리소스 액세스](cli-usage-help.md) 섹션을 참조하세요.

**Topics**
+ [

## 문자열
](#parameter-type-string)
+ [

## 타임스탬프
](#parameter-type-timestamp)
+ [

## List
](#parameter-type-list)
+ [

## 부울
](#parameter-type-boolean)
+ [

## Integer
](#parameter-type-integer)
+ [

## 이진/blob(이진 대용량 객체) 및 스트리밍 blob
](#parameter-type-blobs)
+ [

## 맵
](#parameter-type-map)
+ [

## 문서
](#parameter-type-document)

## 문자열
<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 Epoch 시간](https://wikipedia.org/wiki/Unix_time)이라고도 하며 1970년 1월 1일 자정 UTC 이후 경과된 초 수를 나타냅니다.

기본적으로 AWS CLI 버전 2는 모든 ***응답*** DateTime 값을 ISO 8601 형식으로 변환합니다.

`cli\$1timestamp\$1format` 파일 설정을 사용하여 타임스탬프 형식을 설정할 수 있습니다.

## List
<a name="parameter-type-list"></a>

공백으로 구분된 하나 이상의 문자열입니다. 문자열 항목에 공백이 포함되어 있으면 해당 항목 앞뒤에 인용 부호를 사용해야 합니다. 예기치 않은 결과를 방지하기 위해 터미널의 [인용 규칙](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` 버전의 파라미터도 포함됩니다. 기본 동작이기 때문에 반드시 포함할 필요는 없습니다.

## Integer
<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이 있습니다.
+ [Blob](#parameter-type-blob)
+ [스트리밍 Blob](#parameter-type-streaming-blob)

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

`blob` 유형의 파라미터에 값을 전달하려면 `fileb://` 접두사를 사용하여 이진 데이터가 포함된 로컬 파일의 경로를 지정해야 합니다. `fileb://` 접두사를 사용하여 참조된 파일은 항상 인코딩되지 않은 원시 이진 값으로 처리됩니다. 지정된 경로는 현재 작업 디렉터리를 기준으로 하는 것으로 해석됩니다. 예를 들어 `--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` 명령줄 옵션에 따라 두 가지 형식이 사용됩니다.  
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을 사용하려면 명령줄 JSON 프로세서(예: `jq`)를 사용하여 JSON 문자열을 생성하는 것이 좋습니다. `jq`에 대한 자세한 내용은 *GitHub*에서 [jq 리포지토리](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>

문서 유형의 유연한 특성으로 인해 유효한 값 유형이 여러 개 있습니다. 유효한 값은 다음과 같습니다.

**문자열**  

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

**숫자**  

```
--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"}'
```

# AWS CLI에서 문자열에 따옴표와 리터럴 사용
<a name="cli-usage-parameters-quoting-strings"></a>

AWS CLI에는 주로 두 가지 방법으로 작은따옴표와 큰따옴표가 사용됩니다.
+ [공백이 포함된 문자열 주위에 따옴표 사용](#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 문서*에서 [인용 규칙 정보](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>

문자열에는 따옴표가 포함될 수 있으며 셸이 제대로 작동하려면 따옴표를 이스케이프 처리해야 할 수 있습니다. 일반적인 파라미터 값 유형 중 하나는 JSON 문자열입니다. JSON 구조의 각 요소 이름과 값 주위에 공백과 큰따옴표(`" "`)가 포함되어 있기 때문에 복잡합니다. JSON 형식의 파라미터를 명령줄에 입력하는 방법은 운영 체제에 따라 다릅니다.

명령줄에서 고급 JSON을 사용하려면 명령줄 JSON 프로세서(예: `jq`)를 사용하여 JSON 문자열을 생성하는 것이 좋습니다. `jq`에 대한 자세한 내용은 *GitHub*에서 [jq 리포지토리](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 문서*에서 [인용 규칙 정보](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`에 대한 자세한 내용은 *Microsoft DevBlogs*의 [What's up with the strange treatment of quotation marks and backslashes by CommandLineToArgvW](https://devblogs.microsoft.com/oldnewthing/20100917-00/?p=12833), *Microsoft Docs Blog*의 [Everyone quotes command line arguments the wrong way](https://docs.microsoft.com/en-us/archive/blogs/twistylittlepassagesallalike/everyone-quotes-command-line-arguments-the-wrong-way) 및 *Microsoft Docs*의 [CommandLineToArgvW 함수](https://docs.microsoft.com/en-us/windows/win32/api/shellapi/nf-shellapi-commandlinetoargvw#remarks)를 참조하세요.  
**작은따옴표**  
작은따옴표 `' '`는 `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*를 사용하여 두 번 이스케이프 처리해야 합니다. 백틱은 백슬래시를 이스케이프하며, 백슬래시는 `CommandLineToArgvW` 프로세스의 이스케이프 문자로 사용됩니다.  

```
PS C:\> aws ec2 run-instances `
    --image-id ami-12345678 `
    --block-device-mappings "[{`\"DeviceName`\":`\"/dev/sdb`\",`\"Ebs`\":{`\"VolumeSize`\":20,`\"DeleteOnTermination`\":false,`\"VolumeType`\":`\"standard`\"}}]"
```
**Blob(권장)**  
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()` 메서드를 사용하여 이를 확인할 수 있습니다.

이 방법은 단일 파라미터에 대한 파일을 로드하기 위한 것입니다. 단일 파일로 여러 파라미터를 로드하는 방법에 대한 자세한 내용은 [AWS CLI에서 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
```
+ 처음 두 개의 슬래시 '/' 문자는 사양의 일부입니다. 필수 경로가 '/'로 시작하면 결과는 슬래시 문자 세 개(`file:///folder/file`)입니다.
+ URL은 실제 파라미터 내용이 포함된 파일로의 경로를 제공합니다.
+ 공백이나 특수 문자가 있는 파일을 사용하는 경우 터미널의 [인용 및 이스케이프 규칙](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
```

간편 구문에 대한 자세한 내용은 [AWS CLI에서 간편 구문 사용](cli-usage-shorthand.md) 섹션을 참조하세요.

# AWS CLI에서 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 Machine Image(AMI)의 인스턴스 유형, 키 이름, 보안 그룹 및 식별자를 제공합니다. 이 예제에서는 기본 AWS 리전을 가정합니다. `ami-dfc39aef` AMI는 `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`로 설정할 수 있습니다.

------
#### [ 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 Machine Image(AMI)의 인스턴스 유형, 키 이름, 보안 그룹 및 식별자가 제공되고 기본 AWS 리전을 가정합니다. `ami-dfc39aef` AMI는 `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:
...
```

------

# 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"}'
```

------

쉼표로 구분된 각 키 값 페어 사이에 공백이 없어야 합니다. 다음은 `update-table` 옵션이 간편 방식으로 지정되어 있는 Amazon DynamoDB `--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 또는 간편 구문이라는 두 가지 방법으로 지정할 수 있습니다. AWS CLI의 간편 구문은 숫자, 문자열 또는 비중첩 구조가 있는 목록을 더 쉽게 입력할 수 있도록 하기 위해 설계되었습니다.

기본 형식은 여기에 표시됩니다. 여기서 목록의 값은 단일 공백으로 구분됩니다.

```
--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"}
    ]'
```