

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 사용자 지정 구성 요소 문서에서 변수 사용
<a name="toe-user-defined-variables"></a>

변수를 사용하면 애플리케이션 전체에서 사용할 수 있는 의미 있는 이름으로 데이터에 레이블을 지정할 수 있습니다. 복잡한 워크플로에 대해 간단하고 읽기 쉬운 형식으로 사용자 지정 변수를 정의하고 AWSTOE 구성 요소의 YAML 애플리케이션 구성 요소 문서에서 참조할 수 있습니다.

이 섹션에서는 구문, 이름 제약 조건 및 예제 AWSTOE 를 포함하여 YAML 애플리케이션 구성 요소 문서에서 구성 요소의 변수를 정의하는 데 도움이 되는 정보를 제공합니다.

## 상수
<a name="user-defined-vars-constants"></a>

상수는 한 번 정의하면 수정하거나 재정의할 수 없는 변경 불가능한 변수입니다. 상수는 AWSTOE 문서의 `constants` 섹션에 있는 값을 사용하여 정의할 수 있습니다.

**상수 이름 지정 규칙**
+ 이름은 3\$1128자 이내로 작성해야 합니다.
+ 이름에는 영숫자(A-Z, a-z, 0-9), 하이픈(-) 또는 밑줄(\$1)만 포함될 수 있습니다.
+ 단, 문서 내에서 고유 이름을 갖도록 합니다.
+ 이름은 YAML 문자열로 지정되어야 합니다.

**구문**

```
constants:
  - <name>:
      type: <constant type>
      value: <constant value>
```


| 키 이름 | 필수 | 설명 | 
| --- | --- | --- | 
|  `name`  |  예  | 상수의 이름. 문서에 대해 고유해야 합니다(다른 파라미터 이름 또는 상수와 같지 않아야 함). | 
| `value` | 예 | 상수의 값. | 
| `type` | 예 | 상수의 유형. 지원되는 string 유형 | 

**문서 내 참조 상수 값**  
다음과 같이 YAML 문서 내의 단계 또는 루프 입력에서 상수를 참조할 수 있습니다.
+ 상수 참조는 대/소문자를 구분하며 이름이 정확하게 일치해야 합니다.
+ 이름은 이중 중괄호 `{{` *MyConstant* `}}`로 묶어야 합니다.
+ 중괄호 내에는 공백이 허용되며 자동으로 잘립니다. 예를 들어, 다음 참조는 모두 유효합니다.

  `{{ MyConstant }}`, `{{ MyConstant}}`, `{{MyConstant }}`, `{{MyConstant}}`
+ YAML 문서의 참조는 문자열(작은따옴표 또는 큰따옴표로 묶음)로 지정해야 합니다.

  예: `- {{ MyConstant }}`(은)는 문자열로 식별되지 않으므로 유효하지 않습니다.

  그러나 `- '{{ MyConstant }}'` 및 `- "{{ MyConstant }}"` 참조는 모두 유효합니다. 

**예제**  
단계 입력에서 참조되는 상수

```
name: Download AWS CLI version 2
schemaVersion: 1.0
constants:
  - Source:
      type: string
      value: https://awscli.amazonaws.com/AWSCLIV2.msi
phases:
  - name: build
    steps:
      - name: Download
        action: WebDownload
        inputs:
          - source: '{{ Source }}'
            destination: 'C:\Windows\Temp\AWSCLIV2.msi'
```

루프 입력에서 참조되는 상수

```
name: PingHosts
schemaVersion: 1.0
constants:
  - Hosts:
      type: string
      value: 127.0.0.1,amazon.com
phases:
  - name: build
    steps:
      - name: Ping
        action: ExecuteBash
        loop:
          forEach:
            list: '{{ Hosts }}'
            delimiter: ','
        inputs:
          commands:
            - ping -c 4 {{ loop.value }}
```

## 파라미터
<a name="user-defined-vars-parameters"></a>

파라미터는 호출 애플리케이션이 런타임에 제공할 수 있는 설정을 포함하는 변경 가능한 변수입니다. YAML 문서의 `Parameters` 섹션에서 파라미터를 정의할 수 있습니다.

**파라미터 이름 규칙**
+ 이름은 3\$1128자 이내로 작성해야 합니다.
+ 이름에는 영숫자(A-Z, a-z, 0-9), 하이픈(-) 또는 밑줄(\$1)만 포함될 수 있습니다.
+ 단, 문서 내에서 고유 이름을 갖도록 합니다.
+ 이름은 YAML 문자열로 지정되어야 합니다.

### 구문
<a name="vars-parameters-syntax"></a>

```
parameters:
  - <name>:
      type: <parameter type>
      default: <parameter value>
      description: <parameter description>
```


| 키 이름 | 필수 | 설명 | 
| --- | --- | --- | 
| `name` | 예 | 파라미터의 이름입니다. 문서에 대해 고유해야 합니다(다른 파라미터 이름 또는 상수와 같지 않아야 함). | 
| `type` | 예 | 파라미터의 데이터 유형입니다. 지원되는 유형에는 `string`(이)가 있습니다. | 
| `default` | 아니요 | 파라미터의 기본값입니다. | 
| `description` | 아니요 | 파라미터에 대해 설명합니다. | 

