

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

# YAML 워크플로 문서 생성
<a name="image-workflow-create-document"></a>

YAML 형식 정의 문서는 이미지 빌드 프로세스의 빌드 및 테스트 단계에 대한 입력, 출력 및 워크플로 단계를 구성합니다. 표준화된 단계가 포함된 템플릿에서 시작하거나 처음부터 시작하여 고유한 워크플로를 정의할 수 있습니다. 템플릿을 사용하든 처음부터 시작하든 관계없이 필요에 따라 워크플로를 사용자 정의할 수 있습니다.

## YAML 워크플로 문서의 구조
<a name="workflow-document-structure"></a>

Image Builder가 이미지 빌드 및 테스트 작업에 사용하는 YAML 워크플로 문서는 다음과 같이 구성되어 있습니다.
+ [워크플로 문서 식별](#wfdoc-struct-ident)
+ [워크플로 문서 입력 파라미터](#wfdoc-struct-param)
+ [워크플로 문서 단계](#wfdoc-struct-step)
+ [워크플로 문서 출력](#wfdoc-struct-output)

### 워크플로 문서 식별
<a name="wfdoc-struct-ident"></a>

워크플로를 고유하게 식별합니다. 이 섹션에는 다음과 같은 속성이 포함될 수 있습니다.


|  필드  |  설명  |  형식  |  필수  | 
| --- | --- | --- | --- | 
|  이름  |  워크플로 문서의 이름입니다.  |  문자열  |  No  | 
|  설명  |  문서에 대한 설명입니다.  |  문자열  |  No  | 
|  schemaVersion  |  문서의 스키마 버전, 현재 1.0입니다.  |  문자열  |  예  | 

**예제**

```
---
name: sample-test-image
description: Workflow for a sample image, with extra configuration options exposed through workflow parameters.
schemaVersion: 1.0
```

### 워크플로 문서 입력 파라미터
<a name="wfdoc-struct-param"></a>

워크플로 문서의 이 부분에서는 호출자가 지정할 수 있는 입력 파라미터를 정의합니다. 파라미터가 없으면 이 섹션을 생략해도 됩니다. 파라미터를 지정하는 경우 각 파라미터에 다음 속성이 포함될 수 있습니다.


|  필드  |  설명  |  형식  |  필수  |  제약 조건  | 
| --- | --- | --- | --- | --- | 
|  이름  |  파라미터의 이름입니다.  |  문자열  |  예  |    | 
|  description  |  파라미터 설명입니다.  |  문자열  |  No  |    | 
|  기본값  |  값이 제공되지 않은 경우 파라미터의 값이 기본값으로 적용됩니다. 파라미터 정의에 기본값을 포함하지 않는 경우 런타임에 파라미터 값이 필요합니다.  |  파라미터 데이터 유형과 일치합니다.  |  아니요  |    | 
|  유형  |  파라미터의 데이터 유형입니다. 파라미터 정의에 데이터 유형을 포함하지 않는 경우 파라미터 유형의 기본값은 런타임에 필요한 문자열 값입니다.  |  문자열  |  예  |  파라미터의 데이터 유형이며 다음 중 하나여야 합니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/imagebuilder/latest/userguide/image-workflow-create-document.html)  | 

**예제**

워크플로 문서에 파라미터를 지정합니다.

```
parameters:
  - name: waitForActionAtEnd
    type: boolean
    default: true
    description: "Wait for an external action at the end of the workflow"
```

워크플로 문서의 파라미터 값을 사용합니다.

```
$.parameters.waitForActionAtEnd
```

### 워크플로 문서 단계
<a name="wfdoc-struct-step"></a>

워크플로에 대해 최대 15 단계의 작업을 지정합니다. 단계는 워크플로 문서에 정의된 순서대로 실행됩니다. 실패할 경우 롤백은 실패한 단계부터 시작하여 이전 단계를 거꾸로 진행하면서 역순으로 실행됩니다.

각 단계는 이전 단계 작업의 출력을 참조할 수 있습니다. 이를 체이닝 또는 참조라고합니다. JSONPath 선택기를 사용하여 이전 단계 작업의 결과를 참조할 수 있습니다. 예제:

```
$.stepOutputs.step-name.output-name
```

자세한 내용은 [워크플로 문서에 동적 변수 사용](wfdoc-dynamic-vars.md) 단원을 참조하십시오.

**참고**  
단계 자체에는 출력 속성이 없더라도 각 단계 작업의 모든 출력이 해당 단계의 `stepOutput`에 포함됩니다.

각 단계에 다음 속성이 포함될 수 있습니다.


|  필드  |  설명  |  형식  |  필수  |  기본값   |  제약 조건  | 
| --- | --- | --- | --- | --- | --- | 
|  작업  |  이 단계에서 수행하는 워크플로 작업입니다.  |  문자열  |  예  |    |  Image Builder 워크플로 문서에서 지원되는 단계의 작업이어야 합니다.  | 
|  `if`의 경우 `if` 연산자를 수정하는 일련의 조건문이 뒤따릅니다.  |  조건문은 워크플로 단계 본문에 제어 결정 지점의 흐름을 추가합니다.  |  Dict  |  아니요  |    |  Image Builder는 다음과 같은 조건문을 `if` 연산자의 수정자로 지원합니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/imagebuilder/latest/userguide/image-workflow-create-document.html)  | 
|  description  |  단계에 대한 설명입니다.  |  문자열  |  No  |    |  빈 문자열은 허용되지 않습니다. 포함할 경우 길이는 1\$11024자여야 합니다.  | 
|  입력  |  해당 단계의 작업을 실행하는 데 필요한 파라미터가 들어 있습니다. 키 값을 정적 값으로 지정하거나 올바른 데이터 유형으로 확인되는 JSONPath 변수를 사용하여 지정할 수 있습니다.  |  Dict  |  예  |    |    | 
|  이름  |  단계의 이름입니다. 이 이름은 워크플로 문서 내에서 고유해야 합니다.  |  문자열  |  예  |    |  길이는 3\$1128자여야 합니다. 영숫자 문자 및 `_`를 포함할 수 있습니다. 공백은 사용할 수 없습니다.  | 
|  onFailure  |  단계가 실패할 경우 수행할 작업을 다음과 같이 구성합니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/imagebuilder/latest/userguide/image-workflow-create-document.html)  |  문자열  |  No  |  `Abort`  |  `Abort` \$1 `Continue`  | 
|  rollbackEnabled  |  실패 발생 시 해당 단계를 롤백할지 여부를 구성합니다. 정적 부울 값 또는 부울 값으로 해석되는 동적 JSONPath 변수를 사용할 수 있습니다.  |  부울  |  아니요  |  `true`  |  `true` \$1 `false` true 또는 false로 확인되는 \$1 또는 JSONPath 변수입니다. | 
|  timeoutSeconds  |  재시도가 적용되는 경우 실패 및 재시도까지 단계가 실행되는 최대 시간(초)입니다.  |  Integer  |  아니요  |  해당하는 경우 단계 작업에 정의된 기본값에 따라 달라집니다.  |  단계 작업의 최대 제한 시간을 초과할 수 없습니다.  | 
|  waitSeconds  |  단계 실행이 일시 중지되는 초 단위 시간입니다.  |  Integer  |  아니요  |  0  |  단계 작업의 timeoutSeconds보다 클 수 없습니다.  | 

**예제**

```
steps:
  - name: LaunchTestInstance
    action: LaunchInstance
    onFailure: Abort
    inputs:
      waitFor: "ssmAgent"

  - name: ApplyTestComponents
    action: ExecuteComponents
    onFailure: Abort
    inputs:
      instanceId.$: "$.stepOutputs.LaunchTestInstance.instanceId"

  - name: TerminateTestInstance
    action: TerminateInstance
    onFailure: Continue
    inputs:
      instanceId.$: "$.stepOutputs.LaunchTestInstance.instanceId"

  - name: WaitForActionAtEnd
    action: WaitForAction
    if:
      booleanEquals: true
      value: "$.parameters.waitForActionAtEnd"
```

### 워크플로 문서 출력
<a name="wfdoc-struct-output"></a>

워크플로의 출력을 정의합니다. 각 출력은 출력의 이름과 값을 지정하는 키 값 페어입니다. 출력을 사용하여 런타임 시 후속 워크플로에서 사용할 수 있는 데이터를 내보낼 수 있습니다. 이 섹션은 선택 사항입니다.

정의하는 각 출력에는 다음 속성이 포함됩니다.


|  필드  |  설명  |  형식  |  필수  | 
| --- | --- | --- | --- | 
|  이름  |  출력의 이름입니다. 이 이름은 파이프라인에서 포함하는 워크플로에서 고유해야 합니다.  |  문자열  |  예  | 
|  값  |  출력의 값입니다. 문자열 값은 동적 변수(예: 단계 작업의 출력 파일)일 수도 있습니다. 자세한 내용은 [워크플로 문서에 동적 변수 사용](wfdoc-dynamic-vars.md) 단원을 참조하십시오.  |  문자열  |  예  | 

**예제**

`createProdImage` 단계의 단계 출력을 사용하여 워크플로 문서의 출력 이미지 ID를 생성합니다.

```
outputs:
  - name: 'outputImageId'
    value: '$.stepOutputs.createProdImage.imageId'
```

다음 워크플로의 워크플로 출력을 참조하세요.

```
$.workflowOutputs.outputImageId
```

# 워크플로 문서에 지원되는 단계 작업
<a name="wfdoc-step-actions"></a>

이 섹션에는 Image Builder에서 지원하는 단계 작업에 대한 세부 정보가 포함되어 있습니다.이 섹션에서 사용되는 용어

AMI  
Amazon Machine Image

ARN  
Amazon 리소스 이름

**Topics**
+ [ApplyImageConfigurations](#wfdoc-step-action-apply-image-configurations)
+ [BootstrapInstanceForContainer](#wfdoc-step-action-bootstrap-container)
+ [CollectImageMetadata](#wfdoc-step-action-collect-image-metadata)
+ [CollectImageScanFindings](#wfdoc-step-action-collect-findings)
+ [CreateImage](#wfdoc-step-action-create-img-from-inst)
+ [DistributeImage](#wfdoc-step-action-distribute-image)
+ [ExecuteComponents](#wfdoc-step-action-exec-components)
+ [ExecuteStateMachine](#wfdoc-step-action-exec-state-machine)
+ [LaunchInstance](#wfdoc-step-action-launch-instance)
+ [ModifyImageAttributes](#wfdoc-step-action-modify-image-attributes)
+ [RegisterImage](#wfdoc-step-action-register-image)
+ [RunCommand](#wfdoc-step-action-run-command)
+ [RunSysPrep](#wfdoc-step-action-run-sysprep)
+ [SanitizeInstance](#wfdoc-step-action-sanitize-instance)
+ [TerminateInstance](#wfdoc-step-action-terminate-instance)
+ [WaitForAction](#wfdoc-step-action-waitfor)
+ [WaitForSSMAgent](#wfdoc-step-action-wait-for-ssm-agent)

## ApplyImageConfigurations
<a name="wfdoc-step-action-apply-image-configurations"></a>

이 단계 작업은 라이선스 구성, 시작 템플릿 구성, S3 내보내기 구성, EC2 Fast Launch 구성 및 Systems Manager 파라미터 구성과 같은 다양한 구성 및 통합을 분산 AMIs에 적용합니다. 구성은 소스 계정의 분산 이미지에만 적용됩니다. 단, 교차 계정을 적용할 수 있는 SSM 파라미터 구성은 예외입니다.

**기본 제한 시간: **360분

**최대 제한 시간: **720분

**롤백:** 이 단계 작업에는 롤백이 없습니다.

**입력:** 다음 표에는 이 단계 작업에 지원되는 입력이 포함되어 있습니다.


| 입력 이름 | 설명 | 형식 | 필수 | 기본값 | 제약 조건 | 
| --- | --- | --- | --- | --- | --- | 
| 리전 | 이미지 리전입니다. | 문자열 | 예 |  |  | 
| licenseConfigurationArns | 이미지의 라이선스 구성 ARN입니다. | 배열 | 아니요 |  |  | 
| launchTemplateConfigurations |  | 배열 | 아니요 |  |  | 
| launchTemplateConfigurations:launchTemplateId | 이미지에 적용할 시작 템플릿 ID입니다. | 문자열 | launchTemplateConfigurations가 지정된 경우 예 |  |  | 
| launchTemplateConfigurations:accountId | 이미지에 적용할 시작 템플릿 계정 IDs. | 문자열 | No |  |  | 
| launchTemplateConfigurations:setDefaultVersion | 이미지에 대한 시작 템플릿 기본 버전 설정입니다. | 부울 | 아니요 |  |  | 
| s3ExportConfiguration |  | 배열 | 아니요 |  |  | 
| s3ExportConfiguration:roleName | 이미지의 S3 내보내기 구성 역할 이름입니다. | 문자열 | s3ExportConfiguration가 지정된 경우 예 |  |  | 
| s3ExportConfiguration:diskImageFormat | 이미지의 S3 내보내기 구성 디스크 이미지 형식입니다. | 문자열 | s3ExportConfiguration가 지정된 경우 예 |  | 허용되는 값 - VMDK\$1RAW\$1VHD | 
| s3ExportConfiguration:s3Bucket | 이미지의 S3 내보내기 구성 버킷 이름입니다. | 문자열 | s3ExportConfiguration가 지정된 경우 예 |  |  | 
| s3ExportConfiguration:s3Prefix | 이미지의 S3 내보내기 구성 버킷 접두사입니다. | 문자열 | No |  |  | 
| fastLaunchConfigurations | 이미지에 대한 EC2 Fast Launch 구성입니다. | 배열 | 아니요 |  |  | 
| fastLaunchConfigurations:enabled |  이미지에 대해 EC2 Fast Launch가 활성화/비활성화되었습니다. | 부울 | fastLaunchConfigurations가 지정된 경우 예 |  |  | 
| fastLaunchConfigurations:snapshotConfiguration |  이미지에 대해 EC2 Fast Launch가 활성화/비활성화되었습니다. | 맵 | 아니요 |  |  | 
| fastLaunchConfigurations:snapshotConfiguration:targetResourceCount | 이미지에 대한 EC2 Fast Launch 대상 리소스 수입니다. | Integer | 아니요 |  |  | 
| fastLaunchConfigurations:maxParallelLaunches | 이미지에 대한 EC2 Fast Launch 최대 병렬 시작입니다. | Integer | 아니요 |  |  | 
| fastLaunchConfigurations:launchTemplate |  |  | 아니요 |  |  | 
| fastLaunchConfigurations:launchTemplate:launchTemplateId | 이미지의 EC2 Fast Launch 시작 템플릿 ID입니다. | 문자열 | No |  |  | 
| fastLaunchConfigurations:launchTemplate:launchTemplateName | 이미지의 EC2 Fast Launch 시작 템플릿 이름입니다. | 문자열 | No |  |  | 
| fastLaunchConfigurations:launchTemplate:launchTemplateVersion | 이미지에 대한 EC2 Fast Launch 시작 템플릿 버전입니다. | 문자열 | No |  |  | 
| ssmParameterConfigurations | 이미지에 대한 SSM 파라미터 구성입니다. | 맵 | 아니요 |  |  | 
| ssmParameterConfigurations:amiAccountId | 이미지의 SSM 파라미터 AMI 계정 ID입니다. | 문자열 | No |  |  | 
| ssmParameterConfigurations:parameterName | 이미지의 SSM 파라미터 이름입니다. | 문자열 | ssmParameterConfigurations가 지정된 경우 예 |  |  | 
| ssmParameterConfigurations:dataType | 이미지의 SSM 파라미터 데이터 유형입니다. | 문자열 | No |  | 허용된 값 - text\$1aws:ec2:image) | 

**출력:** 다음 표에는 이 단계 작업의 출력이 포함되어 있습니다.


| 출력 이름 | 설명 | 형식 | 
| --- | --- | --- | 
| configuredImages | 구성된 이미지 목록입니다. | 배열 | 
| configuredImages:accountId | 분산 이미지의 대상 계정 ID입니다. | 문자열 | 
| configuredImages:name | AMI의 이름입니다. | 문자열 | 
| configuredImages:amiId | 분산 이미지의 AMI ID입니다. | 문자열 | 
| configuredImages:dateStarted | 배포가 시작된 UTC 시간입니다. | 문자열 | 
| configuredImages:dateStopped | 배포가 완료된 UTC 시간입니다. | 문자열 | 
| configuredImages:step | 배포가 중지된 단계입니다. | 완료됨\$1AssociateLicensesRunning\$1UpdateLaunchTemplateRunning\$1PutSsmParametersRunning\$1UpdateFastLaunchConfiguration\$1ExportAmiQueued\$1ExportAmiRunning | 
| configuredImages:region | 분산 이미지의 톤 AWS  | 문자열 | 
| configuredImages:status | 배포 상태입니다. | 완료됨\$1실패함\$1취소됨\$1TimedOut | 
| configuredImages:errorMessage  | 오류 메시지가 있는 경우 | 문자열 | 

**예제**

워크플로 문서에 단계 작업을 지정합니다.

```
- name: ApplyImageConfigurations
  action: ApplyImageConfigurations
  onFailure: Abort
  inputs:
    distributedImages.$: $.stepOutputs.DistributeImageStep.distributedImages
```

워크플로 문서에 있는 단계 작업 값의 출력을 사용합니다.

```
$.stepOutputs.ApplyImageConfigurationsStep.configuredImages
```

## BootstrapInstanceForContainer
<a name="wfdoc-step-action-bootstrap-container"></a>

이 단계 작업은 서비스 스크립트를 실행하여 컨테이너 워크플로를 실행하기 위한 최소 요구 사항으로 인스턴스를 부트스트랩합니다. Image Builder는 Systems Manager API의 **sendCommand**를 사용하여 이 스크립트를 실행합니다. 자세한 내용은 [AWS Systems Manager Run Command](https://docs.aws.amazon.com/systems-manager/latest/userguide/execute-remote-commands.html)를 참조하세요.

**참고**  
부트스트랩 스크립트는 Image Builder가 Docker 컨테이너를 성공적으로 빌드하기 위한 사전 조건인 AWS CLI 및 Docker 패키지를 설치합니다. 이 단계 작업을 포함하지 않으면 이미지 빌드가 실패할 수 있습니다.

**기본 제한 시간:** 60분

**최대 제한 시간: **720분

**롤백:** 이 단계 작업에는 롤백이 없습니다.

**입력:** 다음 표에는 이 단계 작업에 지원되는 입력이 포함되어 있습니다.


| 입력 이름 | 설명 | 형식 | 필수 | 기본값 | 제약 조건 | 
| --- | --- | --- | --- | --- | --- | 
| instanceId | 부트스트랩할 인스턴스의 ID입니다. | 문자열 | 예 |  | 이 워크플로의 인스턴스를 시작한 워크플로 단계의 출력 인스턴스 ID여야 합니다. | 

**출력:** 다음 표에는 이 단계 작업의 출력이 포함되어 있습니다.


| 출력 이름 | 설명 | 형식 | 
| --- | --- | --- | 
| runCommandId | 인스턴스에서 부트스트랩 스크립트를 실행한 Systems Manager sendCommand의 ID입니다. | 문자열 | 
| status | Systems Manager sendCommand에서 반환된 상태입니다. | 문자열 | 
| output | Systems Manager sendCommand에서 반환된 출력입니다. | 문자열 | 

**예제**

워크플로 문서에 단계 작업을 지정합니다.

```
- name: ContainerBootstrapStep
  action: BootstrapInstanceForContainer
  onFailure: Abort
  inputs:
      instanceId.$: $.stepOutputs.LaunchStep.instanceId
```

워크플로 문서에 있는 단계 작업 값의 출력을 사용합니다.

```
$.stepOutputs.ContainerBootstrapStep.status
```

## CollectImageMetadata
<a name="wfdoc-step-action-collect-image-metadata"></a>

이 단계 작업은 빌드 워크플로에만 유효합니다.

EC2 Image Builder는 시작한 EC2 인스턴스에서 [AWS Systems Manager (Systems Manager) Agent](https://docs.aws.amazon.com/systems-manager/latest/userguide/ssm-agent.html)를 실행하여 이미지를 빌드 및 테스트합니다. Image Builder는 [Systems Manager Inventory](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-inventory.html)를 사용하여 빌드 단계에서 사용된 인스턴스에 대한 추가 정보를 수집합니다. 이 정보에는 운영 체제(OS)이름 및 버전 뿐만 아니라 운영 체제에서 보고한 패키지 및 해당 버전 목록이 포함됩니다.

**참고**  
이 단계 작업은 AMI를 생성하는 이미지에만 적용됩니다.

**기본 제한 시간:** 30분

**최대 제한 시간: **720분

**롤백:** Image Builder는 이 단계에서 생성된 모든 Systems Manager 리소스를 롤백합니다.

**입력:** 다음 표에는 이 단계 작업에 지원되는 입력이 포함되어 있습니다.


| 입력 이름 | 설명 | 형식 | 필수 | 기본값 | 제약 조건 | 
| --- | --- | --- | --- | --- | --- | 
| instanceId | 메타데이터 설정을 적용할 빌드 인스턴스입니다. | 문자열 | 예 |  | 이 워크플로의 빌드 인스턴스를 시작한 워크플로 단계의 출력 인스턴스 ID여야 합니다. | 

**출력:** 다음 표에는 이 단계 작업의 출력이 포함되어 있습니다.


| 출력 이름 | 설명 | 형식 | 
| --- | --- | --- | 
| osVersion | 빌드 인스턴스에서 수집된 운영 체제의 이름과 버전입니다. | 문자열 | 
| associationId | 인벤토리 수집에 사용하는 Systems Manager 연결 ID입니다. | 문자열 | 

**예제**

워크플로 문서에 단계 작업을 지정합니다.

```
- name: CollectMetadataStep
  action: CollectImageMetadata
  onFailure: Abort
  inputs:
      instanceId: $.stepOutputs.LaunchStep.instanceId
```

워크플로 문서의 단계 작업 출력을 사용합니다.

```
$.stepOutputs.CollectMetadataStep.osVersion
```

## CollectImageScanFindings
<a name="wfdoc-step-action-collect-findings"></a>

계정에서 Amazon Inspector를 활성화하고 파이프라인에서 이미지 스캔을 활성화한 경우, 이 단계 작업은 테스트 인스턴스에 대해 Amazon Inspector에서 보고한 이미지 스캔 결과를 수집합니다. 빌드 워크플로에는 이 단계 작업을 사용할 수 없습니다.

**기본 제한 시간:** 120분

**최대 제한 시간: **720분

**롤백:** 이 단계 작업에는 롤백이 없습니다.

**입력:** 다음 표에는 이 단계 작업에 지원되는 입력이 포함되어 있습니다.


| 입력 이름 | 설명 | 형식 | 필수 | 기본값 | 제약 조건 | 
| --- | --- | --- | --- | --- | --- | 
| instanceId | 스캔을 실행한 인스턴스의 ID입니다. | 문자열 | 예 |  | 이 워크플로의 인스턴스를 시작한 워크플로 단계의 출력 인스턴스 ID여야 합니다. | 

**출력:** 다음 표에는 이 단계 작업의 출력이 포함되어 있습니다.


| 출력 이름 | 설명 | 형식 | 
| --- | --- | --- | 
| runCommandId | 검색 결과를 수집하기 위해 스크립트를 실행한 Systems Manager sendCommand의 ID입니다. | 문자열 | 
| status | Systems Manager sendCommand에서 반환된 상태입니다. | 문자열 | 
| output | Systems Manager sendCommand에서 반환된 출력입니다. | 문자열 | 

**예제**

워크플로 문서에 단계 작업을 지정합니다.

```
- name: CollectFindingsStep
  action: CollectImageScanFindings
  onFailure: Abort
  inputs:
      instanceId.$: $.stepOutputs.LaunchStep.instanceId
```

워크플로 문서에 있는 단계 작업 값의 출력을 사용합니다.

```
$.stepOutputs.CollectFindingsStep.status
```

## CreateImage
<a name="wfdoc-step-action-create-img-from-inst"></a>

이 단계 작업은 Amazon EC2 `CreateImage` API를 이용하여 실행 중인 인스턴스에서 이미지를 생성합니다. 생성 프로세스 중에 단계 작업은 리소스가 올바른 상태에 도달했는지 확인하기 위해 필요한 만큼 대기한 후 작업을 계속합니다.

**기본 제한 시간:** 720분

**최대 제한 시간: **3일

**롤백:** 이 단계 작업에는 롤백이 없습니다.

**입력:** 다음 표에는 이 단계 작업에 지원되는 입력이 포함되어 있습니다.


| 입력 이름 | 설명 | 형식 | 필수 | 기본값 | 제약 조건 | 
| --- | --- | --- | --- | --- | --- | 
| instanceId | 새 이미지를 만들 때 사용할 인스턴스입니다. | 문자열 | 예 |  | 제공된 인스턴스 ID의 인스턴스는 이 단계가 시작될 때 running 상태여야 합니다. | 

**출력:** 다음 표에는 이 단계 작업의 출력이 포함되어 있습니다.


| 출력 이름 | 설명 | 형식 | 
| --- | --- | --- | 
| imageId | 생성한 이미지의 AMI ID입니다. | 문자열 | 

**예제**

워크플로 문서에 단계 작업을 지정합니다.

```
- name: CreateImageFromInstance
  action: CreateImage
  onFailure: Abort
  inputs:
      instanceId.$: "i-1234567890abcdef0"
```

워크플로 문서에 있는 단계 작업 값의 출력을 사용합니다.

```
$.stepOutputs.CreateImageFromInstance.imageId
```

## DistributeImage
<a name="wfdoc-step-action-distribute-image"></a>

이 단계 작업은 AMI를 지정된 리전 및 계정에 배포합니다. CreateImage 또는 CreateImagePipeline APIs에 대한 요청 또는 워크플로에 제공된 사용자 지정 배포 설정에 제공된 배포 구성을 기반으로 대상 리전 및 계정에 AMI의 복사본을 생성하여 배포 구성의 설정을 재정의합니다.

**기본 제한 시간: **360분

**최대 제한 시간: **720분

**롤백:** 이 단계 작업에는 롤백이 없습니다.

**입력:** 다음 표에는 이 단계 작업에 지원되는 입력이 포함되어 있습니다.


| 입력 이름 | 설명 | 형식 | 필수 | 기본값 | 제약 조건 | 
| --- | --- | --- | --- | --- | --- | 
| 리전 | 이미지를 배포할 리전 목록입니다. | 문자열 | 예 |  | 최소 길이는 1이고, 최대 길이 1024. | 
| 이름 | 배포 구성의 이름입니다. | 문자열 | No |  |  | 
| 설명 | 배포 구성의 배포입니다. | 문자열 | No |  |  | 
| targetAccountIds | 이미지를 배포할 계정 IDs. | 배열 | 아니요 |  |  | 
| amiTags | 배포 구성의 태그입니다. | 맵 | 아니요 |  |  | 
| kmsKeyId | 분산 이미지에 적용할 KMS 키입니다. | 문자열 | No |  |  | 

**출력:** 다음 표에는 이 단계 작업의 출력이 포함되어 있습니다.


| 출력 이름 | 설명 | 형식 | 
| --- | --- | --- | 
| distributedImages | 분산 이미지 목록 | 배열 | 
| distributedImages:region | 분산 이미지의 Tne AWS 리전입니다. | 문자열 | 
| distributedImages:name | AMI의 이름입니다. | 문자열 | 
| distributedImages:amiId | 분산 이미지의 AMI ID입니다. | 문자열 | 
| distributedImages:accountId | 분산 이미지의 대상 계정 ID입니다. | 문자열 | 
| distributedImages:dateStarted | 배포가 시작된 UTC 시간입니다. | 문자열 | 
| distributedImages:dateStopped | 배포가 완료된 UTC 시간입니다. | 문자열 | 
| distributedImages:status | 배포 상태입니다. | 완료됨\$1실패함\$1취소됨\$1TimedOut | 
| distributedImages:step | 배포가 중지된 단계입니다. | 완료됨\$1CopyAmiRunning | 
| distributedImages:errorMessage  | 오류 메시지가 있는 경우 | 문자열 | 

**예제**

워크플로 문서에 단계 작업을 지정합니다.

```
- name: DistributeImage
  action: DistributeImage
  onFailure: Abort
  inputs:
    distributions:
      - region.$: "$.parameters.SourceRegion"
        description: "AMI distribution to source region"
        amiTags:
          DistributionTest: "SourceRegion"
          WorkflowStep: "DistributeToSourceRegion"
          BuildDate: "{{imagebuilder:buildDate:yyyyMMHHss}}"
          BuildVersion: "{{imagebuilder:buildVersion}}"
```

워크플로 문서에 있는 단계 작업 값의 출력을 사용합니다.

```
$.stepOutputs.DistributeImageStep.distributedImages
```

## ExecuteComponents
<a name="wfdoc-step-action-exec-components"></a>

이 단계 동작은 빌드 중인 현재 이미지의 레시피에 지정된 구성 요소를 실행합니다. 빌드 워크플로는 빌드 인스턴스에서 빌드 구성 요소를 실행합니다. 테스트 워크플로는 테스트 인스턴스에서만 테스트 구성 요소를 실행합니다.

Image Builder는 Systems Manager API의 **sendCommand**를 사용하여 구성 요소를 실행합니다. 자세한 내용은 [AWS Systems Manager Run Command](https://docs.aws.amazon.com/systems-manager/latest/userguide/execute-remote-commands.html)를 참조하세요.

**기본 제한 시간:** 720분

**최대 제한 시간: **1일

**롤백:** 이 단계 작업에는 롤백이 없습니다.

**입력:** 다음 표에는 이 단계 작업에 지원되는 입력이 포함되어 있습니다.


| 입력 이름 | 설명 | 형식 | 필수 | 기본값 | 제약 조건 | 
| --- | --- | --- | --- | --- | --- | 
| instanceId | 구성 요소를 실행해야 하는 인스턴스의 ID입니다. | 문자열 | 예 |  | 이 워크플로의 인스턴스를 시작한 워크플로 단계의 출력 인스턴스 ID여야 합니다. | 

**출력:** 다음 표에는 이 단계 작업의 출력이 포함되어 있습니다.


| 출력 이름 | 설명 | 형식 | 
| --- | --- | --- | 
| runCommandId | 인스턴스에서 구성 요소를 실행한 Systems Manager sendCommand의 ID입니다. | 문자열 | 
| status | Systems Manager sendCommand에서 반환된 상태입니다. | 문자열 | 
| output | Systems Manager sendCommand에서 반환된 출력입니다. | 문자열 | 

**예제**

워크플로 문서에 단계 작업을 지정합니다.

```
- name: ExecComponentsStep
  action: ExecuteComponents
  onFailure: Abort
  inputs:
      instanceId: $.stepOutputs.LaunchStep.instanceId
```

워크플로 문서의 단계 작업 출력을 사용합니다.

```
$.stepOutputs.ExecComponentsStep.status
```

## ExecuteStateMachine
<a name="wfdoc-step-action-exec-state-machine"></a>

이 단계 작업은 Image Builder 워크플로에서 AWS Step Functions 상태 시스템 실행을 시작합니다. Image Builder는 Step Functions `StartExecution` API를 사용하여 상태 시스템을 시작하고 완료될 때까지 기다립니다. 이는 복잡한 워크플로, 규정 준수 검증 또는 인증 프로세스를 이미지 빌드 파이프라인에 통합하는 데 유용합니다.

자세한 내용은 *AWS Step Functions 개발자 안내서*의 [Step Functions의 상태 시스템에 대해 알아보기](https://docs.aws.amazon.com/step-functions/latest/dg/concepts-statemachines.html)를 참조하세요.

**기본 제한 시간: **6시간

**최대 제한 시간: **24시간

**롤백:** 이 단계 작업에는 롤백이 없습니다.

**입력:** 다음 표에는 이 단계 작업에 지원되는 입력이 포함되어 있습니다.


| 입력 이름 | 설명 | 형식 | 필수 | 기본값 | 제약 조건 | 
| --- | --- | --- | --- | --- | --- | 
| stateMachineArn | 실행할 Step Functions 상태 시스템의 ARN입니다. | 문자열 | 예 |  | 유효한 상태 시스템 ARN이어야 합니다. | 
| 입력 | 상태 시스템에 제공할 JSON 입력 데이터입니다. | 문자열 | No | \$1\$1 | 유효한 JSON 문자열이어야 하며 최대 길이는 16KiB입니다. | 

**출력:** 다음 표에는 이 단계 작업의 출력이 포함되어 있습니다.


| 출력 이름 | 설명 | 형식 | 
| --- | --- | --- | 
| executionArn | 상태 시스템 실행의 ARN입니다. | 문자열 | 
| output | 상태 시스템 실행의 출력입니다. | 문자열 | 

**IAM 권한 필요**

이 단계 작업을 사용하려면 사용자 지정 실행 역할에 다음 권한이 있어야 합니다.

**작업 허용**
+ `states:StartExecution`
+ `states:DescribeExecution`

**리소스 지정**
+ `arn:aws:states:us-west-2:111122223333:stateMachine:state-machine-name`
+ `arn:aws:states:us-west-2:111122223333:execution:state-machine-name:*`

**예제**

워크플로 문서에 단계 작업을 지정합니다.

```
- name: ValidateImageCompliance
  action: ExecuteStateMachine
  timeoutSeconds: 3600
  onFailure: Abort
  inputs:
    stateMachineArn: arn:aws:states:us-west-2:111122223333:stateMachine:ImageComplianceValidation
    input: |
      {
        "imageId": "{{ $.stepOutputs.CreateImageFromInstance.imageId }}",
        "region": "us-west-2",
        "complianceLevel": "high",
        "requiredScans": ["cve", "benchmark", "configuration"]
      }
```

워크플로 문서에 있는 단계 작업 값의 출력을 사용합니다.

```
$.stepOutputs.ValidateImageCompliance.executionArn
```

## LaunchInstance
<a name="wfdoc-step-action-launch-instance"></a>

이 단계 작업은에서 인스턴스를 시작하고 다음 단계로 넘어가기 전에 Systems Manager 에이전트가 인스턴스에서 실행될 때까지 AWS 계정 기다립니다. 시작 작업에는 레시피의 설정과 이미지와 관련된 인프라 구성 리소스가 사용됩니다. 예를 들어, 시작할 인스턴스 유형은 인프라 구성에서 가져옵니다. 출력은 시작한 인스턴스의 인스턴스 ID입니다.

`waitFor` 입력은 단계 완료 요구 사항을 충족하는 조건을 구성합니다.

**기본 제한 시간: **75분

**최대 제한 시간: **720분

**롤백:** 빌드 인스턴스의 경우 롤백은 인프라 구성 리소스에서 구성한 작업을 수행합니다. 기본적으로 이미지 생성에 실패하면 빌드 인스턴스가 종료됩니다. 하지만 인프라 구성에는 문제 해결을 위해 빌드 인스턴스를 유지하는 설정이 있습니다.

**입력:** 다음 표에는 이 단계 작업에 지원되는 입력이 포함되어 있습니다.


| 입력 이름 | 설명 | 형식 | 필수 | 기본값 | 제약 조건 | 
| --- | --- | --- | --- | --- | --- | 
| imageIdOverride | 인스턴스를 시작하는 데 사용할 이미지 | 문자열 | No |  빌드 단계: 이미지 레시피 기본 이미지 테스트 단계: 빌드 단계에서 AMI 출력  | 유효한 AMI ID여야 합니다. | 
| instanceTypesOverride | Image Builder는 성공적으로 시작되는 인스턴스 유형을 찾을 때까지 목록의 각 인스턴스 유형을 시도합니다. | 문자열 목록 | 아니요 | 인프라 구성에 지정된 인스턴스 유형 | 유효한 인스턴스 유형이어야 합니다. | 
| waitFor | 워크플로 단계를 완료하고 다음 단계로 넘어가기 전에 기다려야 하는 조건입니다. | 문자열 | 예 |  | Image Builder는 ssmAgent(을)를 지원합니다. | 

**출력:** 다음 표에는 이 단계 작업의 출력이 포함되어 있습니다.


| 출력 이름 | 설명 | 형식 | 
| --- | --- | --- | 
| instanceId | 시작한 인스턴스의 인스턴스 ID입니다. | 문자열 | 

**예제**

워크플로 문서에 단계 작업을 지정합니다.

```
- name: LaunchStep
  action: LaunchInstance
  onFailure: Abort
  inputs:
    waitFor: ssmAgent
```

워크플로 문서의 단계 작업 출력을 사용합니다.

```
$.stepOutputs.LaunchStep.instanceId
```

## ModifyImageAttributes
<a name="wfdoc-step-action-modify-image-attributes"></a>

이 단계 작업은 시작 권한 및 기타 AMIs 속성과 같은 분산 AMI의 속성을 수정합니다. 대상 리전 및 계정에 배포된 AMIs에서 작동합니다.

**기본 제한 시간:** 120분

**최대 제한 시간: **180분

**롤백:** 이 단계 작업에는 롤백이 없습니다.

**입력:** 다음 표에는 이 단계 작업에 지원되는 입력이 포함되어 있습니다.


| 입력 이름 | 설명 | 형식 | 필수 | 기본값 | 제약 조건 | 
| --- | --- | --- | --- | --- | --- | 
| 리전 | 이미지의 리전입니다. | 문자열 | 예 |  |  | 
| launchPermission |  |  | 아니요 |  |  | 
| launchPermission:userIds | 이미지의 시작 권한에서 수정할 사용자 IDs입니다. | 문자열 | No |  |  | 
| launchPermission:userGroups | 이미지에 대한 시작 권한에서 수정할 사용자 그룹입니다. | 문자열 | No |  |  | 
| launchPermission:organizationArns | 이미지에 대한 시작 권한에서 수정할 AWS 조직 ARNs입니다. | 문자열 | No |  |  | 
| launchPermission:organizationalUnitArns | 이미지에 대한 시작 권한에서 수정할 AWS 조직 단위 ARNs입니다. | 문자열 | No |  |  | 

**출력:** 다음 표에는 이 단계 작업의 출력이 포함되어 있습니다.


| 출력 이름 | 설명 | 형식 | 
| --- | --- | --- | 
| modifiedImages | 수정된 이미지 목록 | 배열 | 
| modifiedImages:accountId | 분산 이미지의 대상 계정 ID입니다. | 문자열 | 
| modifiedImages:name | AMI의 이름입니다. | 문자열 | 
| modifiedImages:amiId | 분산 이미지의 AMI ID입니다. | 문자열 | 
| modifiedImages:dateStarted | 배포가 시작된 UTC 시간입니다. | 문자열 | 
| modifiedImages:dateStopped | 배포가 완료된 UTC 시간입니다. | 문자열 | 
| modifiedImages:step | 배포가 중지된 단계입니다. | 완료됨\$1ModifyAmiRunning | 
| modifiedImages:리전 | 이미지의 Tne AWS 리전입니다. | 문자열 | 
| modifiedImages:status | 배포 상태입니다. | 완료됨\$1실패함\$1취소됨\$1TimedOut | 
| modifiedImages:errorMessage  | 오류 메시지가 있는 경우 | 문자열 | 

**예제**

워크플로 문서에 단계 작업을 지정합니다.

```
- name: ModifyImageAttributes
  action: ModifyImageAttributes
  onFailure: Abort
  inputs:
    distributedImages.$: $.stepOutputs.DistributeImageStep.distributedImages
```

워크플로 문서에 있는 단계 작업 값의 출력을 사용합니다.

```
$.stepOutputs.ModifyImageAttributesStep.modifiedImages
```

## RegisterImage
<a name="wfdoc-step-action-register-image"></a>

이 단계 작업은 Amazon EC2 RegisterImage API를 사용하여 새 Amazon Machine Image(AMI)를 등록합니다. RegisterImage 이를 통해 기존 스냅샷 또는 스냅샷 세트에서 AMI를 생성하여 다양한 이미지 속성을 지정할 수 있습니다.

**기본 제한 시간: **540분

**최대 제한 시간: **720분

**롤백:** 이 단계 작업에는 롤백이 없습니다.

**입력:** 다음 표에는 이 단계 작업에 지원되는 입력이 포함되어 있습니다.


| 입력 이름 | 설명 | 형식 | 필수 | 기본값 | 제약 조건 | 
| --- | --- | --- | --- | --- | --- | 
| 구조 | AMI의 아키텍처입니다. | 문자열 | No |  | 유효한 값: i386, x86\$164, arm64, x86\$164\$1mac, arm64\$1mac | 
| blockDeviceMapping | AMI에 대한 블록 디바이스 매핑 항목입니다. | 배열 | 아니요 |  |  | 
| bootMode | AMI의 부팅 모드입니다. | 문자열 | No |  | 유효한 값: legacy-bios, uefi, uefi-preferred | 
| description | AMI에 대한 설명입니다. | 문자열 | No |  |  | 
| enaSupport | ENA를 사용한 향상된 네트워킹이 활성화되었는지 여부입니다. | 부울 | 아니요 |  |  | 
| imageLocation | AMI 매니페스트의 위치입니다. | 문자열 | No |  | S3-backed AMIs에 필요 | 
| imdsSupport | IMDSv2 지원 수준입니다. | 문자열 | No |  | 유효한 값: v2.0 | 
| includeSnapshotTags | 블록 디바이스 매핑에 정의된 첫 번째 스냅샷의 태그를 포함할지 여부입니다. | 부울 | 아니요 | FALSE |  true로 설정하면 태그가 다음과 같이 포함됩니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/imagebuilder/latest/userguide/wfdoc-step-actions.html)  | 
| kernelId | 사용할 커널의 ID입니다. | 문자열 | No |  |  | 
| ramdiskId | 사용할 RAM 디스크의 ID입니다. | 문자열 | No |  |  | 
| rootDeviceName | 루트 디바이스의 디바이스 이름입니다. | 문자열 | No |  | 예: /dev/sda1 | 
| sriovNetSupport | Intel 82599 VF 인터페이스를 사용하여 네트워킹을 개선했습니다. | 문자열 | No |  |  | 
| tpmSupport | TPM 버전 지원. | 문자열 | No |  | 유효한 값: v2.0 | 
| uefiData | Base64-encoded UEFI 데이터입니다. | 문자열 | No |  |  | 
| virtualizationType | 가상화 유형입니다. | 문자열 | No |  | 유효한 값: hvm, 반가상화 | 

**출력:** 다음 표에는 이 단계 작업의 출력이 포함되어 있습니다.


| 출력 이름 | 설명 | 형식 | 
| --- | --- | --- | 
| imageId | 등록된 이미지의 AMI ID입니다. | 문자열 | 

**IAM 권한 필요**

이 단계 작업을 사용하려면 사용자 지정 실행 역할에 다음 권한이 있어야 합니다.

**작업 허용**
+ `ec2:DescribeSnapshots`
+ `ec2:CreateTags`

**예제**

워크플로 문서에 단계 작업을 지정합니다.

```
- name: RegisterNewImage
  action: RegisterImage
  onFailure: Abort
  inputs:
    architecture: "x86_64"
    bootMode: "uefi"
    blockDeviceMapping:
      - DeviceName: "/dev/sda1"
        Ebs:
          SnapshotId: "snap-1234567890abcdef0"
          VolumeSize: 100
          VolumeType: "gp3"
    rootDeviceName: "/dev/sda1"
    virtualizationType: "hvm"
```

워크플로 문서에 있는 단계 작업 값의 출력을 사용합니다.

```
$.stepOutputs.RegisterNewImage.imageId
```

**다른 단계의 SnapshotId와 생성된 AMI에 포함된 스냅샷 태그가 있는 예제**

```
- name: CreateSnapshot
  action: RunCommand
  onFailure: Abort
  inputs:
    instanceId: "i-1234567890abcdef0"
    documentName: "AWS-RunShellScript"
    parameters:
      commands:
        - "aws ec2 create-snapshot --volume-id vol-1234567890abcdef0 --description 'Snapshot for AMI' --query 'SnapshotId' --output text"

- name: RegisterImageFromSnapshot
  action: RegisterImage
  onFailure: Abort
  inputs:
    architecture: "x86_64"
    bootMode: "uefi"
    blockDeviceMapping:
      - DeviceName: "/dev/sda1"
        Ebs:
          SnapshotId.$: "$.stepOutputs.CreateSnapshot.output[0]"
          VolumeSize: 100
          VolumeType: "gp3"
    includeSnapshotTags: true
    rootDeviceName: "/dev/sda1"
    virtualizationType: "hvm"
```

## RunCommand
<a name="wfdoc-step-action-run-command"></a>

이 단계 동작은 워크플로의 명령 문서를 실행합니다. Image Builder는 Systems Manager API의 **sendCommand**를 사용하여 대신 실행합니다. 자세한 내용은 [AWS Systems Manager Run Command](https://docs.aws.amazon.com/systems-manager/latest/userguide/run-command.html)를 참조하세요.

**기본 제한 시간:** 720분

**최대 제한 시간: **720분

**롤백:** 이 단계 작업에는 롤백이 없습니다.

**입력:** 다음 표에는 이 단계 작업에 지원되는 입력이 포함되어 있습니다.


| 입력 이름 | 설명 | 형식 | 필수 | 기본값 | 제약 조건 | 
| --- | --- | --- | --- | --- | --- | 
| instanceId | 명령 문서를 실행할 인스턴스의 ID입니다. | 문자열 | 예 |  | 이 워크플로의 인스턴스를 시작한 워크플로 단계의 출력 인스턴스 ID여야 합니다. | 
| documentName | 실행할 Systems Manager 명령 문서의 이름입니다. | 문자열 | 예 |  |  | 
| parameters | 명령 문서에 필요한 파라미터의 키 값 페어의 목록입니다. | dictionary<string, list<string>> | 조건부 |  |  | 
| documentVersion | 실행할 명령 문서 버전입니다. | 문자열 | No | \$1DEFAULT |  | 

**출력:** 다음 표에는 이 단계 작업의 출력이 포함되어 있습니다.


| 출력 이름 | 설명 | 형식 | 
| --- | --- | --- | 
| runCommandId | 인스턴스에서 명령 문서를 실행한 Systems Manager sendCommand의 ID입니다. | 문자열 | 
| status | Systems Manager sendCommand에서 반환된 상태입니다. | 문자열 | 
| output | Systems Manager sendCommand에서 반환된 출력입니다. | 문자열 목록 | 

**예제**

워크플로 문서에 단계 작업을 지정합니다.

```
- name: RunCommandDoc
  action: RunCommand
  onFailure: Abort
  inputs:
    documentName: SampleDocument
    parameters:
        osPlatform: 
          - "linux"
    instanceId.$: $.stepOutputs.LaunchStep.instanceId
```

워크플로 문서에 있는 단계 작업 값의 출력을 사용합니다.

```
$.stepOutputs.RunCommandDoc.status
```

## RunSysPrep
<a name="wfdoc-step-action-run-sysprep"></a>

이 단계 작업은 스냅샷을 위해 빌드 인스턴스가 종료되기 전에 Systems Manager API의 **sendCommand**를 사용하여 Windows 인스턴스용 `AWSEC2-RunSysprep` 문서를 실행합니다. 이러한 작업은 [AWS 이미지 강화 및 정리 모범 사례를](https://aws.amazon.com/articles/public-ami-publishing-hardening-and-clean-up-requirements/) 따릅니다.

**기본 제한 시간:** 60분

**최대 제한 시간: **720분

**롤백:** 이 단계 작업에는 롤백이 없습니다.

**입력:** 다음 표에는 이 단계 작업에 지원되는 입력이 포함되어 있습니다.


| 입력 이름 | 설명 | 형식 | 필수 | 기본값 | 제약 조건 | 
| --- | --- | --- | --- | --- | --- | 
| instanceId | AWSEC2-RunSysprep 문서를 실행할 인스턴스의 ID입니다. | 문자열 | 예 |  | 이 워크플로의 인스턴스를 시작한 워크플로 단계의 출력 인스턴스 ID여야 합니다. | 

**출력:** 다음 표에는 이 단계 작업의 출력이 포함되어 있습니다.


| 출력 이름 | 설명 | 형식 | 
| --- | --- | --- | 
| runCommandId | 인스턴스에서 AWSEC2-RunSysprep 문서를 실행한 Systems Manager sendCommand의 ID입니다. | 문자열 | 
| status | Systems Manager sendCommand에서 반환된 상태입니다. | 문자열 | 
| output | Systems Manager sendCommand에서 반환된 출력입니다. | 문자열 | 

**예제**

워크플로 문서에 단계 작업을 지정합니다.

```
- name: RunSysprep
  action: RunSysPrep
  onFailure: Abort
  inputs:
      instanceId.$: $.stepOutputs.LaunchStep.instanceId
```

워크플로 문서에 있는 단계 작업 값의 출력을 사용합니다.

```
$.stepOutputs.RunSysprep.status
```

## SanitizeInstance
<a name="wfdoc-step-action-sanitize-instance"></a>

이 단계 작업은 스냅샷을 위해 빌드 인스턴스를 종료하기 전에 Linux 인스턴스용 권장 삭제 스크립트를 실행합니다. 삭제 스크립트는 최종 이미지가 보안 모범 사례를 따르는지 확인하고 스냅샷으로 전달해서는 안 되는 빌드 아티팩트 또는 설정을 제거하는 데 도움이 됩니다. 스크립트에 대한 자세한 내용은 [빌드 후 정리 필요](security-best-practices.md#post-build-cleanup) 섹션을 참조하세요. 이 단계 작업은 컨테이너 이미지에 적용되지 않습니다.

Image Builder는 Systems Manager API의 **sendCommand**를 사용하여 이 스크립트를 실행합니다. 자세한 내용은 [AWS Systems Manager Run Command](https://docs.aws.amazon.com/systems-manager/latest/userguide/execute-remote-commands.html)를 참조하세요.

**기본 제한 시간:** 60분

**최대 제한 시간: **720분

**롤백:** 이 단계 작업에는 롤백이 없습니다.

**입력:** 다음 표에는 이 단계 작업에 지원되는 입력이 포함되어 있습니다.


| 입력 이름 | 설명 | 형식 | 필수 | 기본값 | 제약 조건 | 
| --- | --- | --- | --- | --- | --- | 
| instanceId | 삭제할 인스턴스의 ID입니다. | 문자열 | 예 |  | 이 워크플로의 인스턴스를 시작한 워크플로 단계의 출력 인스턴스 ID여야 합니다. | 

**출력:** 다음 표에는 이 단계 작업의 출력이 포함되어 있습니다.


| 출력 이름 | 설명 | 형식 | 
| --- | --- | --- | 
| runCommandId | 인스턴스에서 삭제 스크립트를 실행한 Systems Manager sendCommand의 ID입니다. | 문자열 | 
| status | Systems Manager sendCommand에서 반환된 상태입니다. | 문자열 | 
| output | Systems Manager sendCommand에서 반환된 출력입니다. | 문자열 | 

**예제**

워크플로 문서에 단계 작업을 지정합니다.

```
- name: SanitizeStep
  action: SanitizeInstance
  onFailure: Abort
  inputs:
      instanceId: $.stepOutputs.LaunchStep.instanceId
```

워크플로 문서에 있는 단계 작업 값의 출력을 사용합니다.

```
$.stepOutputs.SanitizeStep.status
```

## TerminateInstance
<a name="wfdoc-step-action-terminate-instance"></a>

이 단계 작업은 입력으로 전달된 인스턴스 ID를 사용하여 인스턴스를 종료합니다.

**기본 제한 시간:** 30분

**최대 제한 시간: **720분

**롤백:** 이 단계 작업에는 롤백이 없습니다.

**입력:** 다음 표에는 이 단계 작업에 지원되는 입력이 포함되어 있습니다.


| 입력 이름 | 설명 | 형식 | 필수 | 기본값 | 제약 조건 | 
| --- | --- | --- | --- | --- | --- | 
| instanceId | 종료할 인스턴스의 ID입니다. | 문자열 | 예 |  |  | 

**출력:** 이 단계 작업에 대한 출력이 없습니다.

**예제**

워크플로 문서에 단계 작업을 지정합니다.

```
- name: TerminateInstance
  action: TerminateInstance
  onFailure: Continue
  inputs:
      instanceId.$: i-1234567890abcdef0
```

## WaitForAction
<a name="wfdoc-step-action-waitfor"></a>

이 단계 작업은 실행 중인 워크플로를 일시 중지하고 Image Builder **SendWorkflowStepAction** API 작업으로부터 외부 작업을 수신할 때까지 기다립니다. 이 단계에서는 EventBridge 이벤트를 세부 정보 유형 `EC2 Image Builder Workflow Step Waiting`과 함께 기본 EventBridge 이벤트 버스에 게시합니다. 이 단계에서는 SNS 주제 ARN을 제공하는 경우 SNS 알림을 보내거나 Lambda 함수 이름을 제공하는 경우 Lambda 함수를 비동기적으로 호출할 수도 있습니다.

**기본 제한 시간:** 3일

**최대 제한 시간: **7일

**롤백:** 이 단계 작업에는 롤백이 없습니다.

**입력:** 다음 표에는 이 단계 작업에 지원되는 입력이 포함되어 있습니다.


| 입력 이름 | 설명 | 형식 | 필수 | 기본값 | 제약 조건 | 
| --- | --- | --- | --- | --- | --- | 
| snsTopicArn | 워크플로 단계가 보류 중일 때 알림을 보내는 선택적 SNS 주제 ARN입니다. | 문자열 | No |  |  | 
| lambdaFunctionName | 워크플로 단계가 보류 중일 때 비동기적으로 호출하는 Lambda 함수의 선택적 이름 또는 ARN입니다. | 문자열 | No |  |  | 
| payload | SNS의 메시지로 사용되는 JSON 문자열과 Lambda의 페이로드입니다. 제공된 경우 사용자 지정 페이로드는 각각 SNS 및 Lambda에 사용되는 기본 메시지/페이로드로 래핑됩니다. 제공되지 않은 경우는 기본 메시지/페이로드를 생성합니다. | 문자열 | No |  | 유효한 JSON 문자열이어야 하며 최대 16KiB여야 합니다. | 

**출력:** 다음 표에는 이 단계 작업의 출력이 포함되어 있습니다.


| 출력 이름 | 설명 | 형식 | 
| --- | --- | --- | 
| 작업 | SendWorkflowStepAction API 작업이 반환하는 작업입니다. | 문자열(RESUME 또는 STOP) | 
| reason | 작업이 반환된 이유입니다. | 문자열 | 

**IAM 권한 필요**

이 단계 작업을 사용하려면 사용자 지정 실행 역할에 다음 권한이 있어야 합니다.

**작업 허용**
+ `lambda:InvokeFunction`

**리소스 지정**
+ `arn:aws:lambda:us-west-2:111122223333:function:function-name`
+ `arn:aws:lambda:us-west-2:111122223333:function:*`

**예제**

SNS 알림을 사용하여 워크플로 문서에서 단계 작업을 지정합니다.

```
- name: SendEventAndWait
  action: WaitForAction
  onFailure: Abort
  inputs:
    snsTopicArn: arn:aws:sns:us-west-2:111122223333:ExampleTopic
```

Lambda 함수 호출을 사용하여 워크플로 문서에서 단계 작업을 지정합니다.

```
- name: SendEventAndWaitWithLambda
  action: WaitForAction
  onFailure: Abort
  inputs:
    lambdaFunctionName: ExampleFunction
    payload: |
      {
        "imageId": "{{ $.stepOutputs.CreateImageFromInstance.imageId }}",
        "region": "us-west-2"
      }
```

워크플로 문서에 있는 단계 작업 값의 출력을 사용합니다.

```
$.stepOutputs.SendEventAndWait.reason
```

## WaitForSSMAgent
<a name="wfdoc-step-action-wait-for-ssm-agent"></a>

이 단계 작업은 예상 무응답 기간이 지난 후에서 AWS Systems Manager EC2 인스턴스를 관리할 수 있을 때까지 기다립니다. 시스템 재부팅, OS 업그레이드 또는 SSM에서 인스턴스를 일시적으로 연결 해제하는 플랫폼별 작업과 같이 알려진 인스턴스 중단이 있는 워크플로에 특히 유용합니다. Image Builder는 SSM 연결을 다시 얻거나 시간 초과될 때까지 인스턴스를 모니터링합니다.

**기본 제한 시간:** 60분

**최대 제한 시간: **180분

**롤백:** 이 단계 작업에는 롤백이 없습니다.

**입력:** 다음 표에는 이 단계 작업에 지원되는 입력이 포함되어 있습니다.


| 입력 이름 | 설명 | 형식 | 필수 | 기본값 | 제약 조건 | 
| --- | --- | --- | --- | --- | --- | 
| instanceId | SSM 연결을 모니터링할 인스턴스의 ID입니다. | 문자열 | 예 |  | 유효한 EC2 인스턴스 ID여야 합니다. | 

**출력:** 다음 표에는 이 단계 작업의 출력이 포함되어 있습니다.


| 출력 이름 | 설명 | 형식 | 
| --- | --- | --- | 
| status | SSM 에이전트의 연결 상태입니다. | 문자열 | 

**예제**

워크플로 문서에 단계 작업을 지정합니다.

```
- name: WaitForInstanceAfterReboot
  action: WaitForSSMAgent
  onFailure: Abort
  timeoutInSeconds: 900
  inputs:
    instanceId.$: $.stepOutputs.LaunchStep.instanceId
```

워크플로 문서에 있는 단계 작업 값의 출력을 사용합니다.

```
$.stepOutputs.WaitForInstanceAfterReboot.Status
```

# 워크플로 문서에 동적 변수 사용
<a name="wfdoc-dynamic-vars"></a>

워크플로 문서에서 동적 변수를 사용하여 이미지 생성 프로세스의 런타임에 변하는 값을 표현할 수 있습니다. 동적 변수의 문자열 보간을 사용하면 JSON 문자열과 같은 구조화된 콘텐츠 내에 JSONPath 표현식을 포함할 수 있습니다. 이는 복잡한 페이로드 내에 런타임 값을 전달하여 `ExecuteStateMachine` 또는와 같은 작업을 단계화해야 할 때 특히 유용합니다`WaitForAction`.

동적 변수에 문자열 보간을 사용하려면 문자열 콘텐츠 `"{{...}}"` 내에서 JSONPath 표현식을 이중 중괄호로 묶습니다. 이중 중괄호로 래핑된 JSONPath 표현식만 변수로 처리됩니다. 이중 중괄호로 래핑되지 않은 모든 JSONPath 표현식은 리터럴 문자열 콘텐츠로 처리됩니다.

**JSONPath 동적 워크플로 변수 구문**

```
$.<document structure>.[<step name>.]<variable name>
```

동적 변수 값은 대상 변수를 고유하게 식별하는 구조적 노드가 있는 JSONPath 선택기로 표시됩니다. 루트(\$1) 뒤의 첫 번째 노드는 워크플로 문서의 구조(예: `stepOutputs` 또는 Image Builder 시스템 변수의 경우 `imageBuilder`)를 나타냅니다. 다음 목록에는 지원되는 JSONPath 워크플로 문서 구조 노드가 포함되어 있습니다.

**문서 구조 노드**
+ 파라미터-워크플로 파라미터
+ stepOutputs-동일한 워크플로 문서에 있는 단계의 출력
+ workflowOutputs-이미 실행된 워크플로 문서의 출력
+ imagebuilder - Image Builder 시스템 변수

`parameters` 및 `stepOutputs` 문서 구조 노드에는 단계의 이름에 대한 선택적 노드가 포함됩니다. 이렇게 하면 모든 단계에서 고유한 변수 이름을 지정할 수 있습니다.

JSONPath의 마지막 노드는 대상 변수의 이름(예: `instanceId`)입니다.

각 단계에서 이러한 JSONPath 동적 변수를 사용하여 이전 단계 작업의 출력을 참조할 수 있습니다. 이를 체이닝 또는 참조라고도 합니다. 이전 단계 작업의 결과를 참조하려면 다음 동적 변수를 사용할 수 있습니다.

```
$.stepOutputs.step-name.output-name
```

**중요**  
입력 파라미터가 동적 변수를 참조하는 경우 연결 표시기(`.$`)를 파라미터 이름 끝에 연결해야 합니다.

**예제 1: 입력 파라미터 체인 표시기**

다음 예제는 문자열 보간을 사용하여 런타임 시 파라미터 값의 동적 변수를 확인하는 입력 파라미터를 보여줍니다.

```
  - name: ApplyTestComponents
    action: ExecuteComponents
    onFailure: Abort
    inputs:
      instanceId.$: "$.stepOutputs.LaunchTestInstance.instanceId"
```

**예제 2: 동적 변수의 문자열 보간**

다음 예제에서는 동적 변수가 문자열 보간을 사용하여 런타임 시 값을 결정하는 방법을 보여줍니다.

```
- name: ValidateImageConfiguration
  action: ExecuteStateMachine
  inputs:
    stateMachineArn: arn:aws:states:us-east-1:111122223333:stateMachine:ImageValidation
    input: |
      {
        "imageId": "{{ $.stepOutputs.CreateImageFromInstance.imageId }}",
        "region": "us-east-1",
        "buildDate": "{{ $.imagebuilder.dateTime }}",
        "instanceType": "{{ $.stepOutputs.LaunchStep.instanceType }}"
      }
```

이 예제에서는 이중 중괄호로 래핑된 JSONPath 표현식이 런타임에 확인됩니다.
+ `{{ $.stepOutputs.CreateImageFromInstance.imageId }}` - CreateImageFromInstance 단계에서 실제 이미지 ID로 확인
+ `{{ $.imagebuilder.dateTime }}` - 현재 빌드 타임스탬프로 해결됩니다. 사용할 수 있는 Image Builder 시스템 변수 목록은 [Image Builder 시스템 변수 사용](#wfdoc-ib-vars) 섹션을 참조하세요.
+ `{{ $.stepOutputs.LaunchStep.instanceType }}` - LaunchStep에 사용된 인스턴스 유형으로 해결합니다.

와 같은 리터럴 문자열은 `"region": "us-east-1"` 변경되지 않습니다.

**참고**  
문자열 보간은 YAML 파이프(`|`) 연산자를 사용하는 여러 줄 문자열을 포함하여 워크플로 문서의 모든 문자열 콘텐츠와 함께 작동합니다. 중괄호 요구 사항은 JSONPath 변수와 리터럴 텍스트 콘텐츠를 명확하게 구분하는 이스케이프 메커니즘 역할을 합니다.

## Image Builder 시스템 변수 사용
<a name="wfdoc-ib-vars"></a>

Image Builder는 워크플로 문서에서 사용할 수 있는 다음과 같은 시스템 변수를 제공합니다.


|  변수 이름  |  설명  |  형식  |  예시 값  | 
| --- | --- | --- | --- | 
|  cloudWatchLogGroup  |  출력 로그에서 CloudWatch Logs 그룹의 이름입니다. 형식: `/aws/imagebuilder/<recipe-name>`  |  문자열  |  `/aws/imagebuilder/sampleImageRecipe`  | 
|  cloudWatchLogStream  |  출력 로그에서 CloudWatch Logs 스트림의 이름입니다.  |  문자열  |  *1.0.0/1*  | 
|  collectImageMetadata  |  인스턴스 메타데이터를 수집할지 여부를 Image Builder에 지시하는 설정입니다.  |  부울  |  `true` \$1 `false`  | 
|  collectImageScanFindings  |  Image Builder가 이미지 스캔 결과를 수집할 수 있도록 지원하는 설정의 현재 값입니다.  |  부울  |  `true` \$1 `false`  | 
|  imageBuildNumber  |  이미지의 빌드 버전 번호입니다.  |  Integer  |  *1*  | 
|  imageId  |  기본 이미지의 AMI id입니다.  |  문자열  |  *ami-1234567890abcdef1*  | 
|  imageName  |  이미지의 이름입니다.  |  문자열  |  *sampleImage*  | 
|  imageType  |  이미지 출력 유형입니다.  |  문자열  |  `AMI` \$1 `Docker`  | 
|  imageVersionNumber  |  이미지의 버전 번호입니다.  |  문자열  |  *1.0.0*  | 
|  instanceProfileName  |  Image Builder가 빌드 및 테스트 인스턴스를 시작하는 데 사용하는 인스턴스 프로파일 역할의 이름입니다.  |  문자열  |  *SampleImageBuilderInstanceProfileRole*  | 
|  platform  |  빌드된 이미지의 운영 체제 플랫폼입니다.  |  문자열  |  `Linux` \$1 `Windows` \$1 `MacOS`  | 
|  s3Logs  |  Image Builder가 작성하는 S3 로그의 구성을 포함하는 JSON 객체입니다.  |  JSON 객체  |  \$1's3Logs': \$1's3BucketName': '*sample-bucket*', 's3KeyPrefix': '*ib-logs*'\$1\$1  | 
|  securityGroups  |  빌드 및 테스트 인스턴스에 적용되는 보안 그룹 ID입니다.  |  목록[문자열]  |  *[sg-1234567890abcdef1, sg-11112222333344445]*  | 
|  sourceImageARN  |  워크플로가 빌드 및 테스트 단계에 사용하는 Image Builder 이미지 리소스의 Amazon 리소스 이름(ARN)입니다.  |  문자열  |  arn:aws:imagebuilder:*us-east-1*:*111122223333*:image/*sampleImage*/*1.0.0/1*  | 
|  subnetId  |  빌드 및 테스트 인스턴스를 시작할 서부넷의 ID입니다.  |  문자열  |  *subnet-1234567890abcdef1*  | 
|  terminateInstanceOnFailure  |  실패 시 Image Builder에서 인스턴스를 종료하거나 문제 해결을 위해 인스턴스를 유지하도록 지시하는 설정의 현재 값입니다.  |  부울  |  `true` \$1 `false`  | 
|  workflowPhase  |  워크플로 실행을 위해 실행 중인 현재 단계입니다.  |  문자열  |  `Build` \$1 `Test`  | 
|  workingDirectory  |  작업 디렉터리에 대한 경로입니다.  |  문자열  |  `/tmp`  | 

# 워크플로 단계에서 조건문을 사용합니다.
<a name="wfdoc-conditional-statements"></a>

조건문은 `if`문 문서 속성으로 시작합니다. `if`문의 궁극적인 목적은 단계 작업을 실행할지 아니면 건너뛰는지 결정하는 것입니다. `if`문이 `true`로 확인되면 단계 작업이 실행됩니다. `false`로 확인되면 Image Builder는 단계 작업을 건너뛰고 로그에 `SKIPPED` 단계 상태를 기록합니다.

`if`문은 분기 명령문(`and`, `or`)과 조건부 수정자(`not`)를 지원합니다. 또한 비교하는 데이터 유형(문자열 또는 숫자)에 따라 값을 비교(같음, 보다 작음, 보다 큼)하는 다음 조건문도 지원합니다.

**지원되는 비교 연산자**
+ `booleanEquals`
+ `numberEquals`
+ `numberGreaterThan`
+ `numberGreaterThanEquals`
+ `numberLessThan`
+ `numberLessThanEquals`
+ `stringEquals`

**분기 명령문 및 조건부 수정자 규칙**  
분기 명령문(`and`, `or`) 및 조건부 수정자(`not`)에는 다음 규칙이 적용됩니다.
+ 분기문과 조건부 수정자는 한 줄에 단독으로 나타나야 합니다.
+ 분기문과 조건부 수정자는 레벨 규칙을 따라야 합니다.
  + 상위 수준에는 문이 하나만 있을 수 있습니다.
  + 각 하위 분기 또는 수정자는 새 레벨을 시작합니다.

  레벨에 대한 자세한 내용은 [조건문의 중첩 수준](#wfdoc-conditional-structure) 섹션을 참조하세요.
+ 각 분기문에는 하위 조건문이 1개 이상 10개 이하로 있어야 합니다.
+ 조건부 수정자는 하위 조건문 하나에만 사용할 수 있습니다.

## 조건문의 중첩 수준
<a name="wfdoc-conditional-structure"></a>

조건문은 자체 섹션의 여러 수준에서 작동합니다. 예를 들어 `if`문 속성은 워크플로 문서에서 단계 이름 및 작업과 동일한 수준에 나타납니다. 이것이 조건문의 기본입니다.

조건문 수준은 최대 4개 지정할 수 있지만 상위 수준에는 문 하나만 나타날 수 있습니다. 다른 모든 분기문, 조건부 수정자 또는 조건 연산자는 여기에서 수준당 하나씩 들여쓰기됩니다.

다음 개요는 조건문의 최대 중첩 레벨 수를 보여줍니다.

```
base:
  parent: 
    - child (level 2)
        - child (level 3)
            child (level 4)
```

`if` 속성  
`if` 속성은 조건문을 문서 속성으로 지정합니다. 이 레벨은 0입니다.

상위 수준  
조건문의 첫 번째 중첩 레벨입니다. 이 수준에는 문이 하나만 있을 수 있습니다. 분기 또는 수정자가 필요하지 않은 경우 하위 명령문이 없는 조건부 연산자를 사용할 수 있습니다. 이 수준에서는 조건 연산자를 제외하고 대시 표기법을 사용하지 않습니다.

하위 수준  
레벨 2\$14는 하위 수준으로 간주합니다. 하위 명령문에는 분기문, 조건부 수정자 또는 조건 연산자가 포함될 수 있습니다.

**예: 중첩 수준**  
다음 예제에서는 조건문 내 최대 레벨 수를 보여줍니다.

```
if:
  and:                             #first level
    - stringEquals: 'my_string'    #second level
      value: 'my_string'
    - and:                         #also second level
        - numberEquals: '1'        #third level
          value: 1
        - not:                     #also third level
            stringEquals: 'second_string'      #fourth level
            value: "diff_string"
```

**중첩 규칙**
+ 하위 수준의 각 분기 또는 수정자는 새 레벨을 시작합니다.
+ 각 레벨이 들여쓰기됩니다.
+ 명령문, 수정자 또는 상위 수준의 연산자 하나를 포함하여 최대 4개의 수준이 있을 수 있으며, 추가 수준은 최대 3개까지 가능합니다.

## 조건문 예제
<a name="wfdoc-conditional-examples"></a>

이 예제 그룹은 조건문의 다양한 측면을 보여줍니다.

**브랜치: and**  
`and` 분기문은 분기의 하위 표현식 목록에서 연산을 수행하며, 이들 표현식은 모두 `true`로 평가되어야 합니다. Image Builder는 목록에 나타나는 순서대로 표현식을 평가합니다. `false`로 평가되는 표현식이 있으면 처리가 중지되고 분기가 `false`로 고려됩니다.

다음 예제에서는 두 표현식 모두 `true`로 평가되기 때문에 `true`로 평가합니다.

```
if:
  and:
    - stringEquals: 'test_string'
      value: 'test_string'
    - numberEquals: 1
      value: 1
```

**브랜치: or**  
`or` 분기문은 분기의 하위 표현식 목록에서 연산을 수행하며, 이들 표현식 중 1개 이상은 `true`로 평가되어야 합니다. Image Builder는 목록에 나타나는 순서대로 표현식을 평가합니다. `true`로 평가되는 표현식이 있으면 처리가 중지되고 분기가 `true`로 고려됩니다.

다음 예제에서는 첫 번째 표현식이 `true`임에도 `false`로 평가합니다.

```
if:
  or:
    - stringEquals: 'test_string'
      value: 'test_string_not_equal'
    - numberEquals: 1
      value: 1
```

**조건부 수정자: not**  
`not` 조건부 수정자는 분기의 하위 항목인 조건문을 무효화합니다.

다음 예제에서는 `not` 수정자가 `stringEquals` 조건문을 부정하는 경우 `true`로 평가합니다.

```
if:
  not:
    - stringEquals: 'test_string'
      value: 'test_string_not_equal'
```

**조건문: booleanEquals**  
`booleanEquals` 조건문 연산자는 부울 값을 비교하고 부울 값이 정확히 일치하면 true를 반환합니다.

다음 예제에서는 `collectImageScanFindings`의 활성화 여부를 확인합니다.

```
if:
  - booleanEquals: true
    value: '$.imagebuilder.collectImageScanFindings'
```

**조건문: stringEquals**  
`stringEquals` 조건문 연산자는 두 문자열을 비교하고 문자열이 정확히 일치하면 true를 반환합니다. 두 값 중 하나가 문자열이 아닌 경우 Image Builder는 비교하기 전에 해당 값을 문자열로 변환합니다.

다음 예제에서는 플랫폼 시스템 변수를 비교하여 워크플로가 Linux 플랫폼에서 실행되고 있는지 확인합니다.

```
if:
  - stringEquals: 'Linux'
    value: '$.imagebuilder.Platform'
```

**조건문: numberEquals**  
`numberEquals` 비교 연산자는 두 숫자를 비교하고 숫자가 같으면 true를 반환합니다. 비교할 숫자는 다음 형식 중 하나여야 합니다.
+ Integer
+ Float
+ 다음 정규식 패턴과 일치하는 문자열: `^-?[0-9]+(\.)?[0-9]+$`

다음 예제 비교는 모두 `true`로 평가됩니다.

```
if:
  # Value provider as a number
  numberEquals: 1
  value: '1'
  
  # Comparison value provided as a string
  numberEquals: '1'
  value: 1
  
  # Value provided as a string
  numberEquals: 1
  value: '1'
  
  # Floats are supported
  numberEquals: 5.0
  value: 5.0
  
  # Negative values are supported
  numberEquals: -1
  value: -1
```