

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

# AWSTOE 구성 요소 관리자가 지원하는 작업 모듈
<a name="toe-action-modules"></a>

EC2 Image Builder와 같은 이미지 구축 서비스는 AWSTOE 작업 모듈을 사용하여 사용자 지정 머신 이미지를 구축하고 테스트하는 데 사용되는 EC2 인스턴스를 구성하는 데 도움이 됩니다. 이 섹션에서는 일반적으로 사용되는 AWSTOE 작업 모듈의 기능과 예제를 포함하여 이를 구성하는 방법을 설명합니다.

구성 요소는 일반 텍스트 YAML 문서를 사용하여 작성됩니다. 문서 구문에 대한 자세한 내용은 [사용자 지정 AWSTOE 구성 요소에 구성 요소 문서 프레임워크 사용](toe-use-documents.md) 섹션을 참조하세요.

**참고**  
모든 작업 모듈은 실행할 때 Systems Manager 에이전트와 동일한 계정을 사용하며, Linux의 경우 `root`이고 Windows의 경우 `NT Authority\SYSTEM`입니다.

다음 상호 참조는 수행하는 작업 유형별로 작업 모듈을 분류합니다.

 

**일반 실행**
+ [Assert(Linux, Windows, macOS)](#action-modules-assertion)
+ [ExecuteBash(Linux, macOS)](#action-modules-executebash)
+ [ExecuteBinary(Linux, Windows, macOS)](#action-modules-executebinary)
+ [ExecuteDocument(Linux, Windows, macOS)](#action-modules-executedocument)
+ [ExecutePowerShell(Windows)](#action-modules-executepowershell)

 

**파일 다운로드 및 업로드**
+ [S3Download(Linux, Windows, macOS)](#action-modules-s3download)
+ [S3Upload(Linux, Windows, macOS)](#action-modules-s3upload)
+ [WebDownload(Linux, Windows, macOS)](#action-modules-webdownload)

 

**파일 시스템 작업**
+ [AppendFile(Linux, Windows, macOS)](#action-modules-appendfile)
+ [CopyFile(Linux, Windows, macOS)](#action-modules-copyfile)
+ [CopyFolder(Linux, Windows, macOS)](#action-modules-copyfolder)
+ [CreateFile(Linux, Windows, macOS)](#action-modules-createfile)
+ [CreateFolder(Linux, Windows, macOS)](#action-modules-createfolder)
+ [CreateSymlink(Linux, Windows, macOS)](#action-modules-createsymlink)
+ [DeleteFile(Linux, Windows, macOS)](#action-modules-deletefile)
+ [DeleteFolder(Linux, Windows, macOS)](#action-modules-deletefolder)
+ [ListFiles(Linux, Windows, macOS)](#action-modules-listfiles)
+ [MoveFile(Linux, Windows, macOS)](#action-modules-movefile)
+ [MoveFolder(Linux, Windows, macOS)](#action-modules-movefolder)
+ [ReadFile(Linux, Windows, macOS)](#action-modules-readfile)
+ [SetFileEncoding(Linux, Windows, macOS)](#action-modules-setfileencoding)
+ [SetFileOwner(Linux, Windows, macOS)](#action-modules-setfileowner)
+ [SetFolderOwner(Linux, Windows, macOS)](#action-modules-setfolderowner)
+ [SetFilePermissions(Linux, Windows, macOS)](#action-modules-setfilepermissions)
+ [SetFolderPermissions(Linux, Windows, macOS)](#action-modules-setfolderpermissions)

 

**소프트웨어 설치 작업**
+ [InstallMSI(Windows)](#action-modules-install-msi)
+ [UninstallMSI(Windows)](#action-modules-uninstall-msi)

 

**시스템 작업**
+ [Reboot(Linux, Windows)](#action-modules-reboot)
+ [SetRegistry(Windows)](#action-modules-setregistry)
+ [UpdateOS(Linux, Windows)](#action-modules-updateos)

## 일반 실행 모듈
<a name="action-modules-general-execution"></a>

다음 섹션에는 명령을 실행하고 실행 워크플로를 제어하는 ​​작업 모듈에 대한 세부 정보가 포함되어 있습니다.

**Topics**
+ [Assert(Linux, Windows, macOS)](#action-modules-assertion)
+ [ExecuteBash(Linux, macOS)](#action-modules-executebash)
+ [ExecuteBinary(Linux, Windows, macOS)](#action-modules-executebinary)
+ [ExecuteDocument(Linux, Windows, macOS)](#action-modules-executedocument)
+ [ExecutePowerShell(Windows)](#action-modules-executepowershell)

### Assert(Linux, Windows, macOS)
<a name="action-modules-assertion"></a>

**Assert** 작업 모듈은 [비교 연산자](toe-comparison-operators.md) 또는 [논리 연산자](toe-logical-operators.md)를 입력으로 사용하여 값 비교를 수행합니다. 연산자 표현식(true 또는 false)의 결과는 단계의 전체 성공 또는 실패 상태를 나타냅니다.

비교 또는 논리 연산자 표현식이 `true`로 평가되면 단계가 `Success`로 표시됩니다. 그렇지 않으면 단계가 `Failed`로 표시됩니다. 단계가 실패하면 `onFailure` 파라미터가 단계의 결과를 결정합니다.


**Input**  

| 키 이름 | 설명 | 형식 | 필수 | 
| --- | --- | --- | --- | 
| input | 단일 비교 또는 논리 연산자를 포함합니다. 참고로 논리 연산자는 둘 이상의 비교 연산자를 포함할 수 있습니다. | 이는 연산자에 따라 가변적입니다. | 예 | 

**입력 예제: `stringEquals` 비교 연산자를 사용한 간단한 비교**

이 예제는 `true`로 평가됩니다.

```
- name: StringComparison
  action: Assert
  inputs:
    stringEquals: '2.1.1'
    value: '{{ validate.ApplicationVersion.outputs.stdout }}'
```

**입력 예제: `patternMatches` 비교 연산자를 사용한 Regex 비교**

이 예제는 모두 `true`로 평가됩니다.

```
- name: Letters only
  action: Assert
  inputs:
    patternMatches: '^[a-zA-Z]+$'
    value: 'ThisIsOnlyLetters'

- name: Letters and spaces only
  action: Assert
  inputs:
    patternMatches: '^[a-zA-Z\s]+$'
    value: 'This text contains spaces'
  
- name: Numbers only
  action: Assert
  inputs:
    patternMatches: '^[0-9]+$'
    value: '1234567890'
```

**입력 예제: 논리 연산자 및 체인 변수를 사용한 중첩 비교**

다음 예제에서는 체인 변수와의 비교를 사용하는 논리 연산자와의 중첩 비교를 보여줍니다. 다음 중 하나가 true인 경우 `Assert`는 `true`로 평가됩니다.
+ `ApplicationVersion`은 `2.0`보다 크고 `CPUArchitecture`는 `arm64`와 같습니다.
+ `CPUArchitecture`는 `x86_64`와 같습니다.

```
- name: NestedComparisons
  action: Assert
  inputs:
    or: # <- first level deep
      - and: # <- second level deep
          - numberGreaterThan: 2.0 # <- third level deep
            value: '{{ validate.ApplicationVersion.outputs.stdout }}'
          - stringEquals: 'arm64'
            value: '{{ validate.CPUArchitecture.outputs.stdout }}'
      - stringEquals: 'x86_64'
        value: '{{ validate.CPUArchitecture.outputs.stdout }}'
```

**출력:**

`Assert`의 출력은 단계의 성공 또는 실패입니다.

### ExecuteBash(Linux, macOS)
<a name="action-modules-executebash"></a>

**ExecuteBash** 작업 모듈을 사용하면 인라인 쉘 코드/명령을 사용하여 bash 스크립트를 실행할 수 있습니다. 이 모듈은 Linux를 지원합니다.

명령 블록에서 지정하는 모든 명령과 지침은 파일(예: `input.sh`)로 변환되고 bash 쉘과 함께 실행됩니다. 쉘 파일을 실행한 결과는 해당 단계의 종료 코드입니다.

**ExecuteBash** 모듈은 스크립트가 종료 코드 `194`(으)로 종료되는 경우 시스템 재시작을 처리합니다. 애플리케이션이 시작되면 다음 작업 중 하나를 수행합니다.
+ Systems Manager Agent에서 실행하는 경우, 애플리케이션은 종료 코드를 호출자에게 전달합니다. Systems Manager Agent는 [스크립트에서 관리형 인스턴스 재부팅](https://docs.aws.amazon.com/systems-manager/latest/userguide/send-commands-reboot.html)에 설명된 대로 시스템 재부팅을 처리하고 재시작을 시작한 것과 동일한 단계를 실행합니다.
+ 애플리케이션은 현재 `executionstate`(을)를 저장하고 애플리케이션을 다시 실행하도록 재시작 트리거를 구성한 다음 시스템을 다시 시작합니다.

시스템을 다시 시작한 후 애플리케이션은 재시작을 시작한 단계와 동일한 단계를 실행합니다. 이 기능이 필요한 경우 동일한 쉘 명령의 여러 호출을 처리할 수 있는 idempotent 스크립트를 작성해야 합니다.


**Input**  

| 키 이름 | 설명 | 형식 | 필수 | 
| --- | --- | --- | --- | 
| commands | bash 구문에 따라 실행할 지침 또는 명령 목록이 포함되어 있습니다. 여러 줄의 YAML이 허용됩니다. | List | 예 | 

**입력 예제: 재부팅 전과 재부팅 후**

```
name: ExitCode194Example
description: This shows how the exit code can be used to restart a system with ExecuteBash
schemaVersion: 1.0
phases:
  - name: build
    steps:
      - name: RestartTrigger
        action: ExecuteBash
        inputs:
          commands:
            - |
              REBOOT_INDICATOR=/var/tmp/reboot-indicator
              if [ -f "${REBOOT_INDICATOR}" ]; then
                echo 'The reboot file exists. Deleting it and exiting with success.'
                rm "${REBOOT_INDICATOR}"
                exit 0
              fi
              echo 'The reboot file does not exist. Creating it and triggering a restart.'
              touch "${REBOOT_INDICATOR}"
              exit 194
```


**출력**  

| 필드 | 설명 | 형식 | 
| --- | --- | --- | 
| stdout | 명령 실행의 표준 출력. | 문자열 | 

재부팅을 시작하고 작업 모듈의 일부로 종료 코드 `194`(을)를 반환하면 재부팅을 시작한 동일한 작업 모듈 단계에서 빌드가 재개됩니다. 종료 코드 없이 재부팅을 시작하면 빌드 프로세스가 실패할 수 있습니다.

**출력 예제: 재부팅 전(문서를 통해 처음으로)**

```
{
	“stdout”: “The reboot file does not exist. Creating it and triggering a restart."
}
```

**출력 예제: 재부팅 후(문서를 통해 두 번째로)**

```
{
	“stdout”: “The reboot file exists. Deleting it and exiting with success."
}
```

### ExecuteBinary(Linux, Windows, macOS)
<a name="action-modules-executebinary"></a>

**ExecuteBinary** 작업 모듈을 사용하면 명령줄 인수 목록을 사용하여 바이너리 파일을 실행할 수 있습니다.

**ExecuteBinary** 모듈은 바이너리 파일이 종료 코드 `194`(Linux) 또는 `3010`(Windows)으로 종료될 경우 시스템 재시작을 처리합니다. 이 경우 애플리케이션은 다음 작업 중 하나를 수행합니다.
+ Systems Manager Agent에서 실행하는 경우, 애플리케이션은 종료 코드를 호출자에게 전달합니다. Systems Manager Agent는 [스크립트에서 관리형 인스턴스 재부팅](https://docs.aws.amazon.com/systems-manager/latest/userguide/send-commands-reboot.html)에 설명된 대로 시스템 재시작을 처리하고 재시작을 시작한 것과 동일한 단계를 실행합니다.
+ 애플리케이션은 현재 `executionstate`(을)를 저장하고 애플리케이션을 다시 실행하도록 재시작 트리거를 구성한 다음 시스템을 다시 시작합니다.

시스템이 재시작된 후 애플리케이션은 재시작을 시작한 단계와 동일한 단계를 실행합니다. 이 기능이 필요한 경우 동일한 쉘 명령의 여러 호출을 처리할 수 있는 idempotent 스크립트를 작성해야 합니다.


**Input**  

| 키 이름 | 설명 | 형식 | 필수 | 
| --- | --- | --- | --- | 
| path | 실행할 바이너리 파일 경로입니다. | 문자열 | 예 | 
| arguments | 바이너리를 실행할 때 사용할 명령줄 인수 목록이 포함되어 있습니다. | 문자열 목록 | 아니요 | 

**입력 예제: .NET 설치**

```
  - name: "InstallDotnet"
    action: ExecuteBinary
    inputs:
      path: C:\PathTo\dotnet_installer.exe
      arguments:
        - /qb
        - /norestart
```


**출력**  

| 필드 | 설명 | 형식 | 
| --- | --- | --- | 
| stdout | 명령 실행의 표준 출력. | 문자열 | 

**출력 예제**

```
{
	"stdout": "success"
}
```

### ExecuteDocument(Linux, Windows, macOS)
<a name="action-modules-executedocument"></a>

**ExecuteDocument** 작업 모듈은 한 문서에서 여러 구성 요소 문서를 실행하는 중첩된 구성 요소 문서에 대한 지원을 추가합니다. AWSTOE 는 런타임 시 입력 파라미터로 전달된 문서의 유효성을 검사합니다.

**제한 사항**
+ 이 작업 모듈은 한 번만 실행되고 재시도는 허용되지 않으며 제한 시간을 설정하는 옵션도 없습니다. **ExecuteDocument**는 다음과 같은 기본값을 설정하며, 기본값을 변경하려고 하면 오류를 반환합니다.
  + `timeoutSeconds`: -1
  + `maxAttempts`: 1
**참고**  
이러한 값은 비워 둘 수 있으며 기본값을 AWSTOE 사용합니다.
+ 문서 중첩은 최대 세 개 수준까지 허용되지만, 그 이상은 허용되지 않습니다. 최상위 수준은 중첩되지 않으므로 세 개 수준의 중첩은 네 가지 문서 수준으로 변환됩니다. 이 시나리오에서는 최하위 수준 문서가 다른 문서를 호출해서는 안 됩니다.
+ 구성 요소 문서의 순환 실행은 허용되지 않습니다. 반복 구성 외부에서 자신을 호출하거나 현재 실행 체인의 상위에 있는 다른 문서를 호출하는 모든 문서는 사이클을 시작하여 무한 루프를 초래할 수 있습니다. AWSTOE 가 순환 실행을 감지하면 실행을 중지하고 실패를 기록합니다.

![\[ExecuteDocument 작업 모듈에 대한 중첩 수준 제한.\]](http://docs.aws.amazon.com/ko_kr/imagebuilder/latest/userguide/images/toe-component-document-nesting.png)


구성 요소 문서가 자체적으로 실행되거나 현재 실행 체인의 상위에 있는 구성 요소 문서를 실행하려고 하면 실행되지 않습니다.

**입력**


| 키 이름 | 설명 | 형식 | 필수 | 
| --- | --- | --- | --- | 
| document |  구성 요소 문서의 경로. 유효한 옵션은 다음과 같습니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/imagebuilder/latest/userguide/toe-action-modules.html)  | 문자열 | 예 | 
| document-s3-bucket-owner |  구성 요소 문서가 저장된 S3 버킷의 S3 버킷 소유자의 계정 ID입니다. *(구성 요소 문서에서 S3 URI를 사용하는 경우 권장합니다.)*  | 문자열 | No | 
| phases |  구성 요소 문서에서 실행할 수 있는 단계로, 쉼표로 구분된 목록으로 표시됩니다. 단계가 지정되지 않은 경우 모든 단계가 실행됩니다.  | 문자열 | No | 
| parameters |  런타임 시 구성 요소 문서에 키 값 페어로 전달되는 입력 파라미터입니다.  | 파라미터 맵 목록 | 아니요 | 

**파라미터 맵 입력**


| 키 이름 | 설명 | 형식 | 필수 | 
| --- | --- | --- | --- | 
| name |  **ExecuteDocument** 작업 모듈이 실행 중인 구성 요소 문서에 전달할 입력 파라미터의 이름입니다.  | 문자열 | 예 | 
| value |  입력 파라미터의 값입니다.  | 문자열 | 예 | 

**입력 예제**  
다음 예제는 설치 경로에 따른 구성 요소 문서 입력의 변형을 보여줍니다.

**입력 예제: 로컬 문서 경로**

```
# main.yaml
schemaVersion: 1.0

phases:
  - name: build
    steps:
      - name: ExecuteNestedDocument
        action: ExecuteDocument
        inputs:
          document: Sample-1.yaml
          phases: build
          parameters:
            - name: parameter-1
              value: value-1
            - name: parameter-2
              value: value-2
```

**입력 예제: 문서 경로로서의 S3 URI**

```
# main.yaml
schemaVersion: 1.0

phases:
  - name: build
    steps:
      - name: ExecuteNestedDocument
        action: ExecuteDocument
        inputs:
          document: s3://my-bucket/Sample-1.yaml
          document-s3-bucket-owner: 123456789012
          phases: build,validate
          parameters:
            - name: parameter-1
              value: value-1
            - name: parameter-2
              value: value-2
```

**입력 예제: 문서 경로로서의 EC2 Image Builder 구성 요소 ARN**

```
# main.yaml
schemaVersion: 1.0

phases:
  - name: build
    steps:
      - name: ExecuteNestedDocument
        action: ExecuteDocument
        inputs:
          document: arn:aws:imagebuilder:us-west-2:aws:component/Sample-Test/1.0.0
          phases: test
          parameters:
            - name: parameter-1
              value: value-1
            - name: parameter-2
              value: value-2
```

**ForEach 루프를 사용하여 문서 실행**

```
# main.yaml
schemaVersion: 1.0

phases:
  - name: build
    steps:
      - name: ExecuteNestedDocument
        action: ExecuteDocument
        loop:
          name: 'myForEachLoop'
          forEach:
            - Sample-1.yaml
            - Sample-2.yaml
        inputs:
          document: "{{myForEachLoop.value}}"
          phases: test
          parameters:
            - name: parameter-1
              value: value-1
            - name: parameter-2
              value: value-2
```

**For 루프를 사용하여 문서 실행**

```
# main.yaml
schemaVersion: 1.0

phases:
  - name: build
    steps:
      - name: ExecuteNestedDocument
        action: ExecuteDocument
        loop:
          name: 'myForLoop'
          for:
            start: 1
            end: 2
            updateBy: 1
        inputs:
          document: "Sample-{{myForLoop.value}}.yaml"
          phases: test
          parameters:
            - name: parameter-1
              value: value-1
            - name: parameter-2
              value: value-2
```

**출력**  
AWSTOE 는 실행될 `detailedoutput.json` 때마다 라는 출력 파일을 생성합니다. 이 파일에는 실행 중에 호출되는 모든 구성 요소 문서의 모든 단계에 대한 세부 정보가 포함됩니다. **ExecuteDocument** 작업 모듈의 경우 `outputs` 필드에서 간략한 런타임 요약과 `detailedOutput`에서 실행되는 단계(phases), 단계(steps) 및 문서에 대한 세부 정보를 찾을 수 있습니다.

```
{
	\"executedStepCount\":1,\"executionId\":\"97054e22-06cc-11ec-9b14-acde48001122\",\"failedStepCount\":0,\"failureMessage\":\"\",\"ignoredFailedStepCount\":0,\"logUrl\":\"\",\"status\":\"success\"
}",
```

각 구성 요소 문서의 출력 요약 개체에는 다음과 같은 세부 정보가 여기 나온 것처럼 샘플 값과 함께 포함되어 있습니다.
+ executedStepCount":1
+ "executionId":"12345a67-89bc-01de-2f34-abcd56789012"
+ "failedStepCount":0
+ "failureMessage":""
+ "ignoredFailedStepCount":0
+ "logUrl":""
+ "status":"success"

**출력 예시**  
다음 예제에서는 중첩 실행이 발생할 때 **ExecuteDocument** 작업 모듈의 출력을 보여 줍니다. 이 예제에서 `main.yaml` 구성 요소 문서는 `Sample-1.yaml` 구성 요소 문서를 성공적으로 실행합니다.

```
{
    "executionId": "12345a67-89bc-01de-2f34-abcd56789012",
    "status": "success",
    "startTime": "2021-08-26T17:20:31-07:00",
    "endTime": "2021-08-26T17:20:31-07:00",
    "failureMessage": "",
    "documents": [
        {
            "name": "",
            "filePath": "main.yaml",
            "status": "success",
            "description": "",
            "startTime": "2021-08-26T17:20:31-07:00",
            "endTime": "2021-08-26T17:20:31-07:00",
            "failureMessage": "",
            "phases": [
                {
                    "name": "build",
                    "status": "success",
                    "startTime": "2021-08-26T17:20:31-07:00",
                    "endTime": "2021-08-26T17:20:31-07:00",
                    "failureMessage": "",
                    "steps": [
                        {
                            "name": "ExecuteNestedDocument",
                            "status": "success",
                            "failureMessage": "",
                            "timeoutSeconds": -1,
                            "onFailure": "Abort",
                            "maxAttempts": 1,
                            "action": "ExecuteDocument",
                            "startTime": "2021-08-26T17:20:31-07:00",
                            "endTime": "2021-08-26T17:20:31-07:00",
                            "inputs": "[{\"document\":\"Sample-1.yaml\",\"document-s3-bucket-owner\":\"\",\"phases\":\"\",\"parameters\":null}]",
                            "outputs": "[{\"executedStepCount\":1,\"executionId\":\"98765f43-21ed-09cb-8a76-fedc54321098\",\"failedStepCount\":0,\"failureMessage\":\"\",\"ignoredFailedStepCount\":0,\"logUrl\":\"\",\"status\":\"success\"}]",
                            "loop": null,
                            "detailedOutput": [
                                {
                                    "executionId": "98765f43-21ed-09cb-8a76-fedc54321098",
                                    "status": "success",
                                    "startTime": "2021-08-26T17:20:31-07:00",
                                    "endTime": "2021-08-26T17:20:31-07:00",
                                    "failureMessage": "",
                                    "documents": [
                                        {
                                            "name": "",
                                            "filePath": "Sample-1.yaml",
                                            "status": "success",
                                            "description": "",
                                            "startTime": "2021-08-26T17:20:31-07:00",
                                            "endTime": "2021-08-26T17:20:31-07:00",
                                            "failureMessage": "",
                                            "phases": [
                                                {
                                                    "name": "build",
                                                    "status": "success",
                                                    "startTime": "2021-08-26T17:20:31-07:00",
                                                    "endTime": "2021-08-26T17:20:31-07:00",
                                                    "failureMessage": "",
                                                    "steps": [
                                                        {
                                                            "name": "ExecuteBashStep",
                                                            "status": "success",
                                                            "failureMessage": "",
                                                            "timeoutSeconds": 7200,
                                                            "onFailure": "Abort",
                                                            "maxAttempts": 1,
                                                            "action": "ExecuteBash",
                                                            "startTime": "2021-08-26T17:20:31-07:00",
                                                            "endTime": "2021-08-26T17:20:31-07:00",
                                                            "inputs": "[{\"commands\":[\"echo \\\"Hello World!\\\"\"]}]",
                                                            "outputs": "[{\"stdout\":\"Hello World!\"}]",
                                                            "loop": null,
                                                            "detailedOutput": null
                                                        }]
                                                }]
                                        }]
                                }]
                        }]
                
                }]
        }]
}
```

### ExecutePowerShell(Windows)
<a name="action-modules-executepowershell"></a>

**ExecutePowerShell** 작업 모듈을 사용하면 인라인 쉘 코드/명령을 사용하여 PowerShell 스크립트를 실행할 수 있습니다. 이 모듈은 Windows 플랫폼과 Windows PowerShell을 지원합니다.

명령 블록에 지정된 모든 명령/지침은 스크립트 파일(예: `input.ps1`)로 변환되며 Windows PowerShell을 사용하여 실행됩니다. 쉘 파일을 실행한 결과는 종료 코드입니다.

**ExecutePowerShell** 모듈은 쉘 명령이 종료 코드 `3010`(으)로 종료된 경우, 시스템 재시작을 처리합니다. 애플리케이션이 시작되면 다음 작업 중 하나를 수행합니다.
+ Systems Manager 에이전트가 실행하는 경우 종료 코드를 호출자에게 전달합니다. Systems Manager Agent는 [스크립트에서 관리형 인스턴스 재부팅](https://docs.aws.amazon.com/systems-manager/latest/userguide/send-commands-reboot.html)에 설명된 대로 시스템 재부팅을 처리하고 재시작을 시작한 것과 동일한 단계를 실행합니다.
+ 현재 `executionstate`(을)를 저장하고 애플리케이션을 다시 실행하도록 재시작 트리거를 구성한 다음 시스템을 재부팅합니다.

시스템을 다시 시작한 후 애플리케이션은 재시작을 시작한 단계와 동일한 단계를 실행합니다. 이 기능이 필요한 경우 동일한 쉘 명령의 여러 호출을 처리할 수 있는 idempotent 스크립트를 작성해야 합니다.


**Input**  

| 키 이름 | 설명 | 형식 | 필수 | 
| --- | --- | --- | --- | 
| commands | PowerShell 구문에 따라 실행할 지침 또는 명령 목록이 포함됩니다. 여러 줄의 YAML이 허용됩니다. | 문자열 목록 | 예. `commands` 또는 `file`(을)를 지정해야 하며, 둘 다 지정하지는 않습니다.  | 
| file | PowerShell 스크립트 파일에 대한 경로를 포함합니다. PowerShell은 -file 명령줄 인수를 사용하여 이 파일에 대해 실행됩니다. 이 경로는 .ps1 파일을 가리켜야 합니다. | 문자열 | 예. `commands` 또는 `file`(을)를 지정해야 하며, 둘 다 지정하지는 않습니다.  | 

**입력 예제: 재부팅 전과 재부팅 후**

```
name: ExitCode3010Example
description: This shows how the exit code can be used to restart a system with ExecutePowerShell
schemaVersion: 1.0
phases:
  - name: build
    steps:
      - name: RestartTrigger
        action: ExecutePowerShell
        inputs:
          commands:
            - |
              $rebootIndicator = Join-Path -Path $env:SystemDrive -ChildPath 'reboot-indicator'
              if (Test-Path -Path $rebootIndicator) {
                Write-Host 'The reboot file exists. Deleting it and exiting with success.'
                Remove-Item -Path $rebootIndicator -Force | Out-Null
                [System.Environment]::Exit(0)
              }
              Write-Host 'The reboot file does not exist. Creating it and triggering a restart.'
              New-Item -Path $rebootIndicator -ItemType File | Out-Null
              [System.Environment]::Exit(3010)
```


**출력**  

| 필드 | 설명 | 형식 | 
| --- | --- | --- | 
| stdout | 명령 실행의 표준 출력. | 문자열 | 

재부팅을 실행하고 작업 모듈의 일부로 종료 코드 `3010`(을)를 반환하면, 재부팅을 시작한 동일한 작업 모듈 단계에서 빌드가 재개됩니다. 종료 코드 없이 재부팅을 실행하면, 빌드 프로세스가 실패할 수 있습니다.

**출력 예제: 재부팅 전(문서를 통해 처음으로)**

```
{
	“stdout”: “The reboot file does not exist. Creating it and triggering a restart."
}
```

**출력 예제: 재부팅 후(문서를 통해 두 번째로)**

```
{
	“stdout”: “The reboot file exists. Deleting it and exiting with success."
}
```

## 파일 다운로드 및 업로드 모듈
<a name="action-modules-download-upload"></a>

다음 섹션에는 파일을 업로드하거나 다운로드하는 작업 모듈에 대한 세부 정보가 포함되어 있습니다.

**Topics**
+ [S3Download(Linux, Windows, macOS)](#action-modules-s3download)
+ [S3Upload(Linux, Windows, macOS)](#action-modules-s3upload)
+ [WebDownload(Linux, Windows, macOS)](#action-modules-webdownload)

### S3Download(Linux, Windows, macOS)
<a name="action-modules-s3download"></a>

`S3Download` 작업 모듈을 사용하면, Amazon S3 객체 또는 객체 집합을 `destination` 경로로 지정한 로컬 파일 또는 폴더에 다운로드할 수 있습니다. 지정된 위치에 파일이 이미 있고 `overwrite` 플래그가 true로 설정된 경우, `S3Download`(이)가 파일을 덮어씁니다.

`source` 위치는 Amazon S3의 특정 객체를 가리키거나 별표 와일드카드(`*`)와 함께 키 접두사를 사용하여 키 접두사 경로와 일치하는 객체 집합을 다운로드할 수 있습니다. `source` 위치에서 키 접두사를 지정하면 `S3Download` 작업 모듈이 접두사와 일치하는 모든 항목(파일 및 폴더 포함)을 다운로드합니다. 접두사와 일치하는 모든 항목을 다운로드할 수 있도록 키 접두사가 슬래시 뒤에 별표(`/*`)로 끝나는지 확인합니다. 예를 들어 `s3://my-bucket/my-folder/*`입니다.

다운로드 중에 지정된 키 접두사에 대한 `S3Download` 작업이 실패하는 경우, 폴더 콘텐츠는 실패 이전 상태로 롤백되지 않습니다. 대상 폴더는 장애 발생 시점의 상태로 유지됩니다.

**지원되는 사용 사례**  
`S3Download` 작업 모듈은 다음 사용 사례를 지원합니다.
+ Amazon S3 객체는 다운로드 경로에 지정된 대로 로컬 폴더에 다운로드됩니다.
+ Amazon S3 파일 경로에 키 접두사가 있는 Amazon S3 객체는 지정된 로컬 폴더로 다운로드되며, 이 폴더는 키 접두사와 일치하는 모든 Amazon S3 객체를 로컬 폴더에 반복적으로 복사합니다.

**IAM 요구 사항**  
인스턴스 프로파일에 연결하는 IAM 역할에는 `S3Download` 작업 모듈을 실행할 권한이 있어야 합니다. 다음 IAM 정책을 인스턴스 프로파일과 관련된 IAM 역할에 연결해야 합니다.
+ **단일 파일**: 버킷/객체에 대한 `s3:GetObject`(예: `arn:aws:s3:::BucketName/*`)
+ **다중 파일**: 버킷/객체에 대한 `s3:ListBucket`(예: `arn:aws:s3:::BucketName`) 및 버킷/객체에 대한 `s3:GetObject`(예: `arn:aws:s3:::BucketName/*`)


**Input**  

|  Key(키)  |  설명  |  형식  |  필수  |  기본값  | 
| --- | --- | --- | --- | --- | 
|  `source`  |  다운로드의 소스가 되는 Amazon S3 버킷입니다. 특정 객체의 경로를 지정하거나, 슬래시 다음 별표 와일드카드(`/*`)로 끝나는 키 접두사를 사용하여 키 접두사와 일치하는 객체 집합을 다운로드할 수 있습니다.  |  문자열  |  예  |  해당 사항 없음  | 
|  `destination`  |  Amazon S3 객체가 다운로드되는 로컬 경로입니다. 단일 파일을 다운로드하려면, 파일 이름을 경로의 일부로 지정해야 합니다. 예를 들어 `/myfolder/package.zip`입니다.  |  문자열  |  예  |  해당 사항 없음  | 
|  `expectedBucketOwner`  |  `source` 경로에 제공된 버킷의 예상 소유자 계정 ID입니다. 원본에 지정된 Amazon S3 버킷의 소유권을 확인하는 것이 좋습니다.  |  문자열  |  No  |  해당 사항 없음  | 
|  `overwrite`  |  true로 설정하면 지정된 로컬 경로의 대상 폴더에 같은 이름의 파일이 이미 있는 경우 다운로드 파일이 로컬 파일을 덮어씁니다. false로 설정하면 로컬 시스템의 기존 파일이 덮어써지지 않고, 작업 모듈이 실패하며 다운로드 오류가 발생합니다. 예: `Error: S3Download: File already exists and "overwrite" property for "destination" file is set to false. Cannot download.`  |  불린(Boolean)  |  아니요  |  true  | 

**참고**  
다음 예제에서는 Windows 폴더 경로를 Linux 경로로 바꿀 수 있습니다. 예를 들어, `C:\myfolder\package.zip`(을)를 `/myfolder/package.zip`(으)로 바꿀 수 있습니다.

**입력 예제: Amazon S3 객체를 로컬 파일에 복사**  
다음 예제에서는 Amazon S3 객체를 로컬 파일에 복사하는 방법을 보여 줍니다.

```
  - name: DownloadMyFile
    action: S3Download
    inputs:
      - source: s3://amzn-s3-demo-source-bucket/path/to/package.zip
        destination: C:\myfolder\package.zip
        expectedBucketOwner: 123456789022
        overwrite: false
      - source: s3://amzn-s3-demo-source-bucket/path/to/package.zip
        destination: C:\myfolder\package.zip
        expectedBucketOwner: 123456789022
        overwrite: true
      - source: s3://amzn-s3-demo-source-bucket/path/to/package.zip
        destination: C:\myfolder\package.zip
        expectedBucketOwner: 123456789022
```

**입력 예제: 키 접두사가 있는 Amazon S3 버킷의 모든 Amazon S3 객체를 로컬 폴더에 복사**  
다음 예제에서는 키 접두사가 있는 Amazon S3 버킷의 모든 Amazon S3 객체를 로컬 폴더로 복사하는 방법을 보여 줍니다. Amazon S3에는 폴더라는 개념이 없으므로, 키 접두사와 일치하는 모든 객체가 복사됩니다. 다운로드할 수 있는 최대 객체 수는 1,000개입니다.

```
  - name: MyS3DownloadKeyprefix
    action: S3Download
    maxAttempts: 3
    inputs:
      - source: s3://amzn-s3-demo-source-bucket/path/to/*
        destination: C:\myfolder\
        expectedBucketOwner: 123456789022
        overwrite: false
      - source: s3://amzn-s3-demo-source-bucket/path/to/*
        destination: C:\myfolder\
        expectedBucketOwner: 123456789022
        overwrite: true
      - source: s3://amzn-s3-demo-source-bucket/path/to/*
        destination: C:\myfolder\
        expectedBucketOwner: 123456789022
```

**출력**  
없음.

### S3Upload(Linux, Windows, macOS)
<a name="action-modules-s3upload"></a>

**S3Upload** 작업 모듈을 사용하면 원본 파일 또는 폴더에서 Amazon S3 위치로 파일을 업로드할 수 있습니다. 소스 위치에 지정된 경로에 와일드카드(`*`)를 사용하여 경로가 와일드카드 패턴과 일치하는 모든 파일을 업로드할 수 있습니다.

재귀 **S3Upload** 작업이 실패하는 경우 이미 업로드된 모든 파일은 대상 Amazon S3 버킷에 남아 있게 됩니다.

**지원되는 사용 사례**
+ 로컬 파일을 Amazon S3 객체로.
+ 폴더의 로컬 파일(와일드카드 포함)을 Amazon S3 키 접두사로.
+ 로컬 폴더(`recurse`를 `true`로 설정해야 함)를 Amazon S3 키 접두사로 복사합니다.

**IAM 요구 사항**  
인스턴스 프로파일에 연결하는 IAM 역할에는 `S3Upload` 작업 모듈을 실행할 권한이 있어야 합니다. 다음 IAM 정책을 인스턴스 프로파일과 관련된 IAM 역할에 연결해야 합니다. 정책은 대상 Amazon S3 버킷에 `s3:PutObject` 권한을 부여해야 합니다. 예: `arn:aws:s3:::BucketName/*`).


**Input**  

|  Key(키)  |  설명  |  형식  |  필수  |  기본값  | 
| --- | --- | --- | --- | --- | 
|  `source`  |  소스 파일/폴더가 시작되는 로컬 경로. `source`(은)는 별표 와일드카드(`*`)(을)를 지원합니다.  |  문자열  |  예  |  해당 사항 없음  | 
|  `destination`  |  원본 파일/폴더가 업로드되는 대상 Amazon S3 버킷의 경로입니다.  |  문자열  |  예  |  해당 사항 없음  | 
|  `recurse`  |  `true`(으)로 설정하면 **S3Upload**(을)를 재귀적으로 수행합니다.  |  문자열  |  No  |  `false`  | 
|  `expectedBucketOwner`  |  대상 경로에 지정된 Amazon S3 버킷의 예상 소유자 계정 ID입니다. 대상에 지정된 Amazon S3 버킷의 소유권을 확인하는 것이 좋습니다.  |  문자열  |  No  |  해당 사항 없음  | 

**입력 예제: 로컬 파일을 Amazon S3 객체에 복사**  
다음 예제에서는 로컬 파일을 Amazon S3 객체에 복사하는 방법을 보여 줍니다.

```
  - name: MyS3UploadFile
    action: S3Upload
    onFailure: Abort
    maxAttempts: 3
    inputs:
      - source: C:\myfolder\package.zip
        destination: s3://amzn-s3-demo-destination-bucket/path/to/package.zip
        expectedBucketOwner: 123456789022
```

**입력 예제: 키 접두사를 사용하여 로컬 폴더의 모든 파일을 Amazon S3 버킷으로 복사**  
다음 예제에서는 키 접두사를 사용하여 로컬 폴더의 모든 파일을 Amazon S3 버킷으로 복사하는 방법을 보여 줍니다. `recurse`(이)가 지정되지 않았으므로 이 예제는 하위 폴더나 해당 콘텐츠를 복사하지 않으며 기본값은 `false`입니다.

```
  - name: MyS3UploadMultipleFiles
    action: S3Upload
    onFailure: Abort
    maxAttempts: 3
    inputs:
      - source: C:\myfolder\*
        destination: s3://amzn-s3-demo-destination-bucket/path/to/
        expectedBucketOwner: 123456789022
```

**입력 예제: 모든 파일 및 폴더를 로컬 폴더에서 Amazon S3 버킷으로 재귀적으로 복사**  
다음 예제에서는 모든 파일 및 폴더를 로컬 폴더에서 키 접두사를 사용하여 Amazon S3 버킷으로 재귀적으로 복사하는 방법을 보여줍니다.

```
  - name: MyS3UploadFolder
    action: S3Upload
    onFailure: Abort
    maxAttempts: 3
    inputs:
      - source: C:\myfolder\*
        destination: s3://amzn-s3-demo-destination-bucket/path/to/
        recurse: true
        expectedBucketOwner: 123456789022
```

**출력**  
없음.

### WebDownload(Linux, Windows, macOS)
<a name="action-modules-webdownload"></a>

**WebDownload** 작업 모듈을 사용하면 HTTP/HTTPS 프로토콜을 통해 원격 위치에서 파일 및 리소스를 다운로드할 수 있습니다(*HTTPS 권장*). 다운로드 수나 크기에는 제한이 없습니다. 이 모듈은 재시도 및 지수 백오프 로직을 처리합니다.

사용자 입력에 따라 각 다운로드 작업의 성공 시도는 최대 5회까지 할당됩니다. 이러한 시도는 작업 모듈 오류와 관련된 문서 `steps`의 `maxAttempts` 필드에 지정된 시도와 다릅니다.

이 작업 모듈은 리디렉션을 묵시적으로 처리합니다. `200`을(를) 제외한 모든 HTTP 상태 코드에서 오류가 발생합니다.


**Input**  

| 키 이름 | 설명 | 형식 | 필수 | 기본값 | 
| --- | --- | --- | --- | --- | 
| source | RFC 3986 표준을 따르는 유효한 HTTP/HTTPS URL(HTTPS 권장)입니다. chaining 표현식은 허용됩니다. | 문자열 |  예  | 해당 사항 없음 | 
| destination | 로컬 시스템의 절대 또는 상대 파일이나 폴더 경로입니다. 폴더 경로는 /(으)로 끝나야 합니다. /(으)로 끝나지 않는 경우, 파일 경로로 취급됩니다. 모듈은 성공적인 다운로드를 위해 필요한 파일이나 폴더를 생성합니다. chaining 표현식은 허용됩니다. | 문자열 | 예 | 해당 사항 없음 | 
| overwrite | 활성화하면 로컬 시스템의 기존 파일을 다운로드한 파일 또는 리소스로 덮어씁니다. 활성화하지 않으면 로컬 시스템의 기존 파일을 덮어쓰지 않고, 작업 모듈이 실패하며 오류가 발생합니다. 덮어쓰기가 활성화되고 체크섬과 알고리즘이 지정된 경우, 작업 모듈은 기존 파일의 체크섬과 해시가 일치하지 않는 경우에만 파일을 다운로드합니다. | 부울 | 아니요 | true | 
| checksum | 체크섬을 지정하면, 제공된 알고리즘으로 생성된 다운로드한 파일의 해시와 비교하여 체크섬이 검사됩니다. 파일 검증을 활성화하려면, 체크섬과 알고리즘을 모두 제공해야 합니다. chaining 표현식은 허용됩니다. | 문자열 | No | 해당 사항 없음 | 
| algorithm | 체크섬을 계산하는 데 사용되는 알고리즘입니다. 옵션은 MD5, SHA1, SHA256 및 SHA512입니다. 파일 검증을 활성화하려면, 체크섬과 알고리즘을 모두 제공해야 합니다. chaining 표현식은 허용됩니다. | 문자열 | No | 해당 사항 없음 | 
| ignoreCertificateErrors | 활성화된 경우 SSL 인증서 검증이 무시됩니다. | 부울 | 아니요 | false | 


**출력**  

| 키 이름 | 설명 | 형식 | 
| --- | --- | --- | 
| destination | 다운로드한 파일 또는 리소스가 저장되는 대상 경로를 지정하는 줄 바꿈 문자로 구분된 문자열입니다. | 문자열 | 

**입력 예제: 로컬 대상으로 원격 파일 다운로드**

```
  - name: DownloadRemoteFile
    action: WebDownload
    maxAttempts: 3
    inputs:
      - source: https://testdomain/path/to/java14.zip
        destination: C:\testfolder\package.zip
```

**출력:**

```
{
	"destination": "C:\\testfolder\\package.zip"
}
```

**입력 예제: 둘 이상의 로컬 대상에 둘 이상의 원격 파일 다운로드**

```
  - name: DownloadRemoteFiles
    action: WebDownload
    maxAttempts: 3
    inputs:
      - source: https://testdomain/path/to/java14.zip
        destination: /tmp/java14_renamed.zip
      - source: https://testdomain/path/to/java14.zip
        destination: /tmp/create_new_folder_and_add_java14_as_zip/
```

**출력:**

```
{
	"destination": "/tmp/create_new_folder/java14_renamed.zip\n/tmp/create_new_folder_and_add_java14_as_zip/java14.zip"
}
```

**입력 예제: 로컬 대상을 덮어쓰지 않고 원격 파일 하나를 다운로드하고 파일 확인을 통해 다른 원격 파일을 다운로드합니다.**

```
  - name: DownloadRemoteMultipleProperties
    action: WebDownload
    maxAttempts: 3
    inputs:
      - source: https://testdomain/path/to/java14.zip
        destination: C:\create_new_folder\java14_renamed.zip
        overwrite: false
      - source: https://testdomain/path/to/java14.zip
        destination: C:\create_new_folder_and_add_java14_as_zip\
        checksum: ac68bbf921d953d1cfab916cb6120864
        algorithm: MD5
        overwrite: true
```

**출력:**

```
{
	"destination": "C:\\create_new_folder\\java14_renamed.zip\nC:\\create_new_folder_and_add_java14_as_zip\\java14.zip"
}
```

**입력 예제: 원격 파일 다운로드 및 SSL 인증 검증 무시**

```
  - name: DownloadRemoteIgnoreValidation
    action: WebDownload
    maxAttempts: 3
    inputs:
      - source: https://www.bad-ssl.com/resource
        destination: /tmp/downloads/
        ignoreCertificateErrors: true
```

**출력:**

```
{
	"destination": "/tmp/downloads/resource"
}
```

## 파일 시스템 작업 모듈
<a name="action-modules-file-system-operations"></a>

다음 섹션에는 파일 시스템 작업을 수행하는 작업 모듈에 대한 세부 정보가 포함되어 있습니다.

**Topics**
+ [AppendFile(Linux, Windows, macOS)](#action-modules-appendfile)
+ [CopyFile(Linux, Windows, macOS)](#action-modules-copyfile)
+ [CopyFolder(Linux, Windows, macOS)](#action-modules-copyfolder)
+ [CreateFile(Linux, Windows, macOS)](#action-modules-createfile)
+ [CreateFolder(Linux, Windows, macOS)](#action-modules-createfolder)
+ [CreateSymlink(Linux, Windows, macOS)](#action-modules-createsymlink)
+ [DeleteFile(Linux, Windows, macOS)](#action-modules-deletefile)
+ [DeleteFolder(Linux, Windows, macOS)](#action-modules-deletefolder)
+ [ListFiles(Linux, Windows, macOS)](#action-modules-listfiles)
+ [MoveFile(Linux, Windows, macOS)](#action-modules-movefile)
+ [MoveFolder(Linux, Windows, macOS)](#action-modules-movefolder)
+ [ReadFile(Linux, Windows, macOS)](#action-modules-readfile)
+ [SetFileEncoding(Linux, Windows, macOS)](#action-modules-setfileencoding)
+ [SetFileOwner(Linux, Windows, macOS)](#action-modules-setfileowner)
+ [SetFolderOwner(Linux, Windows, macOS)](#action-modules-setfolderowner)
+ [SetFilePermissions(Linux, Windows, macOS)](#action-modules-setfilepermissions)
+ [SetFolderPermissions(Linux, Windows, macOS)](#action-modules-setfolderpermissions)

### AppendFile(Linux, Windows, macOS)
<a name="action-modules-appendfile"></a>

**AppendFile** 작업 모듈은 지정된 콘텐츠를 파일의 기존 내용에 추가합니다.

파일 인코딩 값이 기본 인코딩(`utf-8`) 값과 다른 경우, `encoding` 옵션을 사용하여 파일 인코딩 값을 지정할 수 있습니다. 기본적으로 `utf-16` 및 `utf-32`(은)는 리틀 엔디안 인코딩을 사용하는 것으로 간주됩니다.

다음과 같은 상황이 발생하면 작업 모듈이 오류를 반환합니다.
+ 지정된 파일이 런타임에 존재하지 않습니다.
+ 파일 내용을 수정할 수 있는 쓰기 권한이 없습니다.
+ 파일 작업 중에 모듈에서 오류가 발생했습니다.


**Input**  

| 키 이름 | 설명 | 형식 | 필수 | 기본값  | 허용되는 값 | 모든 플랫폼에서 지원됩니다. | 
| --- | --- | --- | --- | --- | --- | --- | 
| path | 파일 경로. | 문자열 | 예 | 해당 사항 없음 | 해당 사항 없음 | 예 | 
| content | 파일에 추가할 콘텐츠입니다. | 문자열 | No | 빈 문자열 | 해당 사항 없음 | 예 | 
| encoding | 인코딩 표준입니다. | 문자열 | No | utf8 | utf8, utf-8, utf16, utf-16, utf16-LE, utf-16-LE, utf16-BE, utf-16-BE, utf32, utf-32, utf32-LE, utf-32-LE, utf32-BE 및  utf-32-BE. 인코딩 옵션 값은 대/소문자를 구분하지 않습니다. | 예 | 

**입력 예제: 인코딩 없이 파일 추가(Linux)**

```
  - name: AppendingFileWithOutEncodingLinux
    action: AppendFile
    inputs:
      - path: ./Sample.txt
        content: "The string to be appended to the file"
```

**입력 예제: 인코딩 없이 파일 추가(Windows)**

```
  - name: AppendingFileWithOutEncodingWindows
    action: AppendFile
    inputs:
      - path: C:\MyFolder\MyFile.txt
        content: "The string to be appended to the file"
```

**입력 예제: 인코딩으로 파일 추가(Linux)**

```
  - name: AppendingFileWithEncodingLinux
    action: AppendFile
    inputs:
      - path: /FolderName/SampleFile.txt
        content: "The string to be appended to the file"
        encoding: UTF-32
```

**입력 예제: 인코딩으로 파일 추가(Windows)**

```
  - name: AppendingFileWithEncodingWindows
    action: AppendFile
    inputs:
      - path: C:\MyFolderName\SampleFile.txt
        content: "The string to be appended to the file"
        encoding: UTF-32
```

**입력 예제: 빈 문자열로 파일 추가(Linux)**

```
  - name: AppendingEmptyStringLinux
    action: AppendFile
    inputs:
      - path: /FolderName/SampleFile.txt
```

**입력 예제: 빈 문자열로 파일 추가(Windows)**

```
  - name: AppendingEmptyStringWindows
    action: AppendFile
    inputs:
      - path: C:\MyFolderName\SampleFile.txt
```

**출력**  
없음.

### CopyFile(Linux, Windows, macOS)
<a name="action-modules-copyfile"></a>

**CopyFile** 작업 모듈은 지정된 소스의 파일을 지정된 대상으로 복사합니다. 기본적으로 모듈은 런타임 시 대상 폴더가 없는 경우 대상 폴더를 재귀적으로 만듭니다.

지정된 이름의 파일이 지정된 폴더에 이미 있는 경우, 작업 모듈은 기본적으로 기존 파일을 덮어씁니다. 덮어쓰기 옵션을 `false`(으)로 설정하여 이 기본 동작을 재정의할 수 있습니다. 덮어쓰기 옵션이 `false`(으)로 설정되어 있고 지정된 위치에 지정된 이름을 가진 파일이 이미 있는 경우, 작업 모듈은 오류를 반환합니다. 이 옵션은 기본적으로 덮어쓰는 Linux의 `cp` 명령과 동일하게 작동합니다.

소스 파일 이름에는 와일드카드(`*`)가 포함될 수 있습니다. 와일드카드 문자는 마지막 파일 경로 구분자(`/` 또는 `\`) 뒤에만 사용할 수 있습니다. 와일드카드 문자가 소스 파일 이름에 포함된 경우, 와일드카드와 일치하는 모든 파일이 대상 폴더에 복사됩니다. 와일드카드 문자를 사용하여 둘 이상의 파일을 이동하려는 경우, `destination` 옵션 입력 시 대상 입력이 폴더임을 나타내는 파일 경로 구분자(`/` 또는 `\`)로 끝나야 합니다.

대상 파일 이름이 원본 파일 이름과 다른 경우, `destination` 옵션을 사용하여 대상 파일 이름을 지정할 수 있습니다. 대상 파일 이름을 지정하지 않으면, 원본 파일의 이름이 대상 파일을 만드는 데 사용됩니다. 마지막 파일 경로 구분자(`/` 또는 `\`) 뒤에 오는 모든 텍스트는 파일 이름으로 취급됩니다. 소스 파일과 같은 파일 이름을 사용하려면, `destination` 옵션 입력 시 파일 경로 구분자(`/` 또는 `\`)로 끝나야 합니다.

다음과 같은 상황이 발생하면 작업 모듈이 오류를 반환합니다.
+ 지정된 폴더에 파일을 생성할 수 있는 권한이 없습니다.
+ 소스 파일이 런타임에 존재하지 않습니다.
+ 지정된 파일 이름을 가진 폴더가 이미 있으며 `overwrite` 옵션이 `false`(으)로 설정되어 있습니다.
+ 작업 모듈에서 작업을 수행하는 동안 오류가 발생했습니다.


**Input**  

| 키 이름 | 설명 | 형식 | 필수 | 기본값  | 허용되는 값 | 모든 플랫폼에서 지원됩니다. | 
| --- | --- | --- | --- | --- | --- | --- | 
| source | 소스 파일 경로입니다. | 문자열 | 예 | 해당 사항 없음 | 해당 사항 없음 | 예 | 
| destination | 대상 파일 경로입니다. | 문자열 | 예 | 해당 사항 없음 | 해당 사항 없음 | 예 | 
| overwrite | false로 설정하면 지정된 위치에 지정된 이름을 가진 파일이 이미 있는 경우 대상 파일이 교체되지 않습니다. | 부울 | 아니요 | true | 해당 사항 없음 | 예 | 

**입력 예제: 파일 복사(Linux)**

```
  - name: CopyingAFileLinux
    action: CopyFile
    inputs:
      - source: /Sample/MyFolder/Sample.txt
        destination: /MyFolder/destinationFile.txt
```

**입력 예제: 파일 복사(Windows)**

```
  - name: CopyingAFileWindows
    action: CopyFile
    inputs:
      - source: C:\MyFolder\Sample.txt
        destination: C:\MyFolder\destinationFile.txt
```

**입력 예제: 소스 파일 이름을 사용하여 파일 복사(Linux)**

```
  - name: CopyingFileWithSourceFileNameLinux
    action: CopyFile
    inputs:
      - source: /Sample/MyFolder/Sample.txt
        destination: /MyFolder/
```

**입력 예제: 소스 파일 이름을 사용하여 파일 복사(Windows)**

```
  - name: CopyingFileWithSourceFileNameWindows
    action: CopyFile
    inputs:
      - source: C:\Sample\MyFolder\Sample.txt
        destination: C:\MyFolder\
```

**입력 예제: 와일드카드 문자를 사용하여 파일 복사(Linux)**

```
  - name: CopyingFilesWithWildCardLinux
    action: CopyFile
    inputs:
      - source: /Sample/MyFolder/Sample*
        destination: /MyFolder/
```

**입력 예제: 와일드카드 문자를 사용하여 파일 복사(Windows)**

```
  - name: CopyingFilesWithWildCardWindows
    action: CopyFile
    inputs:
      - source: C:\Sample\MyFolder\Sample*
        destination: C:\MyFolder\
```

**입력 예제: 덮어쓰지 않고 파일 복사(Linux)**

```
  - name: CopyingFilesWithoutOverwriteLinux
    action: CopyFile
    inputs:
      - source: /Sample/MyFolder/Sample.txt
        destination: /MyFolder/destinationFile.txt
        overwrite: false
```

**입력 예제: 덮어쓰지 않고 파일 복사(Windows)**

```
  - name: CopyingFilesWithoutOverwriteWindows
    action: CopyFile
    inputs:
      - source: C:\Sample\MyFolder\Sample.txt
        destination: C:\MyFolder\destinationFile.txt
        overwrite: false
```

**출력**  
없음.

### CopyFolder(Linux, Windows, macOS)
<a name="action-modules-copyfolder"></a>

**CopyFolder** 작업 모듈은 지정된 소스의 폴더를 지정된 대상으로 복사합니다. `source` 옵션에 대한 입력은 복사할 폴더이고, `destination` 옵션에 대한 입력은 소스 폴더의 콘텐츠가 복사되는 폴더입니다. 기본적으로 모듈은 런타임 시 대상 폴더가 없는 경우 대상 폴더를 재귀적으로 만듭니다.

지정된 이름의 폴더가 지정된 폴더에 이미 있는 경우, 작업 모듈은 기본적으로 기존 폴더를 덮어씁니다. 덮어쓰기 옵션을 `false`(으)로 설정하여 이 기본 동작을 재정의할 수 있습니다. 덮어쓰기 옵션이 `false`(으)로 설정되어 있고 지정된 위치에 지정된 이름을 가진 폴더가 이미 있는 경우, 작업 모듈은 오류를 반환합니다.

소스 폴더 이름에는 와일드카드(`*`)가 포함될 수 있습니다. 와일드카드 문자는 마지막 파일 경로 구분자(`/` 또는 `\`) 뒤에만 사용할 수 있습니다. 와일드카드 문자가 소스 폴더 이름에 포함된 경우, 와일드카드와 일치하는 모든 폴더가 대상 폴더에 복사됩니다. 와일드카드 문자를 사용하여 폴더를 두 개 이상 복사하려는 경우, `destination` 옵션 입력 시 대상 입력이 폴더임을 나타내는 파일 경로 구분자(`/` 또는 `\`)로 끝나야 합니다.

대상 폴더 이름이 소스 폴더 이름과 다른 경우, `destination` 옵션을 사용하여 대상 폴더 이름을 지정할 수 있습니다. 대상 폴더 이름을 지정하지 않으면, 원본 폴더의 이름이 대상 폴더를 만드는 데 사용됩니다. 마지막 파일 경로 구분자(`/` 또는 `\`) 뒤에 오는 모든 텍스트는 폴더 이름으로 취급됩니다. 소스 폴더와 같은 폴더 이름을 사용하려면, `destination` 옵션 입력 시 파일 경로 구분자(`/` 또는 `\`)로 끝나야 합니다.

다음과 같은 상황이 발생하면 작업 모듈이 오류를 반환합니다.
+ 지정된 폴더에 폴더를 생성할 수 있는 권한이 없습니다.
+ 소스 폴더가 런타임에 존재하지 않습니다.
+ 지정된 폴더 이름을 가진 폴더가 이미 있으며 `overwrite` 옵션이 `false`(으)로 설정되어 있습니다.
+ 작업 모듈에서 작업을 수행하는 동안 오류가 발생했습니다.


**Input**  

| 키 이름 | 설명 | 형식 | 필수 | 기본값  | 허용되는 값 | 모든 플랫폼에서 지원됩니다. | 
| --- | --- | --- | --- | --- | --- | --- | 
| source | 소스 폴더 경로입니다. | 문자열 | 예 | 해당 사항 없음 | 해당 사항 없음 | 예 | 
| destination | 대상 폴더 경로입니다. | 문자열 | 예 | 해당 사항 없음 | 해당 사항 없음 | 예 | 
| overwrite | false로 설정하면 지정된 위치에 지정된 이름을 가진 폴더가 이미 있는 경우 대상 폴더가 바뀌지 않습니다. | 부울 | 아니요 | true | 해당 사항 없음 | 예 | 

**입력 예제: 폴더 복사(Linux)**

```
  - name: CopyingAFolderLinux
    action: CopyFolder
    inputs:
      - source: /Sample/MyFolder/SampleFolder
        destination: /MyFolder/destinationFolder
```

**입력 예제: 폴더 복사(Windows)**

```
  - name: CopyingAFolderWindows
    action: CopyFolder
    inputs:
      - source: C:\Sample\MyFolder\SampleFolder
        destination: C:\MyFolder\destinationFolder
```

**입력 예제: 소스 폴더 이름을 사용하여 폴더 복사(Linux)**

```
  - name: CopyingFolderSourceFolderNameLinux
    action: CopyFolder
    inputs:
      - source: /Sample/MyFolder/SourceFolder
        destination: /MyFolder/
```

**입력 예제: 소스 폴더 이름을 사용하여 폴더 복사(Windows)**

```
  - name: CopyingFolderSourceFolderNameWindows
    action: CopyFolder
    inputs:
      - source: C:\Sample\MyFolder\SampleFolder
        destination: C:\MyFolder\
```

**입력 예제: 와일드카드 문자를 사용하여 폴더 복사(Linux)**

```
  - name: CopyingFoldersWithWildCardLinux
    action: CopyFolder
    inputs:
      - source: /Sample/MyFolder/Sample*
        destination: /MyFolder/
```

**입력 예제: 와일드카드 문자를 사용하여 폴더 복사(Windows)**

```
  - name: CopyingFoldersWithWildCardWindows
    action: CopyFolder
    inputs:
      - source: C:\Sample\MyFolder\Sample*
        destination: C:\MyFolder\
```

**입력 예제: 덮어쓰지 않고 폴더 복사(Linux)**

```
  - name: CopyingFoldersWithoutOverwriteLinux
    action: CopyFolder
    inputs:
      - source: /Sample/MyFolder/SourceFolder
        destination: /MyFolder/destinationFolder
        overwrite: false
```

**입력 예제: 덮어쓰지 않고 폴더 복사(Windows)**

```
  - name: CopyingFoldersWithoutOverwrite
    action: CopyFolder
    inputs:
      - source: C:\Sample\MyFolder\SourceFolder
        destination: C:\MyFolder\destinationFolder
        overwrite: false
```

**출력**  
없음.

### CreateFile(Linux, Windows, macOS)
<a name="action-modules-createfile"></a>

**CreateFile** 작업 모듈은 지정된 위치에 파일을 만듭니다. 기본적으로 필요한 경우, 모듈은 상위 폴더를 반복적으로 생성하기도 합니다.

파일이 지정된 폴더에 이미 있는 경우, 작업 모듈은 기본적으로 기존 파일을 잘라내거나 덮어씁니다. 덮어쓰기 옵션을 `false`(으)로 설정하여 이 기본 동작을 재정의할 수 있습니다. 덮어쓰기 옵션이 `false`(으)로 설정되어 있고 지정된 위치에 지정된 이름을 가진 파일이 이미 있는 경우, 작업 모듈은 오류를 반환합니다.

파일 인코딩 값이 기본 인코딩(`utf-8`) 값과 다른 경우, `encoding` 옵션을 사용하여 파일 인코딩 값을 지정할 수 있습니다. 기본적으로 `utf-16` 및 `utf-32`(은)는 리틀 엔디안 인코딩을 사용하는 것으로 간주됩니다.

`owner`, `group` 및 `permissions`(은)는 선택적 입력 사항입니다. `permissions`의 입력은 문자열 값이어야 합니다. 제공하지 않을 경우 파일은 기본값으로 생성됩니다. Windows 플랫폼에서는 이러한 옵션이 지원되지 않습니다. 이 작업 모듈은 Windows 플랫폼에서 `owner`, `group` 및 `permissions` 옵션을 사용하는 경우 검증하고 오류를 반환합니다.

이 작업 모듈은 운영 체제의 `umask` 기본값으로 정의된 권한을 가진 파일을 만들 수 있습니다. 기본값을 재정의하려면 `umask` 값을 설정해야 합니다.

다음과 같은 상황이 발생하면 작업 모듈이 오류를 반환합니다.
+ 지정된 상위 폴더에 파일이나 폴더를 만들 권한이 없습니다.
+ 작업 모듈에서 작업을 수행하는 동안 오류가 발생했습니다.


**Input**  

| 키 이름 | 설명 | 형식 | 필수 | 기본값  | 허용되는 값 | 모든 플랫폼에서 지원됩니다. | 
| --- | --- | --- | --- | --- | --- | --- | 
| path | 파일 경로. | 문자열 | 예 | 해당 사항 없음 | 해당 사항 없음 | 예 | 
| content | 파일의 텍스트 콘텐츠입니다. | 문자열 | No | 해당 사항 없음 | 해당 사항 없음 | 예 | 
| encoding | 인코딩 표준입니다. | 문자열 | No | utf8 | utf8, utf-8, utf16, utf-16, utf16-LE, utf-16-LE, utf16-BE, utf-16-BE, utf32, utf-32, utf32-LE, utf-32-LE, utf32-BE 및  utf-32-BE. 인코딩 옵션 값은 대/소문자를 구분하지 않습니다. | 예 | 
| owner | 사용자 이름 또는 ID입니다. | 문자열 | No | 해당 사항 없음 | 해당 사항 없음 | Windows에서 지원되지 않습니다. | 
| group | 그룹 이름 또는 ID입니다. | 문자열 | No | 현재 사용자입니다. | 해당 사항 없음 | Windows에서 지원되지 않습니다. | 
| permissions | 파일 권한입니다. | 문자열 | No | 0666 | 해당 사항 없음 | Windows에서 지원되지 않습니다. | 
| overwrite | 지정된 파일의 이름이 이미 있는 경우, 이 값을 false(으)로 설정하면 기본적으로 파일이 잘리거나 덮어쓰기 되지 않도록 할 수 있습니다. | 부울 | 아니요 | true | 해당 사항 없음 | 예 | 

**입력 예제: 덮어쓰지 않고 파일 생성(Linux)**

```
  - name: CreatingFileWithoutOverwriteLinux
    action: CreateFile
    inputs:
      - path: /home/UserName/Sample.txt
        content: The text content of the sample file.
        overwrite: false
```

**입력 예제: 덮어쓰지 않고 파일 생성(Windows)**

```
  - name: CreatingFileWithoutOverwriteWindows
    action: CreateFile
    inputs:
      - path: C:\Temp\Sample.txt
        content: The text content of the sample file.
        overwrite: false
```

**입력 예제: 파일 속성이 있는 파일 생성**

```
  - name: CreatingFileWithFileProperties
    action: CreateFile
    inputs:
      - path: SampleFolder/Sample.txt
        content: The text content of the sample file.
        encoding: UTF-16
        owner: Ubuntu
        group: UbuntuGroup
        permissions: 0777
     - path: SampleFolder/SampleFile.txt
        permissions: 755
      - path: SampleFolder/TextFile.txt
        encoding: UTF-16
        owner: root
        group: rootUserGroup
```

**입력 예제: 파일 속성이 없는 파일 생성**

```
  - name: CreatingFileWithoutFileProperties
    action: CreateFile
    inputs:
      - path: ./Sample.txt
      - path: Sample1.txt
```

**입력 예제: Linux 정리 스크립트에서 섹션을 건너뛰기 위한 빈 파일 생성**

```
  - name: CreateSkipCleanupfile
    action: CreateFile
    inputs:
      - path: <skip section file name>
```

자세한 내용은 [Linux 정리 스크립트를 오버라이드합니다.](security-best-practices.md#override-linux-cleanup-script) 섹션을 참조하세요.

**출력**  
없음.

### CreateFolder(Linux, Windows, macOS)
<a name="action-modules-createfolder"></a>

**CreateFolder** 작업 모듈은 지정된 위치에 폴더를 생성합니다. 기본적으로 필요한 경우, 모듈은 상위 폴더를 반복적으로 생성하기도 합니다.

폴더가 지정된 폴더에 이미 있는 경우, 작업 모듈은 기본적으로 기존 폴더를 잘라내거나 덮어씁니다. 덮어쓰기 옵션을 `false`(으)로 설정하여 이 기본 동작을 재정의할 수 있습니다. 덮어쓰기 옵션이 `false`(으)로 설정되어 있고 지정된 위치에 지정된 이름을 가진 폴더가 이미 있는 경우, 작업 모듈은 오류를 반환합니다.

`owner`, `group` 및 `permissions`(은)는 선택적 입력 사항입니다. `permissions`의 입력은 문자열 값이어야 합니다. Windows 플랫폼에서는 이러한 옵션이 지원되지 않습니다. 이 작업 모듈은 Windows 플랫폼에서 `owner`, `group` 및 `permissions` 옵션을 사용하는 경우 검증하고 오류를 반환합니다.

이 작업 모듈은 운영 체제의 `umask` 기본값으로 정의된 권한을 가진 폴더를 만들 수 있습니다. 기본값을 재정의하려면 `umask` 값을 설정해야 합니다.

다음과 같은 상황이 발생하면 작업 모듈이 오류를 반환합니다.
+ 지정된 위치에 폴더를 생성할 수 있는 권한이 없습니다.
+ 작업 모듈에서 작업을 수행하는 동안 오류가 발생했습니다.


**Input**  

| 키 이름 | 설명 | 형식 | 필수 | 기본값  | 허용되는 값 | 모든 플랫폼에서 지원됩니다. | 
| --- | --- | --- | --- | --- | --- | --- | 
| path | 폴더 경로입니다. | 문자열 | 예 | 해당 사항 없음 | 해당 사항 없음 | 예 | 
| owner | 사용자 이름 또는 ID입니다. | 문자열 | No | 현재 사용자입니다. | 해당 사항 없음 | Windows에서 지원되지 않습니다. | 
| group | 그룹 이름 또는 ID입니다. | 문자열 | No | 현재 사용자의 그룹입니다. | 해당 사항 없음 | Windows에서 지원되지 않습니다. | 
| permissions | 폴더 권한입니다. | 문자열 | No | 0777 | 해당 사항 없음 | Windows에서 지원되지 않습니다. | 
| overwrite | 지정된 파일의 이름이 이미 있는 경우, 이 값을 false(으)로 설정하면 기본적으로 파일이 잘리거나 덮어쓰기 되지 않도록 할 수 있습니다. | 부울 | 아니요 | true | 해당 사항 없음 | 예 | 

**입력 예제: 폴더 생성(Linux)**

```
  - name: CreatingFolderLinux
    action: CreateFolder
    inputs:
      - path: /Sample/MyFolder/
```

**입력 예제: 폴더 생성(Windows)**

```
  - name: CreatingFolderWindows
    action: CreateFolder
    inputs:
      - path: C:\MyFolder
```

**입력 예제: 폴더 속성을 지정하는 폴더 생성**

```
  - name: CreatingFolderWithFolderProperties
    action: CreateFolder
    inputs:
      - path: /Sample/MyFolder/Sample/
        owner: SampleOwnerName
        group: SampleGroupName
        permissions: 0777
      - path: /Sample/MyFolder/SampleFoler/
        permissions: 777
```

**입력 예제: 기존 폴더를 덮어쓰는 폴더가 있는 경우 해당 폴더를 생성합니다.**

```
  - name: CreatingFolderWithOverwrite
    action: CreateFolder
    inputs:
      - path: /Sample/MyFolder/Sample/
        overwrite: true
```

**출력**  
없음.

### CreateSymlink(Linux, Windows, macOS)
<a name="action-modules-createsymlink"></a>

**CreateSymlink** 작업 모듈은 심볼 링크 또는 다른 파일에 대한 참조가 포함된 파일을 생성합니다. 이 모듈은 Windows 플랫폼에서 지원되지 않습니다.

`path` 및 `target` 옵션의 입력은 절대 경로이거나 상대 경로일 수 있습니다. `path` 옵션의 입력이 상대 경로인 경우, 링크를 만들 때 절대 경로로 대체됩니다.

기본적으로 지정된 이름의 링크가 지정된 폴더에 이미 있는 경우, 작업 모듈은 오류를 반환합니다. `force` 옵션을 `true`(으)로 설정하여 이 기본 동작을 재정의할 수 있습니다. `force` 옵션을 `true`(으)로 설정하면 모듈이 기존 링크를 덮어씁니다.

상위 폴더가 없는 경우, 작업 모듈은 기본적으로 폴더를 반복적으로 만듭니다.

다음과 같은 상황이 발생하면 작업 모듈이 오류를 반환합니다.
+ 대상 파일이 런타임에 존재하지 않습니다.
+ 지정된 이름을 가진 비 심볼 링크 파일이 이미 있습니다.
+ 작업 모듈에서 작업을 수행하는 동안 오류가 발생했습니다.


**Input**  

| 키 이름 | 설명 | 형식 | 필수 | 기본값  | 허용되는 값 | 모든 플랫폼에서 지원됩니다. | 
| --- | --- | --- | --- | --- | --- | --- | 
| path | 파일 경로. | 문자열 | 예 | 해당 사항 없음 | 해당 사항 없음 | Windows에서 지원되지 않습니다. | 
| target | 심볼 링크가 가리키는 대상 파일 경로입니다. | 문자열 | 예 | 해당 사항 없음 | 해당 사항 없음 | Windows에서 지원되지 않습니다. | 
| force | 같은 이름의 링크가 이미 있는 경우 링크를 강제로 생성합니다. | 부울 | 아니요 | false | 해당 사항 없음 | Windows에서 지원되지 않습니다. | 

**입력 예제: 링크 생성을 강제하는 심볼 링크 생성**

```
  - name: CreatingSymbolicLinkWithForce
    action: CreateSymlink
    inputs:
      - path: /Folder2/Symboliclink.txt
        target: /Folder/Sample.txt
        force: true
```

**입력 예제: 링크 생성을 강제하지 않는 심볼 링크 생성**

```
  - name: CreatingSymbolicLinkWithOutForce
    action: CreateSymlink
    inputs:
      - path: Symboliclink.txt
        target: /Folder/Sample.txt
```

**출력**  
없음.

### DeleteFile(Linux, Windows, macOS)
<a name="action-modules-deletefile"></a>

**DeleteFile** 작업 모듈은 지정된 위치에 있는 파일을 하나 또는 여러 개 삭제합니다.

`path`의 입력은 유효한 파일 경로이거나 파일 이름에 와일드카드 문자(`*`)가 포함된 파일 경로여야 합니다. 파일 이름에 와일드카드 문자를 지정하면 동일한 폴더 내에서 와일드카드와 일치하는 모든 파일이 삭제됩니다.

다음과 같은 상황이 발생하면 작업 모듈이 오류를 반환합니다.
+ 삭제 작업을 수행할 수 있는 권한이 없습니다.
+ 작업 모듈에서 작업을 수행하는 동안 오류가 발생했습니다.


**Input**  

| 키 이름 | 설명 | 형식 | 필수 | 기본값  | 허용되는 값 | 모든 플랫폼에서 지원됩니다. | 
| --- | --- | --- | --- | --- | --- | --- | 
| path | 파일 경로. | 문자열 | 예 | 해당 사항 없음 | 해당 사항 없음 | 예 | 

**입력 예제: 단일 파일 삭제(Linux)**

```
  - name: DeletingSingleFileLinux
    action: DeleteFile
    inputs:
      - path: /SampleFolder/MyFolder/Sample.txt
```

**입력 예제: 단일 파일 삭제(Windows)**

```
  - name: DeletingSingleFileWindows
    action: DeleteFile
    inputs:
      - path: C:\SampleFolder\MyFolder\Sample.txt
```

**입력 예제: ‘log’로 끝나는 파일 삭제(Linux)**

```
  - name: DeletingFileEndingWithLogLinux
    action: DeleteFile
    inputs:
      - path: /SampleFolder/MyFolder/*log
```

**입력 예제: ‘log’로 끝나는 파일 삭제(Windows)**

```
  - name: DeletingFileEndingWithLogWindows
    action: DeleteFile
    inputs:
      - path: C:\SampleFolder\MyFolder\*log
```

**입력 예제: 지정된 폴더의 모든 파일 삭제(Linux)**

```
  - name: DeletingAllFilesInAFolderLinux
    action: DeleteFile
    inputs:
      - path: /SampleFolder/MyFolder/*
```

**입력 예제: 지정된 폴더의 모든 파일 삭제(Windows)**

```
  - name: DeletingAllFilesInAFolderWindows
    action: DeleteFile
    inputs:
      - path: C:\SampleFolder\MyFolder\*
```

**출력**  
없음.

### DeleteFolder(Linux, Windows, macOS)
<a name="action-modules-deletefolder"></a>

**DeleteFolder** 작업 모듈은 폴더를 삭제합니다.

폴더가 비어 있지 않은 경우, 폴더와 해당 내용을 제거하려면 `force` 옵션을 `true`로 설정해야 합니다. `force` 옵션을 `true`(으)로 설정하지 않은 상태에서 삭제하려는 폴더가 비어 있지 않으면, 작업 모듈에서 오류를 반환합니다. `force` 옵션의 기본값은 `false`입니다.

다음과 같은 상황이 발생하면 작업 모듈이 오류를 반환합니다.
+ 삭제 작업을 수행할 수 있는 권한이 없습니다.
+ 작업 모듈에서 작업을 수행하는 동안 오류가 발생했습니다.


**Input**  

| 키 이름 | 설명 | 형식 | 필수 | 기본값  | 허용되는 값 | 모든 플랫폼에서 지원됩니다. | 
| --- | --- | --- | --- | --- | --- | --- | 
| path | 폴더 경로입니다. | 문자열 | 예 | 해당 사항 없음 | 해당 사항 없음 | 예 | 
| force | 폴더가 비어 있는지 여부에 관계없이 폴더를 제거합니다. | 부울 | 아니요 | false | 해당 사항 없음 | 예 | 

**입력 예제: `force` 옵션을 사용하여 비어 있지 않은 폴더 삭제(Linux)** 

```
  - name: DeletingFolderWithForceOptionLinux
    action: DeleteFolder
    inputs:
      - path: /Sample/MyFolder/Sample/
        force: true
```

**입력 예제: `force` 옵션을 사용하여 비어 있지 않은 폴더 삭제(Windows)** 

```
  - name: DeletingFolderWithForceOptionWindows
    action: DeleteFolder
    inputs:
      - path: C:\Sample\MyFolder\Sample\
        force: true
```

**입력 예제: 폴더 삭제(Linux)** 

```
  - name: DeletingFolderWithOutForceLinux
    action: DeleteFolder
    inputs:
      - path: /Sample/MyFolder/Sample/
```

**입력 예제: 폴더 삭제(Windows)** 

```
  - name: DeletingFolderWithOutForce
    action: DeleteFolder
    inputs:
      - path: C:\Sample\MyFolder\Sample\
```

**출력**  
없음.

### ListFiles(Linux, Windows, macOS)
<a name="action-modules-listfiles"></a>

**ListFiles** 작업 모듈은 지정된 폴더의 파일을 나열합니다. 재귀 옵션을 `true`(으)로 설정하면, 하위 폴더의 파일이 나열됩니다. 이 모듈은 기본적으로 하위 폴더의 파일을 나열하지 않습니다.

지정된 패턴과 일치하는 이름을 가진 모든 파일을 나열하려면 `fileNamePattern` 옵션을 사용하여 패턴을 제공하십시오. `fileNamePattern` 옵션에는 와일드카드(`*`) 값을 적용할 수 있습니다. `fileNamePattern`(이)가 제공되면 지정된 파일 이름 형식과 일치하는 모든 파일이 반환됩니다.

다음과 같은 상황이 발생하면 작업 모듈이 오류를 반환합니다.
+ 지정된 폴더가 런타임에 존재하지 않습니다.
+ 지정된 상위 폴더에 파일이나 폴더를 만들 권한이 없습니다.
+ 작업 모듈에서 작업을 수행하는 동안 오류가 발생했습니다.


**Input**  

| 키 이름 | 설명 | 형식 | 필수 | 기본값  | 허용되는 값 | 모든 플랫폼에서 지원됩니다. | 
| --- | --- | --- | --- | --- | --- | --- | 
| path | 폴더 경로입니다. | 문자열 | 예 | 해당 사항 없음 | 해당 사항 없음 | 예 | 
| fileNamePattern | 패턴과 일치하는 이름을 가진 모든 파일을 나열하기 위해 일치시킬 패턴입니다. | 문자열 | No | 해당 사항 없음 | 해당 사항 없음 | 예 | 
| recursive | 폴더의 파일을 재귀적으로 나열합니다. | 부울 | 아니요 | false | 해당 사항 없음 | 예 | 

**입력 예제: 지정된 폴더의 파일 나열(Linux)**

```
  - name: ListingFilesInSampleFolderLinux
    action: ListFiles
    inputs:
      - path: /Sample/MyFolder/Sample
```

**입력 예제: 지정된 폴더의 파일 나열(Windows)**

```
  - name: ListingFilesInSampleFolderWindows
    action: ListFiles
    inputs:
      - path: C:\Sample\MyFolder\Sample
```

**입력 예제: ‘log’로 끝나는 파일 나열(Linux)**

```
  - name: ListingFilesWithEndingWithLogLinux
    action: ListFiles
    inputs:
      - path: /Sample/MyFolder/
        fileNamePattern: *log
```

**입력 예제: ‘log’로 끝나는 파일 나열(Windows)**

```
  - name: ListingFilesWithEndingWithLogWindows
    action: ListFiles
    inputs:
      - path: C:\Sample\MyFolder\
        fileNamePattern: *log
```

**입력 예제: 파일을 재귀적으로 나열**

```
  - name: ListingFilesRecursively
    action: ListFiles
    inputs:
      - path: /Sample/MyFolder/
        recursive: true
```


**출력**  

| 키 이름 | 설명 | 형식 | 
| --- | --- | --- | 
| files | 파일 목록입니다. | 문자열 | 

**출력 예제**

```
{
	"files": "/sample1.txt,/sample2.txt,/sample3.txt"
}
```

### MoveFile(Linux, Windows, macOS)
<a name="action-modules-movefile"></a>

**MoveFile** 작업 모듈은 파일을 지정된 소스에서 지정된 대상으로 이동합니다.

파일이 지정된 폴더에 이미 있는 경우, 작업 모듈은 기본적으로 기존 파일을 덮어씁니다. 덮어쓰기 옵션을 `false`(으)로 설정하여 이 기본 동작을 재정의할 수 있습니다. 덮어쓰기 옵션이 `false`(으)로 설정되어 있고 지정된 위치에 지정된 이름을 가진 파일이 이미 있는 경우, 작업 모듈은 오류를 반환합니다. 이 옵션은 기본적으로 덮어쓰는 Linux의 `mv` 명령과 동일하게 작동합니다.

소스 파일 이름에는 와일드카드(`*`)가 포함될 수 있습니다. 와일드카드 문자는 마지막 파일 경로 구분자(`/` 또는 `\`) 뒤에만 사용할 수 있습니다. 와일드카드 문자가 소스 파일 이름에 포함된 경우, 와일드카드와 일치하는 모든 파일이 대상 폴더에 복사됩니다. 와일드카드 문자를 사용하여 둘 이상의 파일을 이동하려는 경우, `destination` 옵션 입력 시 대상 입력이 폴더임을 나타내는 파일 경로 구분자(`/` 또는 `\`)로 끝나야 합니다.

대상 파일 이름이 원본 파일 이름과 다른 경우, `destination` 옵션을 사용하여 대상 파일 이름을 지정할 수 있습니다. 대상 파일 이름을 지정하지 않으면, 원본 파일의 이름이 대상 파일을 만드는 데 사용됩니다. 마지막 파일 경로 구분자(`/` 또는 `\`) 뒤에 오는 모든 텍스트는 파일 이름으로 취급됩니다. 소스 파일과 같은 파일 이름을 사용하려면, `destination` 옵션 입력 시 파일 경로 구분자(`/` 또는 `\`)로 끝나야 합니다.

다음과 같은 상황이 발생하면 작업 모듈이 오류를 반환합니다.
+ 지정된 폴더에 파일을 생성할 수 있는 권한이 없습니다.
+ 소스 파일이 런타임에 존재하지 않습니다.
+ 지정된 파일 이름을 가진 폴더가 이미 있으며 `overwrite` 옵션이 `false`(으)로 설정되어 있습니다.
+ 작업 모듈에서 작업을 수행하는 동안 오류가 발생했습니다.


**Input**  

| 키 이름 | 설명 | 형식 | 필수 | 기본값  | 허용되는 값 | 모든 플랫폼에서 지원됩니다. | 
| --- | --- | --- | --- | --- | --- | --- | 
| source | 소스 파일 경로입니다. | 문자열 | 예 | 해당 사항 없음 | 해당 사항 없음 | 예 | 
| destination | 대상 파일 경로입니다. | 문자열 | 예 | 해당 사항 없음 | 해당 사항 없음 | 예 | 
| overwrite | false로 설정하면 지정된 위치에 지정된 이름을 가진 파일이 이미 있는 경우 대상 파일이 교체되지 않습니다. | 부울 | 아니요 | true | 해당 사항 없음 | 예 | 

**입력 예제: 파일 이동(Linux)**

```
  - name: MovingAFileLinux
    action: MoveFile
    inputs:
      - source: /Sample/MyFolder/Sample.txt
        destination: /MyFolder/destinationFile.txt
```

**입력 예제: 파일 이동(Windows)**

```
  - name: MovingAFileWindows
    action: MoveFile
    inputs:
      - source: C:\Sample\MyFolder\Sample.txt
        destination: C:\MyFolder\destinationFile.txt
```

**입력 예제: 소스 파일 이름을 사용하여 파일 이동(Linux)**

```
  - name: MovingFileWithSourceFileNameLinux
    action: MoveFile
    inputs:
      - source: /Sample/MyFolder/Sample.txt
        destination: /MyFolder/
```

**입력 예제: 소스 파일 이름을 사용하여 파일 이동(Windows)**

```
  - name: MovingFileWithSourceFileNameWindows
    action: MoveFile
    inputs:
      - source: C:\Sample\MyFolder\Sample.txt
        destination: C:\MyFolder
```

**입력 예제: 와일드카드 문자를 사용하여 파일 이동(Linux)**

```
  - name: MovingFilesWithWildCardLinux
    action: MoveFile
    inputs:
      - source: /Sample/MyFolder/Sample*
        destination: /MyFolder/
```

**입력 예제: 와일드카드 문자를 사용하여 파일 이동(Windows)**

```
  - name: MovingFilesWithWildCardWindows
    action: MoveFile
    inputs:
      - source: C:\Sample\MyFolder\Sample*
        destination: C:\MyFolder
```

**입력 예제: 덮어쓰지 않고 파일 이동(Linux)**

```
  - name: MovingFilesWithoutOverwriteLinux
    action: MoveFile
    inputs:
      - source: /Sample/MyFolder/Sample.txt
        destination: /MyFolder/destinationFile.txt
        overwrite: false
```

**입력 예제: 덮어쓰지 않고 파일 이동(Windows)**

```
  - name: MovingFilesWithoutOverwrite
    action: MoveFile
    inputs:
      - source: C:\Sample\MyFolder\Sample.txt
        destination: C:\MyFolder\destinationFile.txt
        overwrite: false
```

**출력**  
없음.

### MoveFolder(Linux, Windows, macOS)
<a name="action-modules-movefolder"></a>

**MoveFolder** 작업 모듈은 폴더를 지정된 소스에서 지정된 대상으로 이동합니다. `source` 옵션에 대한 입력은 이동할 폴더이고 `destination` 옵션에 대한 입력은 소스 폴더의 내용이 이동되는 폴더입니다.

런타임 시 대상 상위 폴더 또는 `destination` 옵션에 대한 입력이 없는 경우, 모듈의 기본 동작은 지정된 대상에 폴더를 반복적으로 생성하는 것입니다.

소스 폴더와 동일한 폴더가 대상 폴더에 이미 있는 경우, 작업 모듈은 기본적으로 기존 폴더를 덮어씁니다. 덮어쓰기 옵션을 `false`(으)로 설정하여 이 기본 동작을 재정의할 수 있습니다. 덮어쓰기 옵션이 `false`(으)로 설정되어 있고 지정된 위치에 지정된 이름을 가진 폴더가 이미 있는 경우, 작업 모듈은 오류를 반환합니다.

소스 폴더 이름에는 와일드카드(`*`)가 포함될 수 있습니다. 와일드카드 문자는 마지막 파일 경로 구분자(`/` 또는 `\`) 뒤에만 사용할 수 있습니다. 와일드카드 문자가 소스 폴더 이름에 포함된 경우, 와일드카드와 일치하는 모든 폴더가 대상 폴더에 복사됩니다. 와일드카드 문자를 사용하여 폴더를 두 개 이상 이동하려는 경우, `destination` 옵션 입력 시 대상 입력이 폴더임을 나타내는 파일 경로 구분자(`/` 또는 `\`)로 끝나야 합니다.

대상 폴더 이름이 소스 폴더 이름과 다른 경우, `destination` 옵션을 사용하여 대상 폴더 이름을 지정할 수 있습니다. 대상 폴더 이름을 지정하지 않으면, 원본 폴더의 이름이 대상 폴더를 만드는 데 사용됩니다. 마지막 파일 경로 구분자(`/` 또는 `\`) 뒤에 오는 모든 텍스트는 폴더 이름으로 취급됩니다. 소스 폴더와 같은 폴더 이름을 사용하려면, `destination` 옵션 입력 시 파일 경로 구분자(`/` 또는 `\`)로 끝나야 합니다.

다음과 같은 상황이 발생하면 작업 모듈이 오류를 반환합니다.
+ 대상 폴더에 폴더를 생성할 수 있는 권한이 없습니다.
+ 소스 폴더가 런타임에 존재하지 않습니다.
+ 지정된 이름을 가진 폴더가 이미 있으며 `overwrite` 옵션이 `false`로 설정되어 있습니다.
+ 작업 모듈에서 작업을 수행하는 동안 오류가 발생했습니다.


**Input**  

| 키 이름 | 설명 | 형식 | 필수 | 기본값  | 허용되는 값 | 모든 플랫폼에서 지원됩니다. | 
| --- | --- | --- | --- | --- | --- | --- | 
| source | 소스 폴더 경로입니다. | 문자열 | 예 | 해당 사항 없음 | 해당 사항 없음 | 예 | 
| destination | 대상 폴더 경로입니다. | 문자열 | 예 | 해당 사항 없음 | 해당 사항 없음 | 예 | 
| overwrite | false로 설정하면 지정된 위치에 지정된 이름을 가진 폴더가 이미 있는 경우 대상 폴더가 바뀌지 않습니다. | 부울 | 아니요 | true | 해당 사항 없음 | 예 | 

**입력 예제: 폴더 이동(Linux)**

```
  - name: MovingAFolderLinux
    action: MoveFolder
    inputs:
      - source: /Sample/MyFolder/SourceFolder
        destination: /MyFolder/destinationFolder
```

**입력 예제: 폴더 이동(Windows)**

```
  - name: MovingAFolderWindows
    action: MoveFolder
    inputs:
      - source: C:\Sample\MyFolder\SourceFolder
        destination: C:\MyFolder\destinationFolder
```

**입력 예제: 소스 폴더 이름을 사용하여 폴더 이동(Linux)**

```
  - name: MovingFolderWithSourceFolderNameLinux
    action: MoveFolder
    inputs:
      - source: /Sample/MyFolder/SampleFolder
        destination: /MyFolder/
```

**입력 예제: 소스 폴더 이름을 사용하여 폴더 이동(Windows)**

```
  - name: MovingFolderWithSourceFolderNameWindows
    action: MoveFolder
    inputs:
      - source: C:\Sample\MyFolder\SampleFolder
        destination: C:\MyFolder\
```

**입력 예제: 와일드카드 문자를 사용하여 폴더 이동(Linux)**

```
  - name: MovingFoldersWithWildCardLinux
    action: MoveFolder
    inputs:
      - source: /Sample/MyFolder/Sample*
        destination: /MyFolder/
```

**입력 예제: 와일드카드 문자를 사용하여 폴더 이동(Windows)**

```
  - name: MovingFoldersWithWildCardWindows
    action: MoveFolder
    inputs:
      - source: C:\Sample\MyFolder\Sample*
        destination: C:\MyFolder\
```

**입력 예제: 덮어쓰지 않고 폴더 이동(Linux)**

```
  - name: MovingFoldersWithoutOverwriteLinux
    action: MoveFolder
    inputs:
      - source: /Sample/MyFolder/SampleFolder
    destination: /MyFolder/destinationFolder
    overwrite: false
```

**입력 예제: 덮어쓰지 않고 폴더 이동(Windows)**

```
  - name: MovingFoldersWithoutOverwriteWindows
    action: MoveFolder
    inputs:
      - source: C:\Sample\MyFolder\SampleFolder
        destination: C:\MyFolder\destinationFolder
        overwrite: false
```

**출력**  
없음.

### ReadFile(Linux, Windows, macOS)
<a name="action-modules-readfile"></a>

**ReadFile** 작업 모듈은 문자열 형식의 텍스트 파일 내용을 읽습니다. 이 모듈은 체인을 통해 후속 단계에서 사용할 파일 내용을 읽거나 `console.log` 파일로 데이터를 읽는 데 사용할 수 있습니다. 지정된 경로가 심볼 링크인 경우, 이 모듈은 대상 파일의 내용을 반환합니다. 이 모듈은 텍스트 파일만 지원합니다.

파일 인코딩 값이 기본 인코딩(`utf-8`) 값과 다른 경우, `encoding` 옵션을 사용하여 파일 인코딩 값을 지정할 수 있습니다. 기본적으로 `utf-16` 및 `utf-32`(은)는 리틀 엔디안 인코딩을 사용하는 것으로 간주됩니다.

기본적으로 이 모듈은 파일 내용을 `console.log` 파일에 인쇄할 수 없습니다. `printFileContent` 속성을 `true`로 설정하여 이 설정을 재정의할 수 있습니다.

이 모듈은 파일 내용만 반환할 수 있습니다. Excel 또는 JSON 파일과 같은 파일은 구문 분석할 수 없습니다.

다음과 같은 상황이 발생하면 작업 모듈이 오류를 반환합니다.
+ 파일이 런타임에 존재하지 않습니다.
+ 작업 모듈에서 작업을 수행하는 동안 오류가 발생했습니다.


**Input**  

| 키 이름 | 설명 | 형식 | 필수 | 기본값  | 허용되는 값 | 모든 플랫폼에서 지원됩니다. | 
| --- | --- | --- | --- | --- | --- | --- | 
| path | 파일 경로. | 문자열 | 예 | 해당 사항 없음 | 해당 사항 없음 | 예 | 
| encoding | 인코딩 표준입니다. | 문자열 | No | utf8 | utf8, utf-8, utf16, utf-16, utf16-LE, utf-16-LE, utf16-BE, utf-16-BE, utf32, utf-32, utf32-LE, utf-32-LE, utf32-BE 및  utf-32-BE. 인코딩 옵션 값은 대/소문자를 구분하지 않습니다. | 예 | 
| printFileContent | 파일 내용을 console.log 파일에 인쇄합니다. | 부울 | 아니요 | false | 해당 사항 없음 | 예. | 

**입력 예제: 파일 읽기(Linux)**

```
  - name: ReadingFileLinux
    action: ReadFile
    inputs:
      - path: /home/UserName/SampleFile.txt
```

**입력 예제: 파일 읽기(Windows)**

```
  - name: ReadingFileWindows
    action: ReadFile
    inputs:
      - path: C:\Windows\WindowsUpdate.log
```

**입력 예제: 파일 읽기 및 인코딩 표준 지정**

```
  - name: ReadingFileWithFileEncoding
    action: ReadFile
    inputs:
      - path: /FolderName/SampleFile.txt
        encoding: UTF-32
```

**입력 예제: 파일 읽기 및 `console.log` 파일에 인쇄**

```
  - name: ReadingFileToConsole
    action: ReadFile
    inputs:
      - path: /home/UserName/SampleFile.txt
        printFileContent: true
```


**출력**  

| 필드 | 설명 | 형식 | 
| --- | --- | --- | 
| content | 파일 내용입니다. | 문자열 | 

**출력 예제**

```
{
	"content" : "The file content"
}
```

### SetFileEncoding(Linux, Windows, macOS)
<a name="action-modules-setfileencoding"></a>

**SetFileEncoding** 작업 모듈은 기존 파일의 인코딩 속성을 수정합니다. 이 모듈은 파일 인코딩을 `utf-8`에서 지정된 인코딩 표준으로 변환할 수 있습니다. 기본적으로 `utf-16` 및 `utf-32`(은)는 리틀 엔디안 인코딩으로 간주됩니다.

다음과 같은 상황이 발생하면 작업 모듈이 오류를 반환합니다.
+ 지정된 수정을 수행할 수 있는 권한이 없습니다.
+ 파일이 런타임에 존재하지 않습니다.
+ 작업 모듈에서 작업을 수행하는 동안 오류가 발생했습니다.


**Input**  

| 키 이름 | 설명 | 형식 | 필수 | 기본값  | 허용되는 값 | 모든 플랫폼에서 지원됩니다. | 
| --- | --- | --- | --- | --- | --- | --- | 
| path | 파일 경로. | 문자열 | 예 | 해당 사항 없음 | 해당 사항 없음 | 예 | 
| encoding | 인코딩 표준입니다. | 문자열 | No | utf8 | utf8, utf-8, utf16, utf-16, utf16-LE, utf-16-LE, utf16-BE, utf-16-BE, utf32, utf-32, utf32-LE, utf-32-LE, utf32-BE 및  utf-32-BE. 인코딩 옵션 값은 대/소문자를 구분하지 않습니다. | 예 | 

**입력 예제: 파일 인코딩 속성 설정**

```
  - name: SettingFileEncodingProperty
    action: SetFileEncoding
    inputs:
      - path: /home/UserName/SampleFile.txt
        encoding: UTF-16
```

**출력**  
없음.

### SetFileOwner(Linux, Windows, macOS)
<a name="action-modules-setfileowner"></a>

**setFileOwner** 작업 모듈은 기존 파일의 `owner` 및 `group` 소유자 속성을 수정합니다. 지정된 파일이 심볼 링크인 경우, 모듈은 소스 파일의 `owner` 속성을 수정합니다. 이 모듈은 Windows 플랫폼에서 지원되지 않습니다.

이 모듈은 사용자 및 그룹 이름을 입력으로 수용합니다. 그룹 이름을 제공하지 않으면, 모듈은 사용자가 속한 그룹에 파일의 그룹 소유자를 할당합니다.

다음과 같은 상황이 발생하면 작업 모듈이 오류를 반환합니다.
+ 지정된 수정을 수행할 수 있는 권한이 없습니다.
+ 지정된 사용자 또는 그룹 이름이 런타임에 존재하지 않습니다.
+ 파일이 런타임에 존재하지 않습니다.
+ 작업 모듈에서 작업을 수행하는 동안 오류가 발생했습니다.


**Input**  

| 키 이름 | 설명 | 형식 | 필수 | 기본값  | 허용되는 값 | 모든 플랫폼에서 지원됩니다. | 
| --- | --- | --- | --- | --- | --- | --- | 
| path | 파일 경로. | 문자열 | 예 | 해당 사항 없음 | 해당 사항 없음 | Windows에서 지원되지 않습니다. | 
| owner | 사용자 이름. | 문자열 | 예 | 해당 사항 없음 | 해당 사항 없음 | Windows에서 지원되지 않습니다. | 
| group | 사용자 그룹의 이름입니다. | 문자열 | No | 사용자가 속한 그룹의 이름입니다. | 해당 사항 없음 | Windows에서 지원되지 않습니다. | 

**입력 예제: 사용자 그룹 이름을 지정하지 않고 파일 소유자 속성 설정**

```
  - name: SettingFileOwnerPropertyNoGroup
    action: SetFileOwner
    inputs:
      - path: /home/UserName/SampleText.txt
        owner: LinuxUser
```

**입력 예제: 소유자 및 사용자 그룹을 지정하여 파일 소유자 속성 설정**

```
  - name: SettingFileOwnerProperty
    action: SetFileOwner
    inputs:
      - path: /home/UserName/SampleText.txt
        owner: LinuxUser
        group: LinuxUserGroup
```

**출력**  
없음.

### SetFolderOwner(Linux, Windows, macOS)
<a name="action-modules-setfolderowner"></a>

**SetFolderOwner** 작업 모듈은 기존 폴더의 `owner` 및 `group` 소유자 및 속성을 재귀적으로 수정합니다. 기본적으로 모듈은 폴더의 모든 내용에 대한 소유권을 수정할 수 있습니다. `recursive` 옵션을 `false`(으)로 설정하여 이 동작을 재정의할 수 있습니다. 이 모듈은 Windows 플랫폼에서 지원되지 않습니다.

이 모듈은 사용자 및 그룹 이름을 입력으로 수용합니다. 그룹 이름을 제공하지 않으면, 모듈은 사용자가 속한 그룹에 파일의 그룹 소유자를 할당합니다.

다음과 같은 상황이 발생하면 작업 모듈이 오류를 반환합니다.
+ 지정된 수정을 수행할 수 있는 권한이 없습니다.
+ 지정된 사용자 또는 그룹 이름이 런타임에 존재하지 않습니다.
+ 폴더가 런타임에 존재하지 않습니다.
+ 작업 모듈에서 작업을 수행하는 동안 오류가 발생했습니다.


**Input**  

| 키 이름 | 설명 | 형식 | 필수 | 기본값  | 허용되는 값 | 모든 플랫폼에서 지원됩니다. | 
| --- | --- | --- | --- | --- | --- | --- | 
| path | 폴더 경로입니다. | 문자열 | 예 | 해당 사항 없음 | 해당 사항 없음 | Windows에서 지원되지 않습니다. | 
| owner | 사용자 이름. | 문자열 | 예 | 해당 사항 없음 | 해당 사항 없음 | Windows에서 지원되지 않습니다. | 
| group | 사용자 그룹의 이름입니다. | 문자열 | No | 사용자가 속한 그룹의 이름입니다. | 해당 사항 없음 | Windows에서 지원되지 않습니다. | 
| recursive | false(으)로 설정하면 폴더의 모든 내용에 대한 소유권을 수정하는 기본 동작을 재정의합니다. | 부울 | 아니요 | true | 해당 사항 없음 | Windows에서 지원되지 않습니다. | 

**입력 예제: 사용자 그룹 이름을 지정하지 않고 폴더 소유자 속성 설정**

```
  - name: SettingFolderPropertyWithOutGroup
    action: SetFolderOwner
    inputs:
      - path: /SampleFolder/
        owner: LinuxUser
```

**입력 예제: 폴더 내 모든 콘텐츠의 소유권을 재정의하지 않고 폴더 소유자 속성 설정**

```
  - name: SettingFolderPropertyWithOutRecursively
    action: SetFolderOwner
    inputs:
      - path: /SampleFolder/
        owner: LinuxUser
        recursive: false
```

**입력 예제: 사용자 그룹 이름을 지정하여 파일 소유권 속성 설정**

```
  - name: SettingFolderPropertyWithGroup
    action: SetFolderOwner
    inputs:
      - path: /SampleFolder/
        owner: LinuxUser
        group: LinuxUserGroup
```

**출력**  
없음.

### SetFilePermissions(Linux, Windows, macOS)
<a name="action-modules-setfilepermissions"></a>

**SetFilePermissions** 작업 모듈은 기존 파일의 `permissions`(을)를 수정합니다. 이 모듈은 Windows 플랫폼에서 지원되지 않습니다.

`permissions`의 입력은 문자열 값이어야 합니다.

이 작업 모듈은 운영 체제의 기본 umask 값으로 정의된 권한을 가진 파일을 만들 수 있습니다. 기본값을 재정의하려면 `umask` 값을 설정해야 합니다.

다음과 같은 상황이 발생하면 작업 모듈이 오류를 반환합니다.
+ 지정된 수정을 수행할 수 있는 권한이 없습니다.
+ 파일이 런타임에 존재하지 않습니다.
+ 작업 모듈에서 작업을 수행하는 동안 오류가 발생했습니다.


**Input**  

| 키 이름 | 설명 | 형식 | 필수 | 기본값  | 허용되는 값 | 모든 플랫폼에서 지원됩니다. | 
| --- | --- | --- | --- | --- | --- | --- | 
| path | 파일 경로. | 문자열 | 예 | 해당 사항 없음 | 해당 사항 없음 | Windows에서 지원되지 않습니다. | 
| permissions | 파일 권한입니다. | 문자열 | 예 | 해당 사항 없음 | 해당 사항 없음 | Windows에서 지원되지 않습니다. | 

**입력 예제: 파일 권한 수정**

```
  - name: ModifyingFilePermissions
    action: SetFilePermissions
    inputs:
      - path: /home/UserName/SampleFile.txt
        permissions: 766
```

**출력**  
없음.

### SetFolderPermissions(Linux, Windows, macOS)
<a name="action-modules-setfolderpermissions"></a>

**SetFolderPermissions** 작업 모듈은 기존 폴더와 모든 하위 파일 및 하위 폴더의 `permissions`을 재귀적으로 수정합니다. 기본적으로 이 모듈은 지정된 폴더의 모든 내용에 대한 권한을 수정할 수 있습니다. `recursive` 옵션을 `false`(으)로 설정하여 이 동작을 재정의할 수 있습니다. 이 모듈은 Windows 플랫폼에서 지원되지 않습니다.

`permissions`의 입력은 문자열 값이어야 합니다.

이 작업 모듈은 운영 체제의 기본 umask 값에 따라 권한을 수정할 수 있습니다. 기본값을 재정의하려면 `umask` 값을 설정해야 합니다.

다음과 같은 상황이 발생하면 작업 모듈이 오류를 반환합니다.
+ 지정된 수정을 수행할 수 있는 권한이 없습니다.
+ 폴더가 런타임에 존재하지 않습니다.
+ 작업 모듈에서 작업을 수행하는 동안 오류가 발생했습니다.


**Input**  

| 키 이름 | 설명 | 형식 | 필수 | 기본값  | 허용되는 값 | 모든 플랫폼에서 지원됩니다. | 
| --- | --- | --- | --- | --- | --- | --- | 
| path | 폴더 경로입니다. | 문자열 | 예 | 해당 사항 없음 | 해당 사항 없음 | Windows에서 지원되지 않습니다. | 
| permissions | 폴더 권한입니다. | 문자열 | 예 | 해당 사항 없음 | 해당 사항 없음 | Windows에서 지원되지 않습니다. | 
| recursive | false로 설정된 경우 폴더의 모든 내용에 대한 권한을 수정하는 기본 동작을 재정의합니다. | 부울 | 아니요 | true | 해당 사항 없음 | Windows에서 지원되지 않습니다. | 

**입력 예제: 폴더 권한 설정**

```
  - name: SettingFolderPermissions
    action: SetFolderPermissions
    inputs:
      - path: SampleFolder/
        permissions: 0777
```

**입력 예제: 폴더의 모든 콘텐츠에 대한 권한을 수정하지 않고 폴더 권한 설정**

```
  - name: SettingFolderPermissionsNoRecursive
    action: SetFolderPermissions
    inputs:
      - path: /home/UserName/SampleFolder/
        permissions: 777
        recursive: false
```

**출력**  
없음.

## 소프트웨어 설치 작업
<a name="action-modules-software-install-actions"></a>

다음 섹션에서는 소프트웨어를 설치하거나 제거하는 작업 모듈에 대해 설명합니다.

**IAM 요구 사항**  
설치 다운로드 경로가 S3 URI인 경우, 인스턴스 프로파일에 연결하는 IAM 역할에 `S3Download` 작업 모듈을 실행할 권한이 있어야 합니다. 필요한 권한을 부여하려면 `S3:GetObject` IAM 정책을 인스턴스 프로파일과 연결된 IAM 역할에 연결하고 버킷 경로를 지정하십시오. 예: `arn:aws:s3:::BucketName/*`).

**복합 MSI 입력**  
입력 문자열에 큰따옴표(`"`)가 포함된 경우, 다음 방법 중 하나를 사용하여 올바르게 해석되도록 해야 합니다.
+ 다음 예제와 같이 문자열 외부에 작은따옴표(')를 사용하여 문자열을 포함하고, 문자열 안에는 큰따옴표(")를 사용할 수 있습니다.

  ```
  properties:
    COMPANYNAME: '"Acme ""Widgets"" and ""Gizmos."""'
  ```

  이 경우 문자열 안에 아포스트로피를 사용해야 하는 경우에는 이스케이프해야 합니다. 즉, 아포스트로피 앞에 작은따옴표(')를 하나 더 사용해야 합니다.
+ 문자열 바깥쪽에 큰따옴표(")를 사용하여 문자열을 포함할 수 있습니다. 또한 다음 예제와 같이 백슬래시 문자(`\`)를 사용하여 문자열 내의 큰따옴표를 이스케이프할 수 있습니다.

  ```
  properties:
    COMPANYNAME: "\"Acme \"\"Widgets\"\" and \"\"Gizmos.\"\"\""
  ```

두 방법 모두 `COMPANYNAME="Acme ""Widgets"" and ""Gizmos."""` 값을 **msiexec** 명령에 전달합니다.

**Topics**
+ [InstallMSI(Windows)](#action-modules-install-msi)
+ [UninstallMSI(Windows)](#action-modules-uninstall-msi)

### InstallMSI(Windows)
<a name="action-modules-install-msi"></a>

`InstallMSI` 작업 모듈은 MSI 파일을 사용하여 Windows 애플리케이션을 설치합니다. 로컬 경로, S3 객체 URI 또는 웹 URL을 사용하여 MSI 파일을 지정할 수 있습니다. 재부팅 옵션은 시스템의 재부팅 동작을 구성합니다.

AWSTOE 는 작업 모듈의 입력 파라미터를 기반으로 **msiexec** 명령을 생성합니다. `path`(MSI 파일 위치) 및 `logFile`(로그 파일 위치) 입력 파라미터의 값은 따옴표(")로 묶어야 합니다.

다음 MSI 종료 코드는 성공한 것으로 간주됩니다.
+ 0(성공)
+ 1614(ERROR\$1PRODUCT\$1UNINSTALLED)
+ 1641(재부팅이 시작됨)
+ 3010(재부팅 필요)


**Input**  

| 키 이름 | 설명 | 형식 | 필수 | 기본값  | 허용되는 값 | 
| --- | --- | --- | --- | --- | --- | 
| path |  다음 중 하나를 사용하여 MSI 파일 위치를 지정합니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/imagebuilder/latest/userguide/toe-action-modules.html) chaining 표현식이 허용됩니다.  | 문자열 | 예 | 해당 사항 없음 | 해당 사항 없음 | 
| reboot |  작업 모듈이 성공적으로 실행된 후 나타나는 시스템 재부팅 동작을 구성합니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/imagebuilder/latest/userguide/toe-action-modules.html)  | 문자열 | No | Allow | Allow, Force, Skip | 
| logOptions |  MSI 설치 로깅에 사용할 옵션을 지정합니다. 지정된 플래그는 `/L` 명령줄 파라미터와 함께 MSI 설치 관리자에 전달되어 로깅을 활성화합니다. 플래그가 지정되지 않은 경우 기본값을 AWSTOE 사용합니다. MSI의 로그 옵션에 대한 자세한 내용은 Microsoft *Windows 설치 프로그램* 제품 설명서의 [명령줄 옵션](https://learn.microsoft.com/en-us/windows/win32/msi/command-line-options)을 참조하세요.  | 문자열 | No | \$1VX | i,w,e,a,r,u,c,m,o,p,v,x,\$1,\$1,\$1 | 
| logFile |  로그 파일 위치의 절대 경로 또는 상대 경로입니다. 로그 파일 경로가 없으면 생성됩니다. 로그 파일 경로가 제공되지 않은 경우는 MSI 설치 로그를 저장하지 AWSTOE 않습니다.  | 문자열 | No | 해당 사항 없음 | 해당 사항 없음 | 
| properties |  MSI 로깅 속성 키/값 페어, 예: `TARGETDIR: "C:\target\location"`   참고: 다음 속성은 수정할 수 없습니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/imagebuilder/latest/userguide/toe-action-modules.html)  | Map[String]String | 아니요 | 해당 사항 없음 | 해당 사항 없음 | 
| ignoreAuthenticodeSignatureErrors |  경로에 지정된 설치 프로그램의 Authenticode 서명 검증 오류를 무시하도록 설정하는 플래그입니다. **Get-AuthenticodeSignature** 명령은 설치 프로그램을 검증하는 데 사용됩니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/imagebuilder/latest/userguide/toe-action-modules.html)  | 부울 | 아니요 | false | true, false | 
| allowUnsignedInstaller |  경로에 지정된 서명되지 않은 설치 프로그램을 실행할 수 있도록 하는 플래그입니다. **Get-AuthenticodeSignature** 명령은 설치 프로그램을 검증하는 데 사용됩니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/imagebuilder/latest/userguide/toe-action-modules.html)  | 부울 | 아니요 | false | true, false | 

**예제**  
다음 예제는 설치 경로에 따른 구성 요소 문서의 입력 섹션 변형을 보여줍니다.

**입력 예제: 로컬 문서 경로 설치**

```
- name: local-path-install
  steps:
    - name: LocalPathInstaller
      action: InstallMSI
      inputs:
        path: C:\sample.msi
        logFile: C:\msilogs\local-path-install.log
        logOptions: '*VX'
        reboot: Allow
        properties:
          COMPANYNAME: '"Amazon Web Services"'
        ignoreAuthenticodeSignatureErrors: true
        allowUnsignedInstaller: true
```

**입력 예제: Amazon S3 경로 설치**

```
- name: s3-path-install
  steps:
    - name: S3PathInstaller
      action: InstallMSI
      inputs:
        path: s3://<bucket-name>/sample.msi
        logFile: s3-path-install.log
        reboot: Force
        ignoreAuthenticodeSignatureErrors: false
        allowUnsignedInstaller: true
```

**입력 예제: 웹 경로 설치**

```
- name: web-path-install
  steps:
    - name: WebPathInstaller
      action: InstallMSI
      inputs:
        path: https://<some-path>/sample.msi
        logFile: web-path-install.log
        reboot: Skip
        ignoreAuthenticodeSignatureErrors: true
        allowUnsignedInstaller: false
```

**출력**  
다음은 `InstallMSI` 작업 모듈의 출력 예제입니다.

```
{
	"logFile": "web-path-install.log",
	"msiExitCode": 0,
	"stdout": ""
}
```

### UninstallMSI(Windows)
<a name="action-modules-uninstall-msi"></a>

`UninstallMSI` 작업 모듈을 사용하면 MSI 파일을 사용하여 Windows 애플리케이션을 제거할 수 있습니다. 로컬 파일 경로, S3 객체 URI 또는 웹 URL을 사용하여 MSI 파일 위치를 지정할 수 있습니다. 재부팅 옵션은 시스템의 재부팅 동작을 구성합니다.

AWSTOE 는 작업 모듈의 입력 파라미터를 기반으로 **msiexec** 명령을 생성합니다. MSI 파일 위치(`path`)와 로그 파일 위치(`logFile`)는 **msiexec** 명령을 생성하는 동안 명시적으로 큰따옴표(")로 묶습니다.

다음 MSI 종료 코드는 성공한 것으로 간주됩니다.
+ 0(성공)
+ 1605(ERROR\$1UNKNOWN\$1PRODUCT)
+ 1614(ERROR\$1PRODUCT\$1UNINSTALLED)
+ 1641(재부팅이 시작됨)
+ 3010(재부팅 필요)


**Input**  

| 키 이름 | 설명 | 형식 | 필수 | 기본값  | 허용되는 값 | 
| --- | --- | --- | --- | --- | --- | 
| path |  다음 중 하나를 사용하여 MSI 파일 위치를 지정합니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/imagebuilder/latest/userguide/toe-action-modules.html) chaining 표현식이 허용됩니다.  | 문자열 | 예 | 해당 사항 없음 | 해당 사항 없음 | 
| reboot |  작업 모듈이 성공적으로 실행된 후 나타나는 시스템 재부팅 동작을 구성합니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/imagebuilder/latest/userguide/toe-action-modules.html)  | 문자열 | No | Allow | Allow, Force, Skip | 
| logOptions |  MSI 설치 로깅에 사용할 옵션을 지정합니다. 지정된 플래그는 `/L` 명령줄 파라미터와 함께 MSI 설치 관리자에 전달되어 로깅을 활성화합니다. 플래그가 지정되지 않은 경우 기본값을 AWSTOE 사용합니다. MSI의 로그 옵션에 대한 자세한 내용은 Microsoft *Windows 설치 프로그램* 제품 설명서의 [명령줄 옵션](https://docs.microsoft.com/en-us/windows/win32/msi/command-line-options)을 참조하세요.  | 문자열 | No | \$1VX | i,w,e,a,r,u,c,m,o,p,v,x,\$1,\$1,\$1 | 
| logFile |  로그 파일 위치의 절대 경로 또는 상대 경로입니다. 로그 파일 경로가 없으면 생성됩니다. 로그 파일 경로가 제공되지 않은 경우는 MSI 설치 로그를 저장하지 AWSTOE 않습니다.  | 문자열 | No | 해당 사항 없음 | 해당 사항 없음 | 
| properties |  MSI 로깅 속성 키/값 페어, 예: `TARGETDIR: "C:\target\location"`   참고: 다음 속성은 수정할 수 없습니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/imagebuilder/latest/userguide/toe-action-modules.html)  | Map[String]String | 아니요 | 해당 사항 없음 | 해당 사항 없음 | 
| ignoreAuthenticodeSignatureErrors |  경로에 지정된 설치 프로그램의 Authenticode 서명 검증 오류를 무시하도록 설정하는 플래그입니다. **Get-AuthenticodeSignature** 명령은 설치 프로그램을 검증하는 데 사용됩니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/imagebuilder/latest/userguide/toe-action-modules.html)  | 부울 | 아니요 | false | true, false | 
| allowUnsignedInstaller |  경로에 지정된 서명되지 않은 설치 프로그램을 실행할 수 있도록 하는 플래그입니다. **Get-AuthenticodeSignature** 명령은 설치 프로그램을 검증하는 데 사용됩니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/imagebuilder/latest/userguide/toe-action-modules.html)  | 부울 | 아니요 | false | true, false | 

**예제**  
다음 예제는 설치 경로에 따른 구성 요소 문서의 입력 섹션 변형을 보여줍니다.

**입력 예제: 로컬 문서 경로 설치 제거**

```
- name: local-path-uninstall
  steps:
    - name: LocalPathUninstaller
      action: UninstallMSI
      inputs:
        path: C:\sample.msi
        logFile: C:\msilogs\local-path-uninstall.log
        logOptions: '*VX'
        reboot: Allow
        properties:
          COMPANYNAME: '"Amazon Web Services"'
        ignoreAuthenticodeSignatureErrors: true
        allowUnsignedInstaller: true
```

**입력 예제: Amazon S3 경로 설치 제거**

```
- name: s3-path-uninstall
  steps:
    - name: S3PathUninstaller
      action: UninstallMSI
      inputs:
        path: s3://<bucket-name>/sample.msi
        logFile: s3-path-uninstall.log
        reboot: Force
        ignoreAuthenticodeSignatureErrors: false
        allowUnsignedInstaller: true
```

**입력 예제: 웹 경로 설치 제거**

```
- name: web-path-uninstall
  steps:
    - name: WebPathUninstaller
      action: UninstallMSI
      inputs:
        path: https://<some-path>/sample.msi
        logFile: web-path-uninstall.log
        reboot: Skip
        ignoreAuthenticodeSignatureErrors: true
        allowUnsignedInstaller: false
```

**출력**  
다음은 `UninstallMSI` 작업 모듈의 출력 예제입니다.

```
{
	"logFile": "web-path-uninstall.log",
	"msiExitCode": 0,
	"stdout": ""
}
```

## 시스템 작업 모듈
<a name="action-modules-system-actions"></a>

다음 섹션에서는 시스템 작업을 수행하거나 시스템 설정을 업데이트하는 작업 모듈에 대해 설명합니다.

**Topics**
+ [Reboot(Linux, Windows)](#action-modules-reboot)
+ [SetRegistry(Windows)](#action-modules-setregistry)
+ [UpdateOS(Linux, Windows)](#action-modules-updateos)

### Reboot(Linux, Windows)
<a name="action-modules-reboot"></a>

**재부팅** 작업 모듈은 인스턴스를 재부팅합니다. 재부팅 시작을 지연시킬 수 있는 구성 가능한 옵션이 포함되어 있습니다. 기본적으로 `delaySeconds`(은)는 `0`(으)로 설정되어 있으며, 이는 지연이 없음을 의미합니다. 재부팅 작업 모듈의 경우, 인스턴스 재부팅 시에는 적용되지 않기 때문에 단계 시간 초과가 지원되지 않습니다.

Systems Manager Agent가 애플리케이션을 호출하면, 종료 코드(Windows의 경우 `3010`, Linux의 경우 `194`)가 Systems Manager Agent에 전달됩니다. Systems Manager Agent는 [스크립트에서 관리형 인스턴스 재부팅](https://docs.aws.amazon.com/systems-manager/latest/userguide/send-commands-reboot.html)에 설명된 대로 시스템 재부팅을 처리합니다.

애플리케이션이 호스트에서 독립 실행형 프로세스로 호출되는 경우, 현재 실행 상태를 저장하고 재부팅 후 애플리케이션을 재실행하도록 재부팅 후 자동 실행 트리거를 구성한 다음 시스템을 재부팅합니다.

**재부팅 후 자동 실행 트리거:**
+ **Windows**. AWSTOE (은)는 `SystemStartup`에서 자동으로 실행되는 트리거가 포함된 Windows 작업 스케줄러 항목을 만듭니다.
+ **Linux**. AWSTOE (은)는 시스템 재부팅 후 자동으로 실행되는 작업을 crontab에 추가합니다.

```
@reboot /download/path/awstoe run --document s3://bucket/key/doc.yaml
```

이 트리거는 애플리케이션이 시작될 때 정리됩니다.

**재시도**  
기본적으로 최대 재시도 횟수는 Systems Manager `CommandRetryLimit`으로 설정됩니다. 재부팅 횟수가 재시도 제한을 초과하면, 자동화가 실패합니다. Systems Manager 에이전트 구성 파일(`Mds.CommandRetryLimit`)을 편집하여 제한을 변경할 수 있습니다. Systems Manager 에이전트 오픈 소스의 [런타임 구성](https://github.com/aws/amazon-ssm-agent/blob/mainline/README.md#runtime-configuration)을 참조하세요.

**Reboot** 작업 모듈을 사용하려면, `exitcode` 재부팅이 포함된 단계(예: `3010`)의 경우 애플리케이션 바이너리를 `sudo user`(으)로 실행해야 합니다.


**Input**  

| 키 이름 | 설명 | 형식 | 필수 | 기본값 | 
| --- | --- | --- | --- | --- | 
| delaySeconds | 재부팅을 시작하기 전에 특정 시간을 지연시킵니다. | Integer |  아니요  |  `0`  | 

**입력 예제: 재부팅 단계**

```
  - name: RebootStep
    action: Reboot
    onFailure: Abort
    maxAttempts: 2
    inputs:
      delaySeconds: 60
```

**출력**

없음.

**Reboot** 모듈이 완료되면, Image Builder는 빌드의 다음 단계를 계속 진행합니다.

### SetRegistry(Windows)
<a name="action-modules-setregistry"></a>

**SetRegistry** 작업 모듈은 입력 목록을 허용하고 지정된 레지스트리 키의 값을 설정할 수 있도록 합니다. 레지스트리 키가 없으면, 정의된 경로에 새로 생성됩니다. 이 기능은 Windows에만 적용됩니다.


**Input**  

| 키 이름 | 설명 | 형식 | 필수 | 
| --- | --- | --- | --- | 
| path | 레지스트리 키의 경로입니다. | 문자열 | 예 | 
| name | 레지스트리 키의 이름입니다. | 문자열 | 예 | 
| value | 레지스트리 키의 값입니다. | 문자열/숫자/배열 | 예 | 
| type | 레지스트리 키의 값 유형입니다. | 문자열 | 예 | 

**지원되는 경로 접두사**
+ `HKEY_CLASSES_ROOT / HKCR:`
+ `HKEY_USERS / HKU:`
+ `HKEY_LOCAL_MACHINE / HKLM:`
+ `HKEY_CURRENT_CONFIG / HKCC:`
+ `HKEY_CURRENT_USER / HKCU:`

**지원되는 유형**
+ `BINARY`
+ `DWORD`
+ `QWORD`
+ `SZ`
+ `EXPAND_SZ`
+ `MULTI_SZ`

**입력 예제: 레지스트리 키 값 설정**

```
  - name: SetRegistryKeyValues
    action: SetRegistry
    maxAttempts: 3
    inputs:
      - path: HKLM:\SOFTWARE\MySoftWare
        name: MyName
        value: FirstVersionSoftware
        type: SZ
      - path: HKEY_CURRENT_USER\Software\Test
        name: Version
        value: 1.1
        type: DWORD
```

**출력**

없음.

### UpdateOS(Linux, Windows)
<a name="action-modules-updateos"></a>

**UpdateOS** 작업 모듈은 Windows 및 Linux 업데이트 설치에 대한 지원을 추가합니다. 기본적으로 사용 가능한 모든 업데이트가 설치됩니다. 또는 설치할 작업 모듈에 대한 하나 이상의 특정 업데이트 목록을 구성할 수 있습니다. 설치에서 제외할 업데이트를 지정할 수도 있습니다.

‘포함’ 목록과 ‘제외’ 목록을 모두 제공하는 경우 결과 업데이트 목록에는 ‘포함’ 목록에 나열되어 있지만 ‘제외’ 목록에 나열되지 않은 업데이트만 포함될 수 있습니다.

**참고**  
**UpdateOS**는 Amazon Linux 2023(AL2023)을 지원하지 않습니다. 기본 AMI를 모든 릴리스와 함께 제공되는 새 버전으로 업데이트하는 것이 좋습니다. 다른 대안은 *Amazon Linux 2023 사용 설명서*의 [메이저 릴리스와 마이너 릴리스에서 받은 업데이트 제어](https://docs.aws.amazon.com/linux/al2023/ug/deterministic-upgrades.html#controlling-release-updates)를 참조하세요.
+ **Windows**. 업데이트는 대상 컴퓨터에 구성된 업데이트 소스에서 설치됩니다.
+ **Linux**. 애플리케이션은 Linux 플랫폼에서 지원되는 패키지 관리자를 확인하고 `yum` 또는 `apt-get` 패키지 관리자를 사용합니다. 둘 다 지원되지 않으면 오류가 반환됩니다. **UpdateOS** 작업 모듈을 실행할 `sudo` 권한이 있어야 합니다. `sudo` 권한이 없는 경우 `error.Input`(이)가 반환됩니다.


**Input**  

| 키 이름 | 설명 | 형식 | 필수 | 
| --- | --- | --- | --- | 
| include |  Windows의 경우, 다음을 지정할 수 있습니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/imagebuilder/latest/userguide/toe-action-modules.html) Linux의 경우 설치용 업데이트 목록에 포함할 패키지를 하나 이상 지정할 수 있습니다.  | 문자열 목록 | 아니요 | 
| exclude |  Windows의 경우, 다음을 지정할 수 있습니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/imagebuilder/latest/userguide/toe-action-modules.html) Linux의 경우, 설치용 업데이트 목록에서 제외할 패키지를 하나 이상 지정할 수 있습니다.  | 문자열 목록 | 아니요 | 

**입력 예제: Linux 업데이트 설치에 대한 지원 추가**

```
  - name: UpdateMyLinux
    action: UpdateOS
    onFailure: Abort
    maxAttempts: 3
    inputs:
      exclude:
        - ec2-hibinit-agent
```

**입력 예제: Windows 업데이트 설치에 대한 지원 추가**

```
  - name: UpdateWindowsOperatingSystem
    action: UpdateOS
    onFailure: Abort
    maxAttempts: 3
    inputs:
      include:
        - KB1234567
        - '*Security*'
```

**출력**

없음.