### 문서의 참조 파라미터 값
<a name="vars-parameters-referencing"></a>

다음과 같이 YAML 문서 내의 단계 또는 루프 입력에서 파라미터를 참조할 수 있습니다.
+ 파라미터 참조는 대/소문자를 구분하며 이름이 정확하게 일치해야 합니다.
+ 이름은 `{{` *MyParameter* `}}`라는 이중 중괄호로 묶어야 합니다. 
+ 중괄호 내에는 공백이 허용되며 자동으로 잘립니다. 예를 들어, 다음 참조는 모두 유효합니다.

  `{{ MyParameter }}`, `{{ MyParameter}}`, `{{MyParameter }}`, `{{MyParameter}}`
+ YAML 문서의 참조는 문자열(작은따옴표 또는 큰따옴표로 묶음)로 지정해야 합니다.

  예: `- {{ MyParameter }}`(은)는 문자열로 식별되지 않으므로 유효하지 않습니다.

  그러나 `- '{{ MyParameter }}'` 및 `- "{{ MyParameter }}"` 참조는 모두 유효합니다. 

**예제**  
다음 예제는 YAML 문서에서 파라미터를 사용하는 방법을 보여 줍니다.
+ 단계별 입력의 파라미터를 참조하세요.

  ```
  name: Download AWS CLI version 2
  schemaVersion: 1.0
  parameters:
    - Source:
        type: string
        default: 'https://awscli.amazonaws.com/AWSCLIV2.msi'
        description: The AWS CLI installer source URL.
  phases:
    - name: build
      steps:
        - name: Download
          action: WebDownload
          inputs:
            - source: '{{ Source }}'
              destination: 'C:\Windows\Temp\AWSCLIV2.msi'
  ```
+ 루프 입력의 파라미터를 참조하세요.

  ```
  name: PingHosts
  schemaVersion: 1.0
  parameters:
    - Hosts:
        type: string
        default: 127.0.0.1,amazon.com
        description: A comma separated list of hosts to ping.
  phases:
    - name: build
      steps:
        - name: Ping
          action: ExecuteBash
          loop:
            forEach:
              list: '{{ Hosts }}'
              delimiter: ','
          inputs:
            commands:
              - ping -c 4 {{ loop.value }}
  ```

### 런타임 시 파라미터 재정의
<a name="vars-parameters-set-at-runtime"></a>

키-값 페어와 AWS CLI 함께의 `--parameters` 옵션을 사용하여 런타임 시 파라미터 값을 설정할 수 있습니다.
+ 파라미터 키-값 쌍을 등호(<name>=<value>)로 구분하여 이름과 값으로 지정합니다.
+ 여러 파라미터는 쉼표로 구분해야 합니다.
+ YAML 구성 요소 문서에 없는 파라미터 이름은 무시됩니다.
+ 파라미터 이름과 값이 모두 필요합니다.

**중요**  
구성 요소 파라미터는 일반 텍스트 값이며 AWS CloudTrail에 기록됩니다. AWS Secrets Manager 또는 AWS Systems Manager 파라미터 스토어를 사용하여 보안 암호를 저장하는 것이 좋습니다. Secrets Manager에 대한 자세한 내용은 *AWS Secrets Manager 사용 설명서*의 [Secrets Manager란 무엇입니까?](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html)를 참조하십시오. AWS Systems Manager Parameter Store에 대한 자세한 내용은 *AWS Systems Manager 사용 설명서*의 [AWS Systems Manager Parameter Store](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html) 섹션을 참조하십시오.

#### 구문
<a name="vars-runtime-parameters-syntax"></a>

```
--parameters name1=value1,name2=value2...
```


| CLI 옵션 | 필수 | 설명 | 
| --- | --- | --- | 
| --parameters *name*=*value*,... | 아니요 | 이 옵션은 파라미터 이름을 키로 사용하여 키-값 페어의 목록을 가져옵니다. | 

**예제**  
다음 예제는 YAML 문서에서 파라미터를 사용하는 방법을 보여 줍니다.
+ 이 `--parameter` 옵션에 지정된 파라미터 키-값 쌍은 유효하지 않습니다.

  ```
  --parameters ntp-server=
  ```
+  AWS CLI에서 `--parameter` 옵션을 사용하여 하나의 파라미터 키-값 쌍을 설정합니다.

  ```
  --parameters ntp-server=ntp-server-windows-qe.us-east1.amazon.com
  ```
+  AWS CLI에서 `--parameter` 옵션을 사용하여 여러 파라미터 키-값 쌍을 설정합니다.

  ```
  --parameters ntp-server=ntp-server.amazon.com,http-url=https://internal-us-east1.amazon.com
  ```

## Systems Manager Parameter Store 파라미터 사용
<a name="toe-ssm-parameters"></a>

