

**이 문서는 AWS CLI의 버전 1에만 해당합니다.**

곧 AWS CLI 버전 1에 대한 지원이 종료될 예정임을 알려드립니다. AWS CLI 버전 2로 마이그레이션하는 것이 좋습니다. 마이그레이션 날짜, 추가 세부 정보 및 방법에 대한 자세한 내용은 [공지 사항](https://aws.amazon.com/blogs/developer/cli-v1-maintenance-mode-announcement/)을 참조하세요. AWS CLI의 버전 2와 관련된 문서는 [버전 2 사용 설명서](https://docs.aws.amazon.com/cli/latest/userguide/)를 참조하세요.

# 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 이후 경과된 초 수를 나타냅니다.

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

### 스트리밍 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-remote)
+ [파일을 간편 구문 값으로 로드](#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)을 따릅니다.

**참고**  
이미 URL을 예측한 파라미터(예: CloudFormation 템플릿 URL를 식별하는 파라미터)에서는 이 동작이 자동으로 비활성화됩니다. 또한 AWS CLI 구성 파일에서 [`cli_follow_urlparam`](cli-configure-files.md#cli-config-cli_follow_urlparam) 설정을 사용 중지하여 이 동작을 사용 중지할 수도 있습니다.

다음 예제의 파일 경로는 현재 작업 디렉터리를 기준으로 해석됩니다.

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

## 원격 파일
<a name="cli-usage-parameters-file-remote"></a>

또한 AWS CLI는 `http://` 또는 `https://` URL을 사용하여 인터넷에서 호스트되는 파일에서 파라미터 로드를 지원합니다. 다음 예제에서는 Amazon S3 버킷에 저장된 파일을 참조합니다. 이렇게 하면 모든 컴퓨터에서 파라미터 파일에 액세스할 수 있지만, 컨테이너에 공개적으로 액세스할 수 있어야 합니다.

```
$ aws ec2 run-instances \
    --image-id ami-12345678 \
    --block-device-mappings http://amzn-s3-demo-bucket.s3.amazonaws.com/filename.json
```

위의 예제에서는 `filename.json` 파일에 다음 JSON 데이터가 포함된 것으로 가정합니다.

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

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` 파라미터를 사용하여 가져올 수 있습니다.

**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` 파라미터를 사용하여 파일에서 파라미터 입력을 허용하는 기능을 지원합니다.

이러한 명령은 `--generate-cli-skeleton` 파라미터를 사용하므로 모든 파라미터를 편집하거나 입력할 수 있는 JSON 형식의 파일을 만들 수 있습니다. 그러면 `--cli-input-json` 파라미터를 사용하여 명령을 실행하고 입력된 파일을 가리킬 수 있습니다.

**중요**  
[`aws s3` 명령](https://docs.aws.amazon.com/cli/v1/reference/s3/index.html) 같은 사용자 지정 AWS CLI 명령은 이 주제에서 다루는 `--generate-cli-skeleton` 또는 `--cli-input-json` 파라미터를 지원하지 않습니다. 특정 명령이 이러한 파라미터를 지원하는지 확인하려면 사용하려는 명령에 대한 [`help` 명령](cli-usage-help.md#cli-usage-help-command)을 실행하거나 [AWS CLI 버전 1 참조 가이드](https://docs.aws.amazon.com/cli/v1/reference/)를 참조하세요.

`--generate-cli-skeleton`은 명령에서 사용자 지정하고 입력으로 사용할 수 있는 파라미터 템플릿을 생성하고 표시합니다. 생성된 템플릿에는 명령이 지원하는 모든 파라미터가 포함됩니다.

`--generate-cli-skeleton` 파라미터는 다음 값 중 하나를 허용합니다.
+ `input` - 생성된 템플릿에 JSON 형식의 모든 입력 파라미터가 포함됩니다. 이것이 기본값입니다.
+ `output` - 생성된 템플릿에 JSON 형식의 모든 출력 파라미터가 포함됩니다.

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

------

## 명령 스켈레톤 생성 및 가져오기
<a name="cli-usage-skeleton-generate"></a>

**파라미터 스켈레톤 파일을 생성하고 사용하려면**

1. `--generate-cli-skeleton` 파라미터와 함께 명령을 실행하여JSON을 생성하고 출력을 파일로 전송하여 저장합니다.

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

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

------

1. 텍스트 편집기에서 파라미터 스켈레톤 파일을 열고 필요하지 않은 파라미터를 제거합니다. 예를 들어, 템플릿을 다음과 같이 줄일 수 있습니다. 불필요한 요소를 제거한 후에도 파일이 여전히 유효한 JSON인지 확인합니다.

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

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

------

1. `file://` 접두사를 사용해 완료된 템플릿 파일을 `--cli-input-json` 파라미터로 전달하여 완료된 파라미터로 명령을 실행합니다. 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.
   ```

------

   테스트 실행 오류는 JSON 이 올바르게 구성되었으며 파라미터 값이 유효함을 나타냅니다. 출력에 다른 문제가 보고되면 문제를 해결하고 "`Request would have succeeded`" 메시지가 표시될 때까지 이전 단계를 반복합니다.

1. 이제 테스트 실행을 비활성화하기 위해 `DryRun` 파라미터를 `false`로 설정할 수 있습니다.

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

   ```
   {
       "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": [
   ...
   ```

------

## 입력 파일과 명령줄 파라미터 결합
<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
    }
}
```

------

다음 예제에서는 입력 파일을 `--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.
```

------

다음 예제에서는 동일한 입력 파일을 사용하지만 `--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": [
...
```

------

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