변수 앞에 AWS Systems Manager 를 붙여 구성 요소 문서에서 Parameter Store 파라미터(SSM 파라미터)를 참조할 수 있습니다`aws:ssm`. 예: 

`{{ aws:ssm:/my/param }}`는 SSM 파라미터의 값으로 해석됩니다`/my/param`.

이 기능은 다음 SSM 파라미터 유형을 지원합니다.
+ 문자열 - AWSTOE 문자열 유형에 매핑됩니다.
+ StringList - 유형에 매핑됩니다 AWSTOE `stringList`.
+ SecureString - AWSTOE 문자열 유형에 매핑됩니다.

파라미터 스토어에 대한 자세한 내용은 *AWS Systems Manager 사용 설명서*의 [AWS Systems Manager 파라미터 스토어](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html)를 참조하세요.

SSM 파라미터를 사용하여 AWS Secrets Manager 보안 암호를 참조할 수도 있습니다`SecureString`. 예를 들어 `{{ aws:ssm:/aws/reference/secretsmanager/test/test-secret }}`입니다. 자세한 내용은 [파라미터 스토어 파라미터에서 보안 암호 참조를 AWS Secrets Manager 참조하세요](https://docs.aws.amazon.com/systems-manager/latest/userguide/integration-ps-secretsmanager.html).

**중요**  
Image Builder는 로그에서 `SecureString` 파라미터 해상도를 제외합니다. 그러나 구성 요소 문서에서 실행된 명령을 통해 민감한 정보가 기록되지 않도록 할 책임도 있습니다. 예를 들어 보안 문자열과 함께 `echo` 명령을 사용하는 경우 명령은 로그에 일반 텍스트 값을 씁니다.

### 필수 IAM 권한
<a name="toe-ssm-parameters-permissions"></a>

구성 요소에서 Systems Manager 파라미터를 사용하려면 인스턴스 역할에 파라미터 리소스 ARN에 대한 `ssm:GetParameter` 권한이 있어야 합니다. 예제:

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

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": "ssm:GetParameter",
			"Resource": "arn:aws:ssm:*:111122223333:parameter/ImageBuilder-*"
		}
	]
}
```

------

암호화된 값에 액세스하려면 다음 권한도 필요합니다.
+ 고객 관리형으로 암호화된 `SecureString` 파라미터 또는 AWS Secrets Manager 값에 `kms:Decrypt`를 추가합니다 AWS KMS key.
+ Secrets Manager 보안 암호를 참조하는 `secretsmanager:GetSecretValue` 경우를 추가합니다.

### 구성 요소 문서에서 SSM 파라미터 참조
<a name="toe-ssm-parameters-example"></a>

다음 예제에서는 구성 요소에서 Systems Manager 파라미터의 Systems Manager 파라미터 스토어 파라미터를 참조하는 방법을 보여줍니다.

```
name: UseSSMParameterVariable
description: This is a sample component document that prints out the value of an SSM Parameter. Never do this for a SecureString parameter.
schemaVersion: 1.0

phases:
  - name: verify
    steps:
      - name: EchoParameterValue
        action: ExecuteBash
        inputs:
          commands:
            - echo "Log SSM parameter name: /my/test/param, value {{ aws:ssm:/my/test/param }}."
```

### SSM 파라미터에 대한 동적 런타임 변수 확인
<a name="toe-dynamic-vars"></a>

AWSTOE는 변수 참조 내에서 런타임 시 값을 조작하거나 변환하는 데 사용할 수 있는 다음과 같은 내장 함수를 제공합니다.

#### 함수 확인
<a name="toe-function-resolve"></a>

`resolve` 함수는 다른 변수 참조 내부의 변수 참조를 해석하여 동적 변수 이름 참조를 허용합니다. 이는 파라미터 경로의 일부가 가변적이고 문서 파라미터로 전달될 수 있는 SSM 파라미터로 작업할 때 유용합니다.

`resolve` 함수는 SSM 파라미터의 이름 부분에 대한 동적 확인만 지원합니다.

##### 구문
<a name="toe-function-resolve-syntax"></a>

다음 예제`dynamic_variable`의는 SSM 파라미터의 이름을 나타내며 다음 중 하나여야 합니다.
+ SSM 파라미터 참조(예: `aws:ssm:/my/param`)
+ 구성 요소 문서 파라미터 참조(예: `parameter-name`)

```
{{ aws:ssm:resolve(dynamic_variable) }}
```

##### 예: 런타임 시 SSM 파라미터 확인
<a name="toe-function-resolve-examples"></a>

다음 예제에서는 YAML 구성 요소 문서에서 `resolve` 함수를 사용하는 방법을 보여줍니다.

```
name: SsmParameterTest
description: This component verifies an SSM parameter variable reference with the echo command.
schemaVersion: 1.0

parameters:
  - parameter-name:
      type: string
      description: "test"

phases:
  - name: validate
    steps:
      - name: PrintDynamicVariable
        action: ExecuteBash
        inputs:
          commands:
            - echo "{{ aws:ssm:resolve(parameter-name) }}"
```