

• AWS Systems Manager CloudWatch 대시보드는 2026년 4월 30일 이후에는 더 이상 사용할 수 없습니다. 고객은 Amazon CloudWatch 콘솔을 계속 사용하여 현재와 마찬가지로 Amazon CloudWatch 대시보드를 보고, 생성하고, 관리할 수 있습니다. 자세한 내용은 [Amazon CloudWatch 대시보드 설명서](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Dashboards.html)를 참조하세요.

# Systems Manager Automation 작업 참조
<a name="automation-actions"></a>

이 참조는 Automation 실행서에서 지정할 수 있는 Automation 작업을 설명합니다. Automation은 AWS Systems Manager의 도구입니다. 이러한 작업은 다른 유형의 Systems Manager(SSM) 문서에는 사용할 수 없습니다. 다른 유형의 SSM 문서용 플러그인에 대한 자세한 내용은 [Command 문서 플러그인 참조](documents-command-ssm-plugin-reference.md) 섹션을 참조하세요.

Systems Manager Automation은 Automation 실행서에 정의된 단계를 실행합니다. 각 단계는 특정 작업과 관련되어 있습니다. 작업은 해당 단계의 입력, 동작 및 출력을 결정합니다. 단계는 실행서의 `mainSteps` 섹션에 정의됩니다.

작업 또는 단계의 출력은 지정할 필요가 없습니다. 출력은 단계와 관련된 작업에 의해 미리 결정되어 있습니다. 실행서에 단계 입력을 지정할 때 이전 단계로부터 하나 이상의 출력을 참조할 수 있습니다. 예를 들어 후속 `aws:runCommand` 작업에 `aws:runInstances` 출력을 사용 가능하게 할 수 있습니다. 또한 실행서의 `Output` 섹션에서 이전 단계의 출력을 참조할 수도 있습니다.

**중요**  
AWS Identity and Access Management(IAM) 서비스 역할을 사용하여 다른 서비스를 호출하는 자동화 워크플로를 실행하는 경우 해당 서비스 역할이 다른 서비스를 호출할 권한이 있도록 구성되어야 합니다. 이 요구 사항은 `AWS-ConfigureS3BucketLogging`, `AWS-CreateDynamoDBBackup`, `AWS-RestartEC2Instance` 실행서 등의 모든 AWS Automation 실행서(`AWS-*` 실행서)에 적용됩니다. 또한 다른 서비스를 호출하는 작업을 사용하여 다른 AWS 서비스을(를) 호출하는 사용자 정의 Automation 실행서를 생성하는 경우에도 이 요구 사항이 항상 적용됩니다. 예를 들어 `aws:executeAwsApi`, `aws:createStack` 또는 `aws:copyImage` 작업을 사용하는 경우 이러한 서비스를 호출할 수 있는 권한을 포함하여 서비스 역할을 구성합니다. 역할에 IAM 인라인 정책을 추가하여 다른 AWS 서비스에 대한 권한을 부여할 수 있습니다. 자세한 내용은 [(선택 사항) 다른 AWS 서비스를 간접적으로 호출할 Automation 인라인 정책과 고객 관리형 정책 추가](automation-setup-iam.md#add-inline-policy) 섹션을 참조하세요.

**Topics**
+ [모든 작업에서 공유하는 속성](#automation-common)
+ [`aws:approve` - 수동 승인을 위해 자동화 일시 중지](automation-action-approve.md)
+ [`aws:assertAwsResourceProperty` - AWS 리소스 상태 또는 이벤트 상태 어설션](automation-action-assertAwsResourceProperty.md)
+ [`aws:branch` - 조건부 자동화 단계 실행](automation-action-branch.md)
+ [`aws:changeInstanceState` - 인스턴스 상태 변경 또는 어설션](automation-action-changestate.md)
+ [`aws:copyImage` - Amazon Machine Image 복사 또는 암호화](automation-action-copyimage.md)
+ [`aws:createImage` - Amazon Machine Image 생성](automation-action-create.md)
+ [`aws:createStack` - CloudFormation 스택 생성](automation-action-createstack.md)
+ [`aws:createTags` - AWS 리소스에 대한 태그 생성](automation-action-createtag.md)
+ [`aws:deleteImage` - Amazon Machine Image 삭제](automation-action-delete.md)
+ [`aws:deleteStack` - CloudFormation 스택 삭제](automation-action-deletestack.md)
+ [`aws:executeAutomation` - 또 다른 자동화 실행](automation-action-executeAutomation.md)
+ [`aws:executeAwsApi` - AWS API 작업 호출 및 실행](automation-action-executeAwsApi.md)
+ [`aws:executeScript` - 스크립트 실행](automation-action-executeScript.md)
+ [`aws:executeStateMachine` - AWS Step Functions 상태 시스템을 실행합니다.](automation-action-executeStateMachine.md)
+ [`aws:invokeWebhook` - Automation 웹후크 통합 호출](invoke-webhook.md)
+ [`aws:invokeLambdaFunction` - AWS Lambda 함수 호출](automation-action-lamb.md)
+ [`aws:loop`- 자동화의 여러 단계를 반복](automation-action-loop.md)
+ [`aws:pause` - 자동화 일시 중지](automation-action-pause.md)
+ [`aws:runCommand` - 관리형 인스턴스에서 명령 실행](automation-action-runcommand.md)
+ [`aws:runInstances` - Amazon EC2 인스턴스 시작](automation-action-runinstance.md)
+ [`aws:sleep` - 자동화 지연](automation-action-sleep.md)
+ [`aws:updateVariable` - 런북 변수 값을 업데이트](automation-action-update-variable.md)
+ [`aws:waitForAwsResourceProperty` - AWS 리소스 속성 대기](automation-action-waitForAwsResourceProperty.md)
+ [Automation 시스템 변수](automation-variables.md)

## 모든 작업에서 공유하는 속성
<a name="automation-common"></a>

공통 속성은 모든 작업에서 발견되는 파라미터 또는 옵션입니다. 일부 옵션은 단계가 완료될 때까지 기다리는 시간, 단계가 실패할 경우 수행할 작업 등과 같은 단계에 대한 동작을 정의합니다. 다음은 모든 작업에 공통적인 속성입니다.

[description](#descriptProp)  
런북 또는 단계의 용도를 설명하려고 제공하는 정보입니다.  
유형: 문자열  
필수 여부: 아니요

[name](#nameProp)  
실행서에 있는 모든 단계 이름을 통틀어 고유해야 하는 식별자.  
유형: 문자열  
허용 패턴: [a-zA-Z0-9\$1]\$1\$1  
필수 여부: 예

[action](#actProp)  
이 단계에서 실행해야 할 작업의 이름입니다. [`aws:runCommand` - 관리형 인스턴스에서 명령 실행](automation-action-runcommand.md)는 여기에서 지정할 수 있는 작업의 예입니다. 이 문서는 사용 가능한 모든 작업에 대한 세부 정보를 제공합니다.  
유형: 문자열  
필수 항목 여부: 예

[maxAttempts](#maxProp)  
단계가 실패할 경우 재시도해야 하는 횟수. 지정된 값이 1보다 크면 모든 재시도가 실패할 때까지 해당 단계는 실패한 것으로 간주되지 않습니다. 기본값은 1입니다.  
유형: 정수  
필수 여부: 아니요

[timeoutSeconds](#timeProp)  
단계에 대한 시간 제한 값. 시간 제한에 도달했지만 `maxAttempts` 값이 1보다 큰 경우 단계는 모든 재시도 횟수가 시도될 때까지 시간 초과된 것으로 간주되지 않습니다.  
유형: 정수  
필수 여부: 아니요

[onFailure](#failProp)  
실패 시 자동화가 중지되어야 하는지, 계속되어야 하는지 또는 다른 단계로 이동해야 하는지를 나타냅니다. 이 옵션의 기본값은 중단입니다.  
유형: 문자열  
유효 값: 중단 \$1 계속 \$1 단계:*step\$1name*  
필수 여부: 아니요

[onCancel](#canProp)  
사용자가 자동화를 취소하는 경우 자동화가 이동해야 하는 단계를 나타냅니다. Automation은 최대 2분 동안 취소 워크플로를 실행합니다.  
유형: 문자열  
유효 값: 중단 \$1 단계:*step\$1name*  
필수 여부: 아니요  
`onCancel` 속성은 다음 작업으로 이동을 지원하지 않습니다.  
+ `aws:approve`
+ `aws:copyImage`
+ `aws:createImage`
+ `aws:createStack`
+ `aws:createTags`
+ `aws:loop`
+ `aws:pause`
+ `aws:runInstances`
+ `aws:sleep`

[isEnd](#endProp)  
이 옵션은 특정 단계 종료 시 자동화를 중지합니다. 단계가 실패하거나 성공한 경우 자동화가 중지됩니다. 기본값은 false입니다.  
유형: Boolean  
유효한 값: true \$1 false  
필수 여부: 아니요

[nextStep](#nextProp)  
한 단계를 성공적으로 완료한 후 다음에 처리할 자동화의 단계를 지정합니다.  
유형: 문자열  
필수 여부: 아니요

[isCritical](#critProp)  
자동화의 성공적 완료에 대해 단계를 심각으로 지정합니다. 이 지정이 있는 단계가 실패하면 자동화는 자동화의 최종 상태를 실패로 보고합니다. 이 속성은 단계에서 명시적으로 정의하는 경우에만 평가됩니다. 단계에서 `onFailure` 속성이 `Continue`로 설정되면 기본값은 false입니다. 그렇지 않으면 이 옵션의 기본값은 true입니다.  
유형: 부울  
유효한 값: true \$1 false  
필수 여부: 아니요

[inputs](#inProp)  
작업에 특정한 속성.  
유형: 맵  
필수 여부: 예

### 예제
<a name="automation-demo"></a>

```
---
description: "Custom Automation Example"
schemaVersion: '0.3'
assumeRole: "{{ AutomationAssumeRole }}"
parameters:
  AutomationAssumeRole:
    type: String
    description: "(Required) The ARN of the role that allows Automation to perform
      the actions on your behalf. If no role is specified, Systems Manager Automation
      uses your IAM permissions to run this runbook."
    default: ''
  InstanceId:
      type: String
      description: "(Required) The Instance Id whose root EBS volume you want to restore the latest Snapshot."
      default: ''
mainSteps:
- name: getInstanceDetails
  action: aws:executeAwsApi
  onFailure: Abort
  inputs:
    Service: ec2
    Api: DescribeInstances
    InstanceIds:
    - "{{ InstanceId }}"
  outputs:
    - Name: availabilityZone
      Selector: "$.Reservations[0].Instances[0].Placement.AvailabilityZone"
      Type: String
    - Name: rootDeviceName
      Selector: "$.Reservations[0].Instances[0].RootDeviceName"
      Type: String
  nextStep: getRootVolumeId
- name: getRootVolumeId
  action: aws:executeAwsApi
  maxAttempts: 3
  onFailure: Abort
  inputs:
    Service: ec2
    Api: DescribeVolumes
    Filters:
    -  Name: attachment.device
       Values: ["{{ getInstanceDetails.rootDeviceName }}"]
    -  Name: attachment.instance-id
       Values: ["{{ InstanceId }}"]
  outputs:
    - Name: rootVolumeId
      Selector: "$.Volumes[0].VolumeId"
      Type: String
  nextStep: getSnapshotsByStartTime
- name: getSnapshotsByStartTime
  action: aws:executeScript
  timeoutSeconds: 45
  onFailure: Abort
  inputs:
    Runtime: python3.8
    Handler: getSnapshotsByStartTime
    InputPayload:
      rootVolumeId : "{{ getRootVolumeId.rootVolumeId }}"
    Script: |-
      def getSnapshotsByStartTime(events,context):
        import boto3

        #Initialize client
        ec2 = boto3.client('ec2')
        rootVolumeId = events['rootVolumeId']
        snapshotsQuery = ec2.describe_snapshots(
          Filters=[
            {
              "Name": "volume-id",
              "Values": [rootVolumeId]
            }
          ]
        )
        if not snapshotsQuery['Snapshots']:
          noSnapshotFoundString = "NoSnapshotFound"
          return { 'noSnapshotFound' : noSnapshotFoundString }
        else:
          jsonSnapshots = snapshotsQuery['Snapshots']
          sortedSnapshots = sorted(jsonSnapshots, key=lambda k: k['StartTime'], reverse=True)
          latestSortedSnapshotId = sortedSnapshots[0]['SnapshotId']
          return { 'latestSnapshotId' : latestSortedSnapshotId }
  outputs:
  - Name: Payload
    Selector: $.Payload
    Type: StringMap
  - Name: latestSnapshotId
    Selector: $.Payload.latestSnapshotId
    Type: String
  - Name: noSnapshotFound
    Selector: $.Payload.noSnapshotFound
    Type: String 
  nextStep: branchFromResults
- name: branchFromResults
  action: aws:branch
  onFailure: Abort
  onCancel: step:startInstance
  inputs:
    Choices:
    - NextStep: createNewRootVolumeFromSnapshot
      Not:
        Variable: "{{ getSnapshotsByStartTime.noSnapshotFound }}"
        StringEquals: "NoSnapshotFound"
  isEnd: true
- name: createNewRootVolumeFromSnapshot
  action: aws:executeAwsApi
  onFailure: Abort
  inputs:
    Service: ec2
    Api: CreateVolume
    AvailabilityZone: "{{ getInstanceDetails.availabilityZone }}"
    SnapshotId: "{{ getSnapshotsByStartTime.latestSnapshotId }}"
  outputs:
    - Name: newRootVolumeId
      Selector: "$.VolumeId"
      Type: String
  nextStep: stopInstance
- name: stopInstance
  action: aws:executeAwsApi
  onFailure: Abort
  inputs:
    Service: ec2
    Api: StopInstances
    InstanceIds:
    - "{{ InstanceId }}"
  nextStep: verifyVolumeAvailability
- name: verifyVolumeAvailability
  action: aws:waitForAwsResourceProperty
  timeoutSeconds: 120
  inputs:
    Service: ec2
    Api: DescribeVolumes
    VolumeIds:
    - "{{ createNewRootVolumeFromSnapshot.newRootVolumeId }}"
    PropertySelector: "$.Volumes[0].State"
    DesiredValues:
    - "available"
  nextStep: verifyInstanceStopped
- name: verifyInstanceStopped
  action: aws:waitForAwsResourceProperty
  timeoutSeconds: 120
  inputs:
    Service: ec2
    Api: DescribeInstances
    InstanceIds:
    - "{{ InstanceId }}"
    PropertySelector: "$.Reservations[0].Instances[0].State.Name"
    DesiredValues:
    - "stopped"
  nextStep: detachRootVolume
- name: detachRootVolume
  action: aws:executeAwsApi
  onFailure: Abort
  isCritical: true
  inputs:
    Service: ec2
    Api: DetachVolume
    VolumeId: "{{ getRootVolumeId.rootVolumeId }}"
  nextStep: verifyRootVolumeDetached
- name: verifyRootVolumeDetached
  action: aws:waitForAwsResourceProperty
  timeoutSeconds: 30
  inputs:
    Service: ec2
    Api: DescribeVolumes
    VolumeIds:
    - "{{ getRootVolumeId.rootVolumeId }}"
    PropertySelector: "$.Volumes[0].State"
    DesiredValues:
    - "available"
  nextStep: attachNewRootVolume
- name: attachNewRootVolume
  action: aws:executeAwsApi
  onFailure: Abort
  inputs:
    Service: ec2
    Api: AttachVolume
    Device: "{{ getInstanceDetails.rootDeviceName }}"
    InstanceId: "{{ InstanceId }}"
    VolumeId: "{{ createNewRootVolumeFromSnapshot.newRootVolumeId }}"
  nextStep: verifyNewRootVolumeAttached
- name: verifyNewRootVolumeAttached
  action: aws:waitForAwsResourceProperty
  timeoutSeconds: 30
  inputs:
    Service: ec2
    Api: DescribeVolumes
    VolumeIds:
    - "{{ createNewRootVolumeFromSnapshot.newRootVolumeId }}"
    PropertySelector: "$.Volumes[0].Attachments[0].State"
    DesiredValues:
    - "attached"
  nextStep: startInstance
- name: startInstance
  action: aws:executeAwsApi
  onFailure: Abort
  inputs:
    Service: ec2
    Api: StartInstances
    InstanceIds:
    - "{{ InstanceId }}"
```

# `aws:approve` - 수동 승인을 위해 자동화 일시 중지
<a name="automation-action-approve"></a>

지정된 보안 주체가 작업을 승인하거나 거부할 때까지 자동화를 일시 중지합니다. 필요한 승인 횟수에 도달하면 자동화가 다시 시작됩니다. 런북의 `mainSteps` 섹션에 승인 단계를 삽입할 수 있습니다.

**참고**  
이 작업은 다중 계정 및 리전 자동화를 지원하지 않습니다. 이 작업에 대한 기본 제한 시간은 7일(604800초)이고 최대 값은 30일(2592000초)입니다. `aws:approve` 단계에서 `timeoutSeconds` 파라미터를 지정하여 제한 시간을 제한 또는 연장할 수 있습니다.

다음 예에서 `aws:approve` 작업은 승인자 중 한 명이 자동화를 승인하거나 거부할 때까지 자동화를 일시 중지합니다. 승인하면 자동화는 간단한 PowerShell 명령을 실행합니다.

------
#### [ YAML ]

```
---
description: RunInstancesDemo1
schemaVersion: '0.3'
assumeRole: "{{ assumeRole }}"
parameters:
  assumeRole:
    type: String
  message:
    type: String
mainSteps:
- name: approve
  action: aws:approve
  timeoutSeconds: 1000
  onFailure: Abort
  inputs:
    NotificationArn: arn:aws:sns:us-east-2:12345678901:AutomationApproval
    Message: "{{ message }}"
    MinRequiredApprovals: 1
    Approvers:
    - arn:aws:iam::12345678901:user/AWS-User-1
- name: run
  action: aws:runCommand
  inputs:
    InstanceIds:
    - i-1a2b3c4d5e6f7g
    DocumentName: AWS-RunPowerShellScript
    Parameters:
      commands:
      - date
```

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

```
{
   "description":"RunInstancesDemo1",
   "schemaVersion":"0.3",
   "assumeRole":"{{ assumeRole }}",
   "parameters":{
      "assumeRole":{
         "type":"String"
      },
      "message":{
         "type":"String"
      }
   },
   "mainSteps":[
      {
         "name":"approve",
         "action":"aws:approve",
         "timeoutSeconds":1000,
         "onFailure":"Abort",
         "inputs":{
            "NotificationArn":"arn:aws:sns:us-east-2:12345678901:AutomationApproval",
            "Message":"{{ message }}",
            "MinRequiredApprovals":1,
            "Approvers":[
               "arn:aws:iam::12345678901:user/AWS-User-1"
            ]
         }
      },
      {
         "name":"run",
         "action":"aws:runCommand",
         "inputs":{
            "InstanceIds":[
               "i-1a2b3c4d5e6f7g"
            ],
            "DocumentName":"AWS-RunPowerShellScript",
            "Parameters":{
               "commands":[
                  "date"
               ]
            }
         }
      }
   ]
}
```

------

콘솔에서 승인을 기다리는 자동화를 승인 또는 거부할 수 있습니다.

**대기 중인 자동화를 승인하거나 거부하려면**

1. [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/)에서 AWS Systems Manager 콘솔을 엽니다.

1. 왼쪽 탐색 창에서 **Automation**을 선택합니다.

1. **대기 중** 상태와 함께 자동화 옆의 옵션을 선택합니다.  
![\[자동화 승인/거부 페이지에 액세스\]](http://docs.aws.amazon.com/ko_kr/systems-manager/latest/userguide/images/automation-approve-action-aws.png)

1. **승인/거부**를 선택합니다.

1. 자동화의 세부 정보를 검토합니다.

1. **승인** 또는 **거부**를 선택하고 필요에 따라 설명을 입력한 후 **제출**을 선택합니다.

**입력 예제**

------
#### [ YAML ]

```
NotificationArn: arn:aws:sns:us-west-1:12345678901:Automation-ApprovalRequest
Message: Please approve this step of the Automation.
MinRequiredApprovals: 3
Approvers:
- IamUser1
- IamUser2
- arn:aws:iam::12345678901:user/IamUser3
- arn:aws:iam::12345678901:role/IamRole
```

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

```
{
   "NotificationArn":"arn:aws:sns:us-west-1:12345678901:Automation-ApprovalRequest",
   "Message":"Please approve this step of the Automation.",
   "MinRequiredApprovals":3,
   "Approvers":[
      "IamUser1",
      "IamUser2",
      "arn:aws:iam::12345678901:user/IamUser3",
      "arn:aws:iam::12345678901:role/IamRole"
   ]
}
```

------

NotificationArn  
Automation 승인을 위한 Amazon Simple Notification Service(Amazon SNS) 주제의 Amazon 리소스 이름(ARN)입니다. 실행서에서 `aws:approve` 단계를 지정하면 보안 주체가 Automation 단계를 승인하거나 거부해야 한다고 알려주는 메시지가 이 주제에 전송됩니다. Amazon SNS 주제의 제목에는 "Automation"을 접두사로 지정해야 합니다.  
유형: 문자열  
필수 항목 여부: 아니요

Message  
승인 요청을 전송할 때 Amazon SNS 주제에 포함할 정보입니다. 최대 메시지 길이는 4,096자입니다.  
유형: 문자열  
필수 여부: 아니요

MinRequiredApprovals  
자동화를 다시 시작하는 데 필요한 최소 승인 횟수입니다. 값을 지정하지 않으면 기본값 1이 사용됩니다. 이 파라미터의 값은 양수여야 합니다. 이 파라미터의 값은 `Approvers` 파라미터에 정의된 승인자 수를 초과할 수 없습니다.  
유형: 정수  
필수 여부: 아니요

승인자  
작업을 승인하거나 거부할 수 있는 AWS 인증 보안 주체의 목록입니다. 최대 승인자자 수는 10명입니다. 다음 형식을 사용하여 보안 주체를 지정할 수 있습니다.  
+ 사용자 이름
+ 사용자 ARN
+ IAM 역할 ARN
+ IAM 수임 역할 ARN
유형: StringList  
필수 여부: 예

EnhancedApprovals  
이 입력은 Change Manager 템플릿에서만 사용됩니다. 작업을 승인하거나 거부할 수 있는 AWS의 인증된 보안 주체, IAM 보안 주체 유형, 최소 승인자 수 목록. 다음은 예제입니다.  

```
schemaVersion: "0.3"
emergencyChange: false
autoApprovable: false
mainSteps:
    - name: ApproveAction1
    action: aws:approve
    timeoutSeconds: 604800
    inputs:
        Message: Please approve this change request
        MinRequiredApprovals: 3
        EnhancedApprovals:
        Approvers:
            - approver: John Stiles
            type: IamUser
            minRequiredApprovals: 0
            - approver: Ana Carolina Silva
            type: IamUser
            minRequiredApprovals: 0
            - approver: GroupOfThree
            type: IamGroup
            minRequiredApprovals: 0
            - approver: RoleOfTen
            type: IamRole
            minRequiredApprovals: 0
```
유형: StringList  
필수 여부: 예

**출력**

ApprovalStatus  
단계의 승인 상태입니다. 상태는 Approved, Rejected, Waiting 중 하나일 수 있습니다. Waiting은 승인자의 입력을 대기 중임을 나타냅니다.  
유형: 문자열

ApproverDecisions  
각 승인자의 승인 결정을 포함하는 JSON 맵입니다.  
유형: MapList

# `aws:assertAwsResourceProperty` - AWS 리소스 상태 또는 이벤트 상태 어설션
<a name="automation-action-assertAwsResourceProperty"></a>

`aws:assertAwsResourceProperty` 작업은 특정 Automation 단계에 대해 특정 리소스 상태 또는 이벤트 상태를 어설션할 수 있게 합니다.

**참고**  
`aws:assertAwsResourceProperty` 작업은 자동 스로틀링 재시도를 지원합니다. 자세한 내용은 [스로틀링된 작업에 대한 자동 재시도 구성](automation-throttling-retry.md) 섹션을 참조하세요.

이 작업을 사용하는 방법에 관한 자세한 내용은 [추가 런북 예제](automation-document-examples.md) 섹션을 참조하세요.

**Input**  
입력은 선택하는 API 작업에 의해 정의됩니다.

------
#### [ YAML ]

```
action: aws:assertAwsResourceProperty
inputs:
  Service: The official namespace of the service
  Api: The API operation or method name
  API operation inputs or parameters: A value
  PropertySelector: Response object
  DesiredValues:
  - Desired property values
```

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

```
{
  "action": "aws:assertAwsResourceProperty",
  "inputs": {
    "Service":"The official namespace of the service",
    "Api":"The API operation or method name",
    "API operation inputs or parameters":"A value",
    "PropertySelector": "Response object",
    "DesiredValues": [
      "Desired property values"
    ]
  }
}
```

------

서비스  
실행하려는 API 작업을 포함하는 AWS 서비스 네임스페이스입니다. 예를 들면 Systems Manager의 네임스페이스는 `ssm`입니다. Amazon EC2의 네임스페이스는 `ec2`입니다. *AWS CLI 명령 참조*의 [사용 가능한 서비스](https://docs.aws.amazon.com/cli/latest/reference/#available-services) 섹션에서 지원되는 AWS 서비스 네임스페이스 목록을 볼 수 있습니다.  
유형: 문자열  
필수 항목 여부: 예

Api  
실행할 API 작업의 이름입니다. 다음 [[서비스 참조(Services Reference)](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/index.html)] 페이지의 왼쪽 탐색 영역에서 서비스를 선택하여 API 작업(메서드라고도 함)을 볼 수 있습니다. 호출할 서비스에 대한 **클라이언트** 섹션에서 메서드를 선택합니다. 예를 들어 Amazon Relational Database Service(Amazon RDS)에 대한 모든 API 작업(메서드)이 [Amazon RDS 메서드](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/rds.html) 페이지에 나열됩니다.  
유형: 문자열  
필수 항목 여부: 예

API 작업 입력  
하나 이상의 API 작업 입력입니다. 다음 [서비스 참조](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/index.html) 페이지의 왼쪽 탐색 영역에서 서비스를 선택하여 사용할 수 있는 입력(파라미터)을 볼 수 있습니다. 호출할 서비스에 대한 **클라이언트** 섹션에서 메서드를 선택합니다. 예를 들어 Amazon RDS에 대한 모든 메서드는 [Amazon RDS 메서드](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/rds.html) 페이지에 나열됩니다. [describe\$1db\$1instances](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/rds.html#RDS.Client.describe_db_instances) 메서드를 선택하고 아래로 스크롤하여 **DBInstanceIdentifier**, **Name** 및 **Values** 같은 사용할 수 있는 파라미터를 볼 수 있습니다. 두 개 이상의 입력을 지정하려면 다음 형식을 사용합니다.  

```
inputs:
  Service: The official namespace of the service
  Api: The API operation name
  API input 1: A value
  API Input 2: A value
  API Input 3: A value
```

```
"inputs":{
      "Service":"The official namespace of the service",
      "Api":"The API operation name",
      "API input 1":"A value",
      "API Input 2":"A value",
      "API Input 3":"A value"
}
```
형식: 선택한 API 작업에 의해 결정됨  
필수 여부: 예

PropertySelector  
응답 객체의 특정 속성에 대한 JSONPath입니다. 다음 [서비스 참조](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/index.html) 페이지의 왼쪽 탐색 영역에서 서비스를 선택하여 응답 객체를 볼 수 있습니다. 호출할 서비스에 대한 **클라이언트** 섹션에서 메서드를 선택합니다. 예를 들어 Amazon RDS에 대한 모든 메서드는 [Amazon RDS 메서드](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/rds.html) 페이지에 나열됩니다. [describe\$1db\$1instances](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/rds.html#RDS.Client.describe_db_instances) 메서드를 선택하고 **Response Structure(응답 구조)** 섹션이 있는 아래쪽으로 스크롤합니다. **DBInstances**가 응답 객체로 나열됩니다.  
유형: 문자열  
필수 항목 여부: 예

DesiredValues  
필요한 상태 또는 자동화를 계속 진행하기 위해 충족되어야 할 상태입니다. 부울 값을 지정할 경우 True 또는 False 같은 대문자를 사용해야 합니다.  
유형: StringList  
필수 여부: 예

# `aws:branch` - 조건부 자동화 단계 실행
<a name="automation-action-branch"></a>

`aws:branch` 작업을 통해 한 단계에서 여러 선택 항목을 평가한 다음 평가 결과에 따라 실행서의 다른 단계로 이동하는 동적 자동화를 생성할 수 있습니다.

단계에 대한 `aws:branch` 작업을 지정할 경우 해당 자동화에서 평가해야 하는 `Choices`를 지정할 수 있습니다. `Choices`는 실행서의 `Parameters` 섹션에 지정한 값이나 이전 단계의 출력으로 생성된 동적 값에 기초할 수 있습니다. 이 자동화는 부울 식을 사용하여 각 선택을 평가합니다. 첫 번째 선택 항목이 true이면 이 자동화는 해당 선택 항목에 지정된 단계로 이동합니다. 첫 번째 선택 항목이 false이면 이 자동화는 다음 선택 항목을 평가합니다. 이 자동화는 true 선택 항목을 처리할 때까지 각 선택 항목을 계속 평가합니다. 그런 다음 이 자동화는 true인 선택 항목에 지정된 단계로 이동합니다.

값이 true인 선택 항목이 없을 경우 이 자동화는 단계에 `default` 값이 포함되었는지 검사합니다. default 값은 선택 항목 중에 true인 항목이 없는 경우 자동화에서 이동해야 하는 단계를 정의합니다. 단계에 대한 `default` 값이 지정되지 않은 경우 자동화는 실행서의 다음 단계를 처리합니다.

`aws:branch` 작업은 `And`, `Not` 및 `Or` 연산자의 조합을 사용한 복합 선택 항목 평가를 지원합니다. 예제 실행서와 다양한 연산자를 사용하는 예제 등 `aws:branch`를 사용하는 방법에 대한 자세한 내용은 [런북에서 조건문 사용](automation-branch-condition.md) 섹션을 참조하세요.

**Input**  
단계에서 하나 이상의 `Choices`를 지정합니다. `Choices`는 실행서의 `Parameters` 섹션에 지정한 값이나 이전 단계의 출력으로 생성된 동적 값에 기초할 수 있습니다. 다음은 파라미터를 평가하는 YAML 샘플입니다.

```
mainSteps:
- name: chooseOS
  action: aws:branch
  inputs:
    Choices:
    - NextStep: runWindowsCommand
      Variable: "{{Name of a parameter defined in the Parameters section. For example: OS_name}}"
      StringEquals: windows
    - NextStep: runLinuxCommand
      Variable: "{{Name of a parameter defined in the Parameters section. For example: OS_name}}"
      StringEquals: linux
    Default:
      sleep3
```

다음은 이전 단계의 출력을 평가하는 YAML 샘플입니다.

```
mainSteps:
- name: chooseOS
  action: aws:branch
  inputs:
    Choices:
    - NextStep: runPowerShellCommand
      Variable: "{{Name of a response object. For example: GetInstance.platform}}"
      StringEquals: Windows
    - NextStep: runShellCommand
      Variable: "{{Name of a response object. For example: GetInstance.platform}}"
      StringEquals: Linux
    Default:
      sleep3
```

Choices  
자동화에서 처리할 다음 단계를 결정할 때 평가해야 하는 하나 이상의 표현식입니다. Choices는 부울 식을 사용하여 평가됩니다. 각 선택 항목은 다음 옵션을 정의해야 합니다.  
+ **NextStep**: 지정된 선택 항목이 true인 경우 처리할 실행서의 다음 단계.
+ **Variable**: 실행서의 `Parameters` 섹션에 정의된 파라미터의 이름을 지정합니다. 또는 실행서의 이전 단계에서 얻은 출력 객체를 지정합니다. `aws:branch`용 변수 생성에 대한 자세한 내용은 [출력 변수 생성 정보](automation-branch-condition.md#branch-action-output) 섹션을 참조하세요.
+ **Operation**: 선택 항목(choice)을 평가하는 데 사용되는 기준입니다. `aws:branch` 작업에서는 다음 연산을 지원합니다.

**문자열 연산**
  + StringEquals
  + EqualsIgnoreCase
  + StartsWith
  + EndsWith
  + 포함

**수치 연산**
  + NumericEquals
  + NumericGreater
  + NumericLesser
  + NumericGreaterOrEquals
  + NumericLesser
  + NumericLesserOrEquals

**부울 연산**
  + BooleanEquals
**중요**  
실행서를 생성하면 시스템에서 실행서의 각 작업을 검증합니다. 작업이 지원되지 않는 경우 실행서를 생성할 때 오류가 발생합니다.

기본값  
`Choices` 중에 true인 항목이 없는 경우 자동화에서 이동해야 할 단계의 이름입니다.  
유형: 문자열  
필수 여부: 아니요

**참고**  
`aws:branch` 작업은 `And`, `Or` 및 `Not` 연산자를 지원합니다. 연산자를 사용하는 `aws:branch`의 예는 [런북에서 조건문 사용](automation-branch-condition.md) 섹션을 참조하세요.

# `aws:changeInstanceState` - 인스턴스 상태 변경 또는 어설션
<a name="automation-action-changestate"></a>

인스턴스의 상태를 변경하거나 어설션합니다.

이 작업은 어설션 모드에서 사용될 수 있습니다(API를 실행하여 상태를 변경하는 것이 아니라 인스턴스가 원하는 상태에 있는지 확인함). 어설션 모드를 사용하려면 `CheckStateOnly` 파라미터를 true로 설정합니다. 이 모드는 배경에서 장시간 실행할 수 있는 비동기식 명령인 Sysprep 명령을 Windows Server에서 실행할 때 유용합니다. Amazon Machine Image(AMI)를 생성하기 전에 인스턴스가 중지되게 할 수 있습니다.

**참고**  
이 작업의 기본 제한 시간 값은 3,600초(1시간)입니다. `aws:changeInstanceState` 단계에서 `timeoutSeconds` 파라미터를 지정하여 제한 시간을 제한 또는 연장할 수 있습니다.

**참고**  
`aws:changeInstanceState` 작업은 자동 스로틀링 재시도를 지원합니다. 자세한 내용은 [스로틀링된 작업에 대한 자동 재시도 구성](automation-throttling-retry.md) 섹션을 참조하세요.

**입력**

------
#### [ YAML ]

```
name: stopMyInstance
action: aws:changeInstanceState
maxAttempts: 3
timeoutSeconds: 3600
onFailure: Abort
inputs:
  InstanceIds:
  - i-1234567890abcdef0
  CheckStateOnly: true
  DesiredState: stopped
```

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

```
{
    "name":"stopMyInstance",
    "action": "aws:changeInstanceState",
    "maxAttempts": 3,
    "timeoutSeconds": 3600,
    "onFailure": "Abort",
    "inputs": {
        "InstanceIds": ["i-1234567890abcdef0"],
        "CheckStateOnly": true,
        "DesiredState": "stopped"
    }
}
```

------

InstanceIds  
인스턴스의 ID.  
유형: StringList  
필수 여부: 예

CheckStateOnly  
false인 경우 인스턴스 상태를 원하는 상태로 설정합니다. true인 경우 폴링을 사용하여 원하는 상태를 어설션합니다.  
기본값: `false`  
유형: 부울  
필수 여부: 아니요

DesiredState  
원하는 상태. `running`으로 설정하는 경우 이 작업은 완료하기 전에 Amazon EC2 상태가 `Running`, 인스턴스 상태가 `OK` 그리고 시스템 상태가 `OK`가 될 때까지 기다립니다.  
유형: 문자열  
유효한 값: `running` \$1 `stopped` \$1 `terminated`  
필수 여부: 예

강제  
설정되면 인스턴스가 중지합니다. 인스턴스는 파일 시스템 캐시 또는 파일 시스템 메타데이터를 플러시하지 않습니다. 이 옵션을 사용하는 경우 파일 시스템 확인 및 복구 절차를 수행해야 합니다. 이 옵션은 Windows Server용 EC2 인스턴스에는 권장하지 않습니다.  
유형: 부울  
필수 여부: 아니요

AdditionalInfo  
예약.  
유형: 문자열  
필수 여부: 아니요

**출력**  
없음

# `aws:copyImage` - Amazon Machine Image 복사 또는 암호화
<a name="automation-action-copyimage"></a>

모든 AWS 리전의 Amazon Machine Image(AMI)를 현재 리전에 복사합니다. 이 작업은 새 AMI를 암호화할 수도 있습니다.

**참고**  
`aws:copyImage` 작업은 자동 스로틀링 재시도를 지원합니다. 자세한 내용은 [스로틀링된 작업에 대한 자동 재시도 구성](automation-throttling-retry.md) 섹션을 참조하세요.

**Input**  
이 작업은 대부분의 `CopyImage` 파라미터를 지원합니다. 자세한 내용은 [CopyImage](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CopyImage.html)를 참조하세요.

다음 예에서는 서울 리전의 AMI 복사본을 생성합니다(`SourceImageID`: ami-0fe10819. `SourceRegion`: ap-northeast-2). 새 AMI가 Automation 작업을 시작한 리전에 복사됩니다. `Encrypted` 플래그(옵션)가 `true`로 설정되어 있으므로 복사한 AMI가 암호화됩니다.

------
#### [ YAML ]

```
name: createEncryptedCopy
action: aws:copyImage
maxAttempts: 3
onFailure: Abort
inputs:
  SourceImageId: ami-0fe10819
  SourceRegion: ap-northeast-2
  ImageName: Encrypted Copy of LAMP base AMI in ap-northeast-2
  Encrypted: true
```

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

```
{   
    "name": "createEncryptedCopy",
    "action": "aws:copyImage",
    "maxAttempts": 3,
    "onFailure": "Abort",
    "inputs": {
        "SourceImageId": "ami-0fe10819",
        "SourceRegion": "ap-northeast-2",
        "ImageName": "Encrypted Copy of LAMP base AMI in ap-northeast-2",
        "Encrypted": true
    }   
}
```

------

SourceRegion  
원본 AMI가 존재하는 리전입니다.  
유형: 문자열  
필수 항목 여부: 예

SourceImageId  
원본 리전에서 복사할 AMI ID입니다.  
유형: 문자열  
필수 항목 여부: 예

ImageName  
새 이미지의 이름입니다.  
유형: 문자열  
필수 항목 여부: 예

ImageDescription  
대상 이미지에 대한 설명입니다.  
유형: 문자열  
필수 여부: 아니요

Encrypted  
대상 AMI를 암호화합니다.  
유형: 부울  
필수 여부: 아니요

KmsKeyId  
복사 작업 중에 이미지의 스냅샷을 암호화할 때 사용할 AWS KMS key의 전체 Amazon 리소스 이름(ARN)입니다. 자세한 내용은 [CopyImage](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/api_copyimage.html)를 참조하세요.  
유형: 문자열  
필수 여부: 아니요

ClientToken  
요청 멱등성을 보장하기 위해 제공하는 고유의 대/소문자 구분 식별자입니다. 자세한 내용은 [CopyImage](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/api_copyimage.html)를 참조하세요.  
유형: 문자열  
필수 여부: 아니요출력

ImageId  
복사한 이미지의 ID입니다.

ImageState  
복사한 이미지의 상태입니다.  
유효한 값: `available` \$1 `pending` \$1 `failed`

# `aws:createImage` - Amazon Machine Image 생성
<a name="automation-action-create"></a>

실행 중이거나 중지 중이거나 중지된 인스턴스에서 Amazon Machine Image(AMI)를 생성하고 `ImageState`가 `available`이 되도록 폴링합니다.

**참고**  
`aws:createImage` 작업은 자동 스로틀링 재시도를 지원합니다. 자세한 내용은 [스로틀링된 작업에 대한 자동 재시도 구성](automation-throttling-retry.md) 섹션을 참조하세요.

**Input**  
이 작업은 다음 `CreateImage` 파라미터를 지원합니다. 자세한 내용은 [CreateImage](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateImage.html)를 참조하세요.

------
#### [ YAML ]

```
name: createMyImage
action: aws:createImage
maxAttempts: 3
onFailure: Abort
inputs:
  InstanceId: i-1234567890abcdef0
  ImageName: AMI Created on{{global:DATE_TIME}}
  NoReboot: true
  ImageDescription: My newly created AMI
```

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

```
{
    "name": "createMyImage",
    "action": "aws:createImage",
    "maxAttempts": 3,
    "onFailure": "Abort",
    "inputs": {
        "InstanceId": "i-1234567890abcdef0",
        "ImageName": "AMI Created on{{global:DATE_TIME}}",
        "NoReboot": true,
        "ImageDescription": "My newly created AMI"
    }
}
```

------

InstanceId  
인스턴스의 ID  
유형: 문자열  
필수 항목 여부: 예

ImageName  
이미지의 이름입니다.  
유형: 문자열  
필수 항목 여부: 예

ImageDescription  
이미지의 설명.  
유형: 문자열  
필수 여부: 아니요

NoReboot  
부울 리터럴.  
기본적으로 Amazon Elastic Compute Cloud(Amazon EC2)는 이미지를 생성하기 전에 인스턴스를 종료하고 재부팅하려고 시도합니다. [**재부팅 안 함(No Reboot)**] 옵션이 `true`로 설정된 경우 Amazon EC2는 이미지를 생성하기 전에 인스턴스를 종료하지 않습니다. 이 옵션을 사용하는 경우 생성된 이미지의 파일 시스템 무결성을 보장할 수 없습니다.  
인스턴스에서 AMI를 생성한 후 인스턴스가 실행되지 않게 하려면 먼저 [`aws:changeInstanceState` - 인스턴스 상태 변경 또는 어설션](automation-action-changestate.md) 작업을 사용하여 인스턴스를 중지한 다음 [**NoReboot**] 옵션을 `true`로 설정한 상태에서 이 `aws:createImage` 작업을 사용합니다.  
유형: 부울  
필수 여부: 아니요

BlockDeviceMappings  
해당 인스턴스용 블록 디바이스.  
유형: 맵  
필수 여부: 아니요출력

ImageId  
새롭게 생성된 이미지의 ID.  
유형: 문자열

ImageState  
이미지의 현재 상태입니다. 상태가 사용 가능한 경우 이미지가 성공적으로 등록되고 인스턴스를 시작하는 데 사용할 수 있습니다.  
유형: 문자열

# `aws:createStack` - CloudFormation 스택 생성
<a name="automation-action-createstack"></a>

템플릿에서 AWS CloudFormation 스택을 생성합니다.

**참고**  
`aws:createStack` 작업은 자동 스로틀링 재시도를 지원합니다. 자세한 내용은 [스로틀링된 작업에 대한 자동 재시도 구성](automation-throttling-retry.md) 섹션을 참조하세요.

CloudFormation 스택 생성에 대한 추가 정보는 *AWS CloudFormation API Reference*의 [CreateStack](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_CreateStack.html)을 참조하세요.

**입력**

------
#### [ YAML ]

```
name: makeStack
action: aws:createStack
maxAttempts: 1
onFailure: Abort
inputs:
  Capabilities:
  - CAPABILITY_IAM
  StackName: myStack
  TemplateURL: http://s3.amazonaws.com/amzn-s3-demo-bucket/myStackTemplate
  TimeoutInMinutes: 5
  Parameters:
    - ParameterKey: LambdaRoleArn
      ParameterValue: "{{LambdaAssumeRole}}"
    - ParameterKey: createdResource
      ParameterValue: createdResource-{{automation:EXECUTION_ID}}
```

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

```
{
    "name": "makeStack",
    "action": "aws:createStack",
    "maxAttempts": 1,
    "onFailure": "Abort",
    "inputs": {
        "Capabilities": [
            "CAPABILITY_IAM"
        ],
        "StackName": "myStack",
        "TemplateURL": "http://s3.amazonaws.com/amzn-s3-demo-bucket/myStackTemplate",
        "TimeoutInMinutes": 5,
        "Parameters": [
          {
            "ParameterKey": "LambdaRoleArn",
            "ParameterValue": "{{LambdaAssumeRole}}"
          },
          {
            "ParameterKey": "createdResource",
            "ParameterValue": "createdResource-{{automation:EXECUTION_ID}}"
          }
    }
}
```

------

기능  
CloudFormation에서 특정 스택을 생성할 수 있으려면 지정해야 하는 값의 목록입니다. 일부 스택 템플릿은 AWS 계정의 권한에 영향을 줄 수 있는 리소스를 포함합니다. 이러한 스택에서는 이 파라미터를 지정하여 스택의 기능을 명시적으로 확인해야 합니다.  
유효값에는 `CAPABILITY_IAM`, `CAPABILITY_NAMED_IAM` 및 `CAPABILITY_AUTO_EXPAND`이 있습니다.  
**CAPABILITY\$1IAM 및 CAPABILITY\$1NAMED\$1IAM**  
IAM 리소스가 있는 경우 어느 기능이든 지정할 수 있습니다. 사용자 정의 이름을 갖는 IAM 리소스가 있는 경우 `CAPABILITY_NAMED_IAM`을 지정해야 합니다. 이 파라미터를 지정하지 않으면 이 작업은 `InsufficientCapabilities` 오류를 반환합니다. 다음 리소스의 경우 `CAPABILITY_IAM` 또는 `CAPABILITY_NAMED_IAM`을 지정해야 합니다.
+ [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-accesskey.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-accesskey.html)
+ [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-group.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-group.html)
+ [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-instanceprofile.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-instanceprofile.html)
+ [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-policy.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-policy.html)
+ [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html)
+ [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-user.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-user.html)
+ [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-addusertogroup.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-addusertogroup.html)
스택 템플릿에 이러한 리소스가 포함되어 있는 경우, 관련 권한을 모두 검토하고 필요에 따라 권한을 편집하는 것이 좋습니다.  
자세한 내용은 [CloudFormation 템플릿에서 IAM 리소스 승인](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-iam-template.html#capabilities)을 참조하세요.  
**CAPABILITY\$1AUTO\$1EXPAND**  
일부 템플릿에는 매크로가 포함되어 있습니다. 매크로는 템플릿에서 사용자 지정 처리를 수행합니다. 여기에는 찾기 및 바꾸기 작업과 같은 간단한 작업과 전체 템플릿의 광범위한 변환을 위한 모든 방법을 포함할 수 있습니다. 그러므로 사용자는 일반적으로 처리된 템플릿에서 변경 세트를 생성하여 실제로 스택을 생성하기 전에 매크로로 인한 변경 사항을 검토할 수 있습니다. 스택 템플릿에 매크로가 하나 이상 포함되어 있고 변경 세트의 결과 변경 사항을 먼저 검토하지 않고 처리된 템플릿에서 직접 스택을 생성하도록 선택한 경우 이 기능을 확인해야 합니다.
자세한 내용은 *AWS CloudFormation 사용 설명서*의 [템플릿에서 사용자 정의 처리를 수행하는 AWS CloudFormation 매크로 사용](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-macros.html)을 참조하세요.  
형식: 문자열 배열  
유효 값: `CAPABILITY_IAM | CAPABILITY_NAMED_IAM | CAPABILITY_AUTO_EXPAND`  
필수 여부: 아니요

ClientRequestToken  
이 CreateStack 요청에 대한 고유 식별자입니다. 이 단계에서 maxAttempts를 1보다 큰 값으로 설정한 경우 이 토큰을 지정하세요. 이 토큰을 지정하면 사용자가 같은 이름으로 새 스택을 생성하려는 것이 아님을 CloudFormation에서 알게 됩니다.  
유형: 문자열  
필수 여부: 아니요  
길이 제약: 최소 길이 1. 최대 길이 128.  
패턴: [a-zA-Z0-9][-a-zA-Z0-9]\$1

DisableRollback  
스택 생성에 실패한 경우 스택의 롤백을 해제하려면 `true`로 설정합니다.  
조건: `DisableRollback` 또는 `OnFailure` 파라미터를 지정할 수 있지만, 둘 다 지정하지 않을 수도 있습니다.  
기본값: `false`  
유형: 부울  
필수 여부: 아니요

NotificationARNs  
스택 관련 이벤트를 게시할 Amazon Simple Notification Service(Amazon SNS) 주제 ARN입니다. Amazon SNS 콘솔([https://console.aws.amazon.com/sns/v3/home](https://console.aws.amazon.com/sns/v3/home))을 사용하여 SNS 주제 ARN을 찾을 수 있습니다.  
형식: 문자열 배열  
배열 멤버: 최대 항목 수 5개.  
필수 여부: 아니요

OnFailure  
스택 생성에 실패한 경우 취할 조치를 결정합니다. `DO_NOTHING`, `ROLLBACK` 또는 `DELETE`를 지정해야 합니다.  
조건: `OnFailure` 또는 `DisableRollback` 파라미터를 지정할 수 있지만, 둘 다 지정하지 않을 수도 있습니다.  
기본값: `ROLLBACK`  
유형: 문자열  
유효한 값:` DO_NOTHING | ROLLBACK | DELETE`  
필수 여부: 아니요

파라미터  
스택에 대한 입력 파라미터를 지정하는 `Parameter` 구조의 목록. 자세한 내용은 [Parameter](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_Parameter.html) 데이터 형식을 참조하세요.  
형식: [Parameter](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_Parameter.html) 객체 배열   
필수 여부: 아니요

ResourceTypes  
이 스택 생성 작업에 대해 함께 작업할 수 있는 권한을 갖는 템플릿 리소스 유형. 예: `AWS::EC2::Instance`, `AWS::EC2::*` 또는 `Custom::MyCustomInstance`. 템플릿 리소스 유형을 기술하려면 다음 구문을 사용합니다.  
+ 모든 AWS 리소스의 경우:

  ```
  AWS::*
  ```
+ 모든 사용자 지정 리소스의 경우:

  ```
  Custom::*
  ```
+ 특정 사용자 지정 리소스의 경우:

  ```
  Custom::logical_ID
  ```
+ 특정 AWS 서비스에 대한 모든 리소스의 경우:

  ```
  AWS::service_name::*
  ```
+ 특정 AWS 리소스의 경우:

  ```
  AWS::service_name::resource_logical_ID
  ```
리소스 유형 목록에 사용자가 생성 중인 리소스가 포함되어 있지 않으면 스택 생성에 실패합니다. 기본적으로 CloudFormation은 모든 리소스 유형에 권한을 부여합니다. IAM은 IAM 정책의 CloudFormation별 조건 키에 이 파라미터를 사용합니다. 자세한 내용은 [AWS Identity and Access Management을 통한 액세스 제어](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-iam-template.html)를 참조하세요.  
형식: 문자열 배열  
길이 제약: 최소 길이 1. 최대 길이는 256.  
필수 여부: 아니요

RoleARN  
CloudFormation이 스택을 생성하기 위해 수임하는 IAM 역할의 Amazon 리소스 이름(ARN)입니다. CloudFormation은 역할의 자격 증명을 사용하여 사용자를 대신하여 호출합니다. CloudFormation은 스택의 모든 향후 작업에 항상 이 역할을 사용합니다. 사용자에게 스택에서 작업할 수 있는 권한이 있는 경우에는 역할을 전달할 수 있는 권한은 없더라도 CloudFormation에서 이 역할을 사용합니다. 역할이 최소한의 권한을 부여하는지 확인하세요.  
값을 지정하지 않으면 CloudFormation에서는 이전에 스택과 연결된 역할을 사용합니다. 사용 가능한 역할이 없으면 CloudFormation에서는 사용자 자격 증명으로부터 생성되는 임시 세션을 사용합니다.  
유형: 문자열  
길이 제약: 최소 길이는 20. 최대 길이는 2,048.  
필수 여부: 아니요

StackName  
스택과 연결되어 있는 이름. 이름은 스택을 생성하는 리전에서 고유해야 합니다.  
스택 이름에는 영숫자(대소문자 구분)와 하이픈만 사용할 수 있습니다. 영문자로 시작해야 하고 128자 이하여야 합니다.
유형: 문자열  
필수 항목 여부: 예

StackPolicyBody  
스택 정책 본문이 포함된 구조. 자세한 내용은 [스택 리소스에 대한 업데이트 방지](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/protect-stack-resources.html)를 참조하세요.  
조건: `StackPolicyBody` 또는 `StackPolicyURL` 파라미터를 지정할 수 있지만, 둘 다 지정하지 않을 수도 있습니다.  
유형: 문자열  
길이 제약 조건: 최소 길이는 1입니다. 최대 길이는 16384입니다.  
필수 여부: 아니요

StackPolicyURL  
스택 정책이 포함된 파일의 위치. URL은 스택과 동일한 리전의 S3 버킷에 있는 정책을 가리켜야 합니다. 스택 정책에 허용되는 최대 파일 크기는 16KB입니다.  
조건: `StackPolicyBody` 또는 `StackPolicyURL` 파라미터를 지정할 수 있지만, 둘 다 지정하지 않을 수도 있습니다.  
유형: 문자열  
길이 제약: 최소 길이 1. 최대 길이 1350.  
필수 여부: 아니요

Tags  
이 스택과 연결할 키-값 페어. 또한 CloudFormation은 이러한 태그를 해당 스택에 생성된 리소스로 전파합니다. 태그를 최대 10개까지 지정할 수 있습니다.  
형식: [Tag](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_Tag.html) 객체 배열   
필수 여부: 아니요

TemplateBody  
최소 길이가 1바이트이고 최대 길이가 51,200바이트인 템플릿 본문이 포함된 구조. 자세한 내용은 [Template Anatomy](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-anatomy.html)를 참조하세요.  
조건: `TemplateBody` 또는 `TemplateURL` 파라미터를 지정할 수 있지만, 둘 다 지정하지 않을 수도 있습니다.  
유형: 문자열  
길이 제약: 최소 길이 1.  
필수 여부: 아니요

TemplateURL  
템플릿 본문이 포함된 파일의 위치. URL은 S3 버킷에 있는 템플릿을 가리켜야 합니다. 템플릿에 허용되는 최대 크기는 460,800바이트입니다. 자세한 내용은 [Template Anatomy](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-anatomy.html)를 참조하세요.  
조건: `TemplateBody` 또는 `TemplateURL` 파라미터를 지정할 수 있지만, 둘 다 지정하지 않을 수도 있습니다.  
유형: 문자열  
길이 제약: 최소 길이 1. 최대 길이 1024.  
필수 여부: 아니요

TimeoutInMinutes  
스택 상태가 `CREATE_FAILED`가 되기 전에 경과할 수 있는 시간. `DisableRollback`이 설정되지 않거나 `false`로 설정되면 스택은 롤백됩니다.  
타입: 정수  
유효 범위: 최소값 1.  
필수 여부: 아니요

## 출력
<a name="automation-action-createstack-output"></a>

StackId  
스택의 고유 식별자.  
유형: 문자열

StackStatus  
스택의 현재 상태.  
타입: 문자열  
유효 값: `CREATE_IN_PROGRESS | CREATE_FAILED | CREATE_COMPLETE | ROLLBACK_IN_PROGRESS | ROLLBACK_FAILED | ROLLBACK_COMPLETE | DELETE_IN_PROGRESS | DELETE_FAILED | DELETE_COMPLETE | UPDATE_IN_PROGRESS | UPDATE_COMPLETE_CLEANUP_IN_PROGRESS | UPDATE_COMPLETE | UPDATE_ROLLBACK_IN_PROGRESS | UPDATE_ROLLBACK_FAILED | UPDATE_ROLLBACK_COMPLETE_CLEANUP_IN_PROGRESS | UPDATE_ROLLBACK_COMPLETE | REVIEW_IN_PROGRESS`  
필수 여부: 예

StackStatusReason  
스택 상태와 관련된 성공 또는 실패 메시지.  
유형: 문자열  
필수 여부: 아니요  
자세한 내용은 [CreateStack](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_CreateStack.html)을 참조하세요.

## 보안 고려 사항
<a name="automation-action-createstack-security"></a>

`aws:createStack` 작업을 사용하려면 먼저 IAM Automation 수임 역할에 다음 정책을 할당해야 합니다. assume role에 대한 자세한 내용은 [작업 1: Automation을 위한 서비스 역할 생성](automation-setup-iam.md#create-service-role) 섹션을 참조하세요.

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Effect":"Allow",
         "Action":[
            "sqs:*",
            "cloudformation:CreateStack",
            "cloudformation:DescribeStacks"
         ],
         "Resource":"*"
      }
   ]
}
```

------

# `aws:createTags` - AWS 리소스에 대한 태그 생성
<a name="automation-action-createtag"></a>

Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스 또는 AWS Systems Manager 관리형 인스턴스에 대한 새 태그를 생성합니다.

**참고**  
`aws:createTags` 작업은 자동 스로틀링 재시도를 지원합니다. 자세한 내용은 [스로틀링된 작업에 대한 자동 재시도 구성](automation-throttling-retry.md) 섹션을 참조하세요.

**Input**  
이 작업은 대부분의 Amazon EC2 `CreateTags` 및 Systems Manager `AddTagsToResource` 파라미터를 지원합니다. 자세한 내용은 [CreateTags](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/api_createtags.html) 및 [AddTagsToResource](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/api_addtagstoresource.html)를 참조하세요.

다음 예에서는 Amazon Machine Image(AMI)와 인스턴스를 특정 부서의 프로덕션 리소스로 태그 지정하는 방법을 보여줍니다.

------
#### [ YAML ]

```
name: createTags
action: aws:createTags
maxAttempts: 3
onFailure: Abort
inputs:
  ResourceType: EC2
  ResourceIds:
  - ami-9a3768fa
  - i-02951acd5111a8169
  Tags:
  - Key: production
    Value: ''
  - Key: department
    Value: devops
```

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

```
{
    "name": "createTags",
    "action": "aws:createTags",
    "maxAttempts": 3,
    "onFailure": "Abort",
    "inputs": {
        "ResourceType": "EC2",
        "ResourceIds": [
            "ami-9a3768fa",
            "i-02951acd5111a8169"
        ],
        "Tags": [
            {
                "Key": "production",
                "Value": ""
            },
            {
                "Key": "department",
                "Value": "devops"
            }
        ]
    }
}
```

------

ResourceIds  
태그 지정할 리소스의 ID입니다. 리소스 유형이 "EC2"가 아니면 이 필드는 항목을 하나만 포함할 수 있습니다.  
형식: 문자열 목록  
필수 여부: 예

Tags  
리소스와 연결할 태그입니다.  
형식: 맵 목록  
필수 여부: 예

ResourceType  
태그 지정할 리소스의 유형입니다. 제공되지 않은 경우 기본값 "EC2"가 사용됩니다.  
유형: 문자열  
필수 여부: 아니요  
유효한 값: `EC2` \$1 `ManagedInstance` \$1 `MaintenanceWindow` \$1 `Parameter`

**출력**  
없음

# `aws:deleteImage` - Amazon Machine Image 삭제
<a name="automation-action-delete"></a>

지정된 Amazon Machine Image(AMI) 및 관련된 모든 스냅샷을 삭제합니다.

**참고**  
`aws:deleteImage` 작업은 자동 스로틀링 재시도를 지원합니다. 자세한 내용은 [스로틀링된 작업에 대한 자동 재시도 구성](automation-throttling-retry.md) 섹션을 참조하세요.

**Input**  
이 작업은 하나의 파라미터만 지원합니다. 자세한 내용은 [DeregisterImage](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DeregisterImage.html) and [DeleteSnapshot](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DeleteSnapshot.html) 문서를 참조하세요.

------
#### [ YAML ]

```
name: deleteMyImage
action: aws:deleteImage
maxAttempts: 3
timeoutSeconds: 180
onFailure: Abort
inputs:
  ImageId: ami-12345678
```

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

```
{
    "name": "deleteMyImage",
    "action": "aws:deleteImage",
    "maxAttempts": 3,
    "timeoutSeconds": 180,
    "onFailure": "Abort",
    "inputs": {
        "ImageId": "ami-12345678"
    }
}
```

------

ImageId  
삭제되는 이미지의 ID.  
유형: 문자열  
필수 항목 여부: 예

**출력**  
없음

# `aws:deleteStack` - CloudFormation 스택 삭제
<a name="automation-action-deletestack"></a>

AWS CloudFormation 스택을 삭제합니다.

**참고**  
`aws:deleteStack` 작업은 자동 스로틀링 재시도를 지원합니다. 자세한 내용은 [스로틀링된 작업에 대한 자동 재시도 구성](automation-throttling-retry.md) 섹션을 참조하세요.

**입력**

------
#### [ YAML ]

```
name: deleteStack
action: aws:deleteStack
maxAttempts: 1
onFailure: Abort
inputs:
  StackName: "{{stackName}}"
```

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

```
{
   "name":"deleteStack",
   "action":"aws:deleteStack",
   "maxAttempts":1,
   "onFailure":"Abort",
   "inputs":{
      "StackName":"{{stackName}}"
   }
}
```

------

ClientRequestToken  
이 `DeleteStack` 요청에 대한 고유 식별자입니다. 요청을 재시도하여 사용자가 동일한 이름의 스택을 삭제하지 않을 것임을 CloudFormation에 알릴 계획인 경우 이 토큰을 지정합니다. `DeleteStack` 요청을 재시도하여 CloudFormation에서 수신했음을 확인할 수 있습니다.  
유형: 문자열  
길이 제약: 최소 길이는 1. 최대 길이 128.  
패턴: [a-zA-Z][-a-zA-Z0-9]\$1  
필수 여부: 아니요

RetainResources.member.N  
이 입력은 `DELETE_FAILED` 상태에 있는 스택에만 적용됩니다. 보유할 리소스에 대한 논리적 리소스 ID 목록입니다. 삭제하는 동안 CloudFormation은 스택을 삭제하지만 보유한 리소스는 삭제하지 않습니다.  
비어 있지 않은 S3 버킷 같은 리소스를 삭제할 수 없지만, 스택을 삭제하고자 하는 경우에 리소스를 보유하면 유용합니다.  
형식: 문자열 배열  
필수 여부: 아니요

RoleARN  
CloudFormation이 스택을 생성하기 위해 수임하는 AWS Identity and Access Management(IAM) 역할의 Amazon 리소스 이름(ARN)입니다. CloudFormation은 역할의 자격 증명을 사용하여 사용자를 대신하여 호출합니다. CloudFormation은 스택의 모든 향후 작업에 항상 이 역할을 사용합니다. 사용자에게 스택에서 작업할 수 있는 권한이 있는 경우에는 역할을 전달할 수 있는 권한은 없더라도 CloudFormation에서 이 역할을 사용합니다. 역할이 최소한의 권한을 부여하는지 확인하세요.  
값을 지정하지 않으면 CloudFormation에서는 이전에 스택과 연결된 역할을 사용합니다. 사용 가능한 역할이 없으면 CloudFormation에서는 사용자 자격 증명으로부터 생성되는 임시 세션을 사용합니다.  
유형: 문자열  
길이 제약: 최소 길이는 20. 최대 길이는 2,048.  
필수 여부: 아니요

StackName  
스택이 연결되어 있는 이름 또는 고유한 스택 ID입니다.  
유형: 문자열  
필수 항목 여부: 예

## 보안 고려 사항
<a name="automation-action-deletestack-security"></a>

`aws:deleteStack` 작업을 사용하려면 먼저 IAM Automation 수임 역할에 다음 정책을 할당해야 합니다. assume role에 대한 자세한 내용은 [작업 1: Automation을 위한 서비스 역할 생성](automation-setup-iam.md#create-service-role) 섹션을 참조하세요.

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Effect":"Allow",
         "Action":[
            "sqs:*",
            "cloudformation:DeleteStack",
            "cloudformation:DescribeStacks"
         ],
         "Resource":"*"
      }
   ]
}
```

------

# `aws:executeAutomation` - 또 다른 자동화 실행
<a name="automation-action-executeAutomation"></a>

보조 실행서를 호출하여 보조 자동화를 실행합니다. 이 작업을 수행하여 가장 일반적인 작업에 대한 실행서를 생성하고 자동화 중에 해당 실행서를 참조할 수 있습니다. 이 작업을 수행하면 비슷한 실행서 간에 복제 단계가 필요하지 않으므로 실행서를 간소화할 수 있습니다.

보조 자동화는 기본 자동화를 시작한 사용자의 컨텍스트에서 실행됩니다. 이는 보조 자동화가 첫 자동화를 시작한 사용자와 동일한 AWS Identity and Access Management(IAM) 역할 또는 사용자를 사용한다는 의미입니다.

**중요**  
수임 역할(iam:passRole 정책을 사용하는 역할)을 사용하는 보조 자동화에서 파라미터를 지정하는 경우 기본 자동화를 시작한 사용자 또는 역할에 보조 자동화에서 지정한 수임 역할을 전달할 권한이 있어야 합니다. 자동화의 assume role 설정에 대한 자세한 내용은 [콘솔을 사용하여 Automation을 위한 서비스 역할 생성](automation-setup-iam.md)을 참조하십시오.

**입력**

------
#### [ YAML ]

```
name: Secondary_Automation
action: aws:executeAutomation
maxAttempts: 3
timeoutSeconds: 3600
onFailure: Abort
inputs:
  DocumentName: secondaryAutomation
  RuntimeParameters:
    instanceIds:
    - i-1234567890abcdef0
```

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

```
{
   "name":"Secondary_Automation",
   "action":"aws:executeAutomation",
   "maxAttempts":3,
   "timeoutSeconds":3600,
   "onFailure":"Abort",
   "inputs":{
      "DocumentName":"secondaryAutomation",
      "RuntimeParameters":{
         "instanceIds":[
            "i-1234567890abcdef0"
         ]
      }
   }
}
```

------

DocumentName  
단계 중에 실행할 보조 실행서의 이름입니다. 같은 AWS 계정에 있는 실행서의 경우 실행서 이름을 지정합니다. 다른 AWS 계정에서 공유되는 실행서의 경우 실행서의 Amazon 리소스 이름(ARN)을 지정합니다. 공유 실행서 사용에 대한 자세한 내용은 [공유 SSM 문서 사용](documents-ssm-sharing.md#using-shared-documents) 섹션을 참조하세요.  
유형: 문자열  
필수 항목 여부: 예

DocumentVersion  
실행할 보조 실행서의 버전입니다. 지정하지 않은 경우 Automation은 기본 실행서 버전을 실행합니다.  
유형: 문자열  
필수 여부: 아니요

MaxConcurrency  
이 태스크를 병렬로 실행할 수 있는 최대 대상 수입니다. 숫자(예: 10) 또는 백분율(예: 10%)로 지정할 수 있습니다.  
유형: 문자열  
필수 여부: 아니요

MaxErrors  
시스템에서 추가 대상에 대한 자동화 실행을 중지하기 전에 허용되는 오류 수입니다. 오류의 절대 개수(예: 10개)를 지정하거나 대상 집합의 비율(예: 10%)을 지정할 수 있습니다. 예를 들어 3을 지정할 경우 네 번째 오류가 수신되면 자동화 실행이 중지됩니다. 0을 지정하면 첫 번째 오류 결과가 반환된 후 추가 대상에서 자동화 실행이 중지됩니다. 50개의 리소스에서 자동화를 실행하고 `MaxErrors`를 10%로 설정하면 6번째 오류 수신 시 추가 대상에서 자동화 실행이 중지됩니다.  
`MaxErrors` 임계값에 도달했을 때 이미 실행 중인 자동화는 완료될 수 있지만 일부는 실패할 수도 있습니다. 지정된 `MaxErrors`보다 많이 자동화 실패가 발생하지 않게 자동화가 한 번에 하나씩 진행되도록 `MaxConcurrency`를 1로 설정합니다.  
유형: 문자열  
필수 여부: 아니요

RuntimeParameters  
보조 실행서에 필요한 파라미터입니다. 매핑은 \$1"parameter1" : "value1", "parameter2" : "value2" \$1 형식을 사용합니다.  
유형: 맵  
필수 여부: 아니요

Tags  
리소스에 할당하는 선택적 메타데이터입니다. 자동화에 대해 최대 5개의 태그를 지정할 수 있습니다.  
유형: MapList  
필수 여부: 아니요

TargetLocations  
위치는 자동화를 실행하려는 AWS 리전 및/또는 AWS 계정의 조합입니다. 최소 1개 항목을 지정해야 하며 최대 100개 항목을 지정할 수 있습니다. 이 파라미터의 값을 지정하면 출력이 상위 자동화로 반환되지 않습니다. 필요한 경우 API 작업을 후속 호출하여 하위 자동화에서 출력을 검색해야 합니다.  
유형: MapList  
필수 여부: 아니요

TargetMaps  
대상 리소스에 대한 문서 파라미터의 키-값 매핑 목록입니다. `Targets`와 `TargetMaps`는 함께 지정할 수 없습니다.  
유형: MapList  
필수 여부: 아니요

TargetParameterName  
속도 제어 자동화의 대상 리소스로 사용되는 파라미터의 이름입니다. `Targets`를 지정한 경우에만 필요합니다.  
유형: 문자열  
필수 여부: 아니요

대상  
대상 리소스에 대한 키-값 매핑 목록입니다. `TargetParameterName`를 지정한 경우에만 필요합니다.  
유형: MapList  
필수 여부: 아니요출력

출력  
보조 자동화에서 생성된 출력입니다. *Secondary\$1Automation\$1Step\$1Name*.Output 형식을 사용하여 출력을 참조할 수 있습니다.  
유형: StringList  
다음 예를 참고하세요  

```
- name: launchNewWindowsInstance
  action: 'aws:executeAutomation'
  onFailure: Abort
  inputs:
    DocumentName: launchWindowsInstance
  nextStep: getNewInstanceRootVolume
- name: getNewInstanceRootVolume
  action: 'aws:executeAwsApi'
  onFailure: Abort
  inputs:
    Service: ec2
    Api: DescribeVolumes
    Filters:
    - Name: attachment.device
      Values:
      - /dev/sda1
    - Name: attachment.instance-id
      Values:
      - '{{launchNewWindowsInstance.Output}}'
  outputs:
  - Name: rootVolumeId
    Selector: '$.Volumes[0].VolumeId'
    Type: String
  nextStep: snapshotRootVolume
- name: snapshotRootVolume
  action: 'aws:executeAutomation'
  onFailure: Abort
  inputs:
    DocumentName: AWS-CreateSnapshot
    RuntimeParameters:
    VolumeId:
    - '{{getNewInstanceRootVolume.rootVolumeId}}'
    Description:
    - 'Initial root snapshot for {{launchNewWindowsInstance.Output}}'
```

ExecutionId  
보조 자동화의 ID입니다.  
유형: 문자열

Status  
보조 자동화의 상태입니다.  
유형: 문자열

# `aws:executeAwsApi` - AWS API 작업 호출 및 실행
<a name="automation-action-executeAwsApi"></a>

AWS API 작업을 호출하여 실행합니다. 일부 API 작업이 테스트되지 않았더라도 대부분의 API 작업이 지원됩니다. [GetObject](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectGET.html) 작업과 같은 스트리밍 API 작업은 지원되지 않습니다. 사용하려는 API 작업이 스트리밍 작업인지 확실하지 않은 경우 API에 스트리밍 입력 또는 출력이 필요한지 여부를 결정하는 서비스에 대한 [Boto3](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/index.html) 설명서를 검토하세요. 이 작업에 사용되는 Boto3 버전은 정기적으로 업데이트됩니다. 그러나 새 Boto3 버전 릴리스 후 변경 사항이 이 작업에 반영되려면 최대 몇 주가 걸릴 수 있습니다. 각 `aws:executeAwsApi` 작업은 최대 25초까지 실행할 수 있습니다. 이 작업을 사용하는 방법에 관한 자세한 내용은 [추가 런북 예제](automation-document-examples.md) 섹션을 참조하세요.

**참고**  
`aws:executeAwsApi` 작업은 자동 스로틀링 재시도를 지원합니다. 자세한 내용은 [스로틀링된 작업에 대한 자동 재시도 구성](automation-throttling-retry.md) 섹션을 참조하세요.

**입력**  
입력은 선택하는 API 작업에 의해 정의됩니다.

------
#### [ YAML ]

```
action: aws:executeAwsApi
inputs:
  Service: The official namespace of the service
  Api: The API operation or method name
  API operation inputs or parameters: A value
outputs: # These are user-specified outputs
- Name: The name for a user-specified output key
  Selector: A response object specified by using jsonpath format
  Type: The data type
```

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

```
{
   "action":"aws:executeAwsApi",
   "inputs":{
      "Service":"The official namespace of the service",
      "Api":"The API operation or method name",
      "API operation inputs or parameters":"A value"
   },
   "outputs":[ These are user-specified outputs
      {
         "Name":"The name for a user-specified output key",
         "Selector":"A response object specified by using JSONPath format",
         "Type":"The data type"
      }
   ]
}
```

------

서비스  
실행하려는 API 작업을 포함하는 AWS 서비스 네임스페이스입니다. AWS SDK for Python (Boto3)의 [사용 가능한 서비스](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/index.html)에서 지원되는 AWS 서비스 네임스페이스 목록을 볼 수 있습니다. 네임스페이스는 **클라이언트** 섹션에서 찾을 수 있습니다. 예를 들면 Systems Manager의 네임스페이스는 `ssm`입니다. Amazon Elastic Compute Cloud(Amazon EC2)의 네임스페이스는 `ec2`입니다.  
유형: 문자열  
필수 항목 여부: 예

Api  
실행할 API 작업의 이름입니다. 다음 [[서비스 참조(Services Reference)](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/index.html)] 페이지의 왼쪽 탐색 영역에서 서비스를 선택하여 API 작업(메서드라고도 함)을 볼 수 있습니다. 호출할 서비스에 대한 **클라이언트** 섹션에서 메서드를 선택합니다. 예를 들어 Amazon Relational Database Service(Amazon RDS)에 대한 모든 API 작업(메서드)이 [Amazon RDS 메서드](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/rds.html) 페이지에 나열됩니다.  
유형: 문자열  
필수 항목 여부: 예

API 작업 입력  
하나 이상의 API 작업 입력입니다. 다음 [서비스 참조](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/index.html) 페이지의 왼쪽 탐색 영역에서 서비스를 선택하여 사용할 수 있는 입력(파라미터)을 볼 수 있습니다. 호출할 서비스에 대한 **클라이언트** 섹션에서 메서드를 선택합니다. 예를 들어 Amazon RDS에 대한 모든 메서드는 [Amazon RDS 메서드](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/rds.html) 페이지에 나열됩니다. [describe\$1db\$1instances](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/rds.html#RDS.Client.describe_db_instances) 메서드를 선택하고 아래로 스크롤하여 **DBInstanceIdentifier**, **Name** 및 **Values** 같은 사용할 수 있는 파라미터를 볼 수 있습니다.  

```
inputs:
  Service: The official namespace of the service
  Api: The API operation name
  API input 1: A value
  API Input 2: A value
  API Input 3: A value
```

```
"inputs":{
      "Service":"The official namespace of the service",
      "Api":"The API operation name",
      "API input 1":"A value",
      "API Input 2":"A value",
      "API Input 3":"A value"
}
```
형식: 선택한 API 작업에 의해 결정됨  
필수 여부: 예

**출력**  
출력은 선택한 API 작업의 응답을 기반으로 사용자가 지정합니다.

이름  
출력의 이름입니다.  
유형: 문자열  
필수 항목 여부: 예

Selector  
응답 객체의 특정 속성에 대한 JSONPath입니다. 다음 [서비스 참조](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/index.html) 페이지의 왼쪽 탐색 영역에서 서비스를 선택하여 응답 객체를 볼 수 있습니다. 호출할 서비스에 대한 **클라이언트** 섹션에서 메서드를 선택합니다. 예를 들어 Amazon RDS에 대한 모든 메서드는 [Amazon RDS 메서드](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/rds.html) 페이지에 나열됩니다. [describe\$1db\$1instances](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/rds.html#RDS.Client.describe_db_instances) 메서드를 선택하고 **Response Structure(응답 구조)** 섹션이 있는 아래쪽으로 스크롤합니다. **DBInstances**가 응답 객체로 나열됩니다.  
형식: Integer, Boolean, String, StringList, StringMap, MapList  
필수 여부: 예

Type  
응답 요소의 데이터 유형입니다.  
형식: 다양  
필수 여부: 예

# `aws:executeScript` - 스크립트 실행
<a name="automation-action-executeScript"></a>

지정된 런타임 및 핸들러를 사용하여 제공된 Python 또는 PowerShell 스크립트를 실행합니다. 각 `aws:executeScript` 작업은 최대 600초(10분)까지 실행할 수 있습니다. `aws:executeScript` 단계에서 `timeoutSeconds` 파라미터를 지정하여 시간 제한을 제한할 수 있습니다.

함수에서 return 문을 사용하여 출력 페이로드에 출력을 추가합니다. `aws:executeScript` 작업에 대한 출력 정의 예시는 [예제 2: 스크립팅된 실행서](automation-authoring-runbooks-scripted-example.md)의 내용을 참조하세요. 실행서에 있는 `aws:executeScript` 작업의 출력을 지정하는 Amazon CloudWatch Logs 로그 그룹으로 전송할 수 있습니다. 자세한 내용은 [CloudWatch Logs로 Automation 작업 출력 로깅](automation-action-logging.md) 섹션을 참조하세요.

`aws:executeScript` 작업에서 CloudWatch Logs로 출력을 전송하거나 `aws:executeScript` 작업에 대해 지정한 스크립트가 AWS API 작업을 호출하는 경우, 런북을 실행하려면 AWS Identity and Access Management(IAM) 서비스 역할(또는 역할 수임)이 항상 필요합니다.

**참고**  
`aws:executeScript` 작업은 자동 스로틀링 재시도를 지원하지 않습니다. 스크립트가 스로틀링될 수 있는 AWS API 호출을 수행하는 경우 스크립트 코드에 자체 재시도 로직을 구현해야 합니다.

`aws:executeScript` 작업에는 다음과 같은 사전 설치된 PowerShell Core 모듈이 포함되어 있습니다.
+ Microsoft.PowerShell.Host
+ Microsoft.PowerShell.Management
+ Microsoft.PowerShell.Security
+ Microsoft.PowerShell.Utility
+ PackageManagement
+ PowerShellGet

사전 설치되지 않은 PowerShell Core 모듈을 사용하려면 스크립트에서 다음 명령과 같이 `-Force` 플래그를 사용하여 모듈을 설치해야 합니다. `AWSPowerShell.NetCore` 모듈은 지원되지 않습니다. *ModuleName*을 설치하려는 모듈로 바꿉니다.

```
Install-Module ModuleName -Force
```

스크립트에서 PowerShell Core cmdlet을 사용하려면 다음 명령과 같이 `AWS.Tools` 모듈을 사용하는 것이 좋습니다. 각 *example resource placeholder*를 사용자의 정보로 바꿉니다.
+ Amazon S3 cmdlet입니다.

  ```
  Install-Module AWS.Tools.S3 -Force
  Get-S3Bucket -BucketName amzn-s3-demo-bucket
  ```
+ Amazon EC2 cmdlet.

  ```
  Install-Module AWS.Tools.EC2 -Force
  Get-EC2InstanceStatus -InstanceId instance-id
  ```
+ 공통 또는 서비스 독립적 AWS Tools for Windows PowerShell cmdlet입니다.

  ```
  Install-Module AWS.Tools.Common -Force
  Get-AWSRegion
  ```

스크립트에서 PowerShell Core cmdlet을 사용하는 것 외에 새 객체를 초기화하는 경우 다음 명령과 같이 모듈도 가져와야 합니다.

```
Install-Module AWS.Tools.EC2 -Force
Import-Module AWS.Tools.EC2

$tag = New-Object Amazon.EC2.Model.Tag
$tag.Key = "Tag"
$tag.Value = "TagValue"

New-EC2Tag -Resource i-02573cafcfEXAMPLE -Tag $tag
```

`AWS.Tools` 모듈 설치와 가져오기 및 실행서의 PowerShell Core cmdlet 사용 예는 [Automation 런북의 시각적 디자인 경험](automation-visual-designer.md) 섹션을 참조하세요.

**Input**  
스크립트를 실행하는 데 필요한 정보를 입력합니다. 각 *example resource placeholder*를 사용자의 정보로 바꿉니다.

**참고**  
Python 스크립트의 첨부 파일은 스크립트가 포함된 .py 파일 또는 .zip 파일일 수 있습니다. PowerShell 스크립트는.zip 파일에 저장해야 합니다.

------
#### [ YAML ]

```
action: "aws:executeScript"
inputs: 
 Runtime: runtime
 Handler: "functionName"
 InputPayload: 
  scriptInput: '{{parameterValue}}'
 Script: |-
   def functionName(events, context):
   ...
 Attachment: "scriptAttachment.zip"
```

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

```
{
    "action": "aws:executeScript",
    "inputs": {
        "Runtime": "runtime",
        "Handler": "functionName",
        "InputPayload": {
            "scriptInput": "{{parameterValue}}"
        },
        "Attachment": "scriptAttachment.zip"
    }
}
```

------

런타임  
제공된 스크립트를 실행하는 데 사용할 런타임 언어입니다. `aws:executeScript`는 다음 표의 런타임을 지원합니다.      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/systems-manager/latest/userguide/automation-action-executeScript.html)
유형: 문자열  
필수 항목 여부: 예  
Python 런타임의 경우 이 환경은 512MB의 메모리와 512MB의 디스크 공간을 제공합니다. PowerShell 런타임의 경우 이 환경은 1,024MB의 메모리와 512MB의 디스크 공간을 제공합니다.

핸들러  
함수의 이름입니다. 핸들러에 정의된 함수에 두 개의 파라미터 `events`과 `context`가 있는지 확인해야 합니다. PowerShell 런타임은 이 파라미터를 지원하지 않습니다.  
유형: 문자열  
필수: 예(Python) \$1 지원되지 않음(PowerShell)

InputPayload  
핸들러의 첫 번째 파라미터로 전달되는 JSON 또는 YAML 객체입니다. 이 스크립트에 입력 데이터를 전달하는 데 사용할 수 있습니다.  
유형: 문자열  
필수 여부: 아니요  

```
description: Tag an instance
schemaVersion: '0.3'
assumeRole: '{{AutomationAssumeRole}}'
parameters:
    AutomationAssumeRole:
        type: String
        description: '(Required) The Amazon Resource Name (ARN) of the IAM role that allows Automation to perform the actions on your behalf. If no role is specified, Systems Manager Automation uses your IAM permissions to operate this runbook.'
    InstanceId:
        type: String
        description: (Required) The ID of the EC2 instance you want to tag.
mainSteps:
  - name: tagInstance
    action: 'aws:executeScript'
    inputs:
        Runtime: "python3.11"
        Handler: tagInstance
        InputPayload:
            instanceId: '{{InstanceId}}'
        Script: |-
          def tagInstance(events,context):
            import boto3

            #Initialize client
            ec2 = boto3.client('ec2')
            instanceId = events['instanceId']
            tag = {
                "Key": "Env",
                "Value": "ExamplePython"
            }
            print(f"Adding tag {tag} to instance id {instanceId}")
            ec2.create_tags(
                Resources=[instanceId],
                Tags=[tag]
            )
            return tag
    outputs:
      - Type: String
        Name: TagKey
        Selector: $.Payload.Key
outputs:
  - tagInstance.TagKey
```

```
description: Tag an instance
schemaVersion: '0.3'
assumeRole: '{{AutomationAssumeRole}}'
parameters:
  AutomationAssumeRole:
    type: String
    description: (Required) The Amazon Resource Name (ARN) of the IAM role that allows Automation to perform the actions on your behalf. If no role is specified, Systems Manager Automation uses your IAM permissions to operate this runbook.
  InstanceId:
    type: String
    description: (Required) The ID of the EC2 instance you want to tag.
mainSteps:
  - name: tagInstance
    action: aws:executeScript
    isEnd: true
    inputs:
      Runtime: PowerShell 7.4
      InputPayload:
        instanceId: '{{InstanceId}}'
      Script: |-
        Install-Module AWS.Tools.EC2 -Force
        Import-Module AWS.Tools.EC2

        $input = $env:InputPayload | ConvertFrom-Json

        $tag = New-Object Amazon.EC2.Model.Tag
        $tag.Key = "Env"
        $tag.Value = "ExamplePowerShell"

        Write-Information "Adding tag key: $($tag.Key) and value: $($tag.Value) to instance id $($input.instanceId)"
        New-EC2Tag -Resource $input.instanceId -Tag $tag

        return $tag
    outputs:
      - Type: String
        Name: TagKey
        Selector: $.Payload.Key
outputs:
  - tagInstance.TagKey
```

Script  
자동화 중 실행할 기본 제공 스크립트입니다.  
유형: 문자열  
필수: 아니오(Python) \$1 예(PowerShell)

연결  
작업에서 호출될 수 있는 독립형 스크립트 파일 또는.zip 파일의 이름입니다. `Attachments` 요청 파라미터에서 지정한 문서 첨부 파일의 `Name`과 동일한 값을 지정합니다. 자세한 내용은 *AWS Systems Manager API 참조*의 [첨부 파일](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_CreateDocument.html#systemsmanager-CreateDocument-request-Attachments)을 참조하세요. 첨부 파일을 사용하여 스크립트를 제공하는 경우 런북의 최상위 수준 요소에서 `files` 섹션 또한 정의해야 합니다. 자세한 내용은 [스키마 버전 0.3](documents-schemas-features.md#automation-doc-syntax-examples) 섹션을 참조하세요.  
Python용 파일을 호출하려면 `Handler`에서 `filename.method_name` 형식을 사용합니다.  
Python 스크립트의 첨부 파일은 스크립트가 포함된 .py 파일 또는 .zip 파일일 수 있습니다. PowerShell 스크립트는.zip 파일에 저장해야 합니다.
첨부 파일에 Python 라이브러리를 포함할 때 각 모듈 디렉터리에 빈 `__init__.py` 파일을 추가하는 것이 좋습니다. 이를 통해 스크립트 내용 내 첨부 파일의 라이브러리에서 모듈을 가져올 수 있습니다. 예: `from library import module`  
유형: 문자열  
필수 여부: 아니요출력

페이로드  
함수에서 반환된 객체의 JSON 표현입니다. 최대 100KB가 반환됩니다. 목록을 출력하는 경우 최대 100개의 항목이 반환됩니다.

## aws:executeScript에서 첨부 파일 사용
<a name="automation-action-executeScript-attachments"></a>

첨부 파일은 복잡한 스크립트, 여러 모듈 및 외부 종속 항목을 `aws:executeScript` 작업에서 패키징하고 재사용할 수 있는 강력한 방법을 제공합니다. 다음을 수행해야 경우 첨부 파일을 사용합니다.
+ 여러 Python 모듈 또는 PowerShell 스크립트를 함께 패키징합니다.
+ 여러 런북에서 동일한 스크립트 로직을 재사용합니다.
+ 스크립트에 외부 라이브러리 또는 종속 항목을 포함합니다.
+ 복잡한 스크립트 로직을 분리하여 런북 정의를 정리합니다.
+ 여러 팀 또는 자동화 워크플로에서 스크립트 패키지를 공유합니다.

### 첨부 파일 구조 및 패키징
<a name="automation-action-executeScript-attachment-structure"></a>

단일 파일 또는 여러 파일이 포함된 zip 패키지를 첨부할 수 있습니다. 구조는 사용 사례에 따라 달라집니다.

**단일 파일의 첨부 파일**  
간단한 스크립트의 경우 단일 `.py` 파일(Python) 또는 단일 PowerShell 스크립트가 포함된 `.zip` 파일을 첨부할 수 있습니다.

**다중 모듈 패키지**  
여러 모듈이 필요한 복잡한 자동화의 경우 다음과 같은 권장 구조의 zip 패키지를 생성합니다.

```
my-automation-package.zip
├── main.py                    # Entry point script
├── utils/
│   ├── __init__.py           # Required for Python module imports
│   ├── helper_functions.py   # Utility functions
│   └── aws_operations.py     # AWS-specific operations
├── config/
│   ├── __init__.py
│   └── settings.py           # Configuration settings
└── requirements.txt          # Optional: document dependencies
```

**중요**  
Python 패키지의 경우 Python 모듈이 포함된 각 디렉터리에 빈 `__init__.py` 파일을 포함해야 합니다. 이렇게 하면 표준 Python 가져오기 구문(예: `from utils import helper_functions`)을 사용하여 모듈을 가져올 수 있습니다.

**PowerShell 패키지 구조**  
PowerShell 첨부 파일은 다음과 같은 구조의 zip 파일로 패키징되어야 합니다.

```
my-powershell-package.zip
├── Main.ps1                  # Entry point script
├── Modules/
│   ├── HelperFunctions.ps1   # Utility functions
│   └── AWSOperations.ps1     # AWS-specific operations
└── Config/
    └── Settings.ps1          # Configuration settings
```

### 첨부 파일을 사용하여 런북 생성
<a name="automation-action-executeScript-attachment-workflow"></a>

다음 단계에 따라 첨부 파일을 사용하는 런북을 생성합니다.

1. **Amazon S3에 첨부 파일 업로드**

   자동화 역할이 액세스할 수 있는 S3 버킷에 스크립트 파일 또는 zip 패키지를 업로드하세요. 다음 단계에서 사용할 수 있도록 S3 URI를 기록하세요.

   ```
   aws s3 cp my-automation-package.zip s3://my-automation-bucket/scripts/
   ```

1. **첨부 파일 체크섬 계산**

   보안 확인을 위해 첨부 파일의 SHA-256 체크섬을 계산하세요.

   ```
   # Linux/macOS
   shasum -a 256 my-automation-package.zip
   
   # Windows PowerShell
   Get-FileHash -Algorithm SHA256 my-automation-package.zip
   ```

1. **런북에서 파일 섹션 정의**

   런북의 최상위에 `files` 섹션을 추가하여 첨부 파일을 참조하세요.

   ```
   files:
     my-automation-package.zip:
       checksums:
         sha256: "your-calculated-checksum-here"
   ```

1. **executeScript 단계에서 첨부 파일 참조**

   `Attachment` 파라미터를 사용하여 업로드된 파일을 참조하세요.

   ```
   - name: runMyScript
     action: aws:executeScript
     inputs:
       Runtime: python3.11
       Handler: main.process_data
       Attachment: my-automation-package.zip
       InputPayload:
         inputData: "{{InputParameter}}"
   ```

## aws:executeScript 첨부 파일 예제
<a name="automation-action-executeScript-examples"></a>

다음 예제에서는 `aws:executeScript` 작업에서 첨부 파일을 사용하는 다양한 방법을 보여줍니다.

### 예제 1: 단일 파일 연결
<a name="automation-action-executeScript-single-file-example"></a>

이 예제에서는 단일 Python 파일을 첨부 파일로 사용하여 EC2 인스턴스 데이터를 처리하는 방법을 보여줍니다.

**첨부 파일: process\$1instance.py**  
다음 콘텐츠가 포함된 Python 파일을 생성합니다.

```
import boto3
import json

def process_instance_data(events, context):
    """Process EC2 instance data and return formatted results."""
    try:
        instance_id = events.get('instanceId')
        if not instance_id:
            raise ValueError("instanceId is required")
        
        ec2 = boto3.client('ec2')
        
        # Get instance details
        response = ec2.describe_instances(InstanceIds=[instance_id])
        instance = response['Reservations'][0]['Instances'][0]
        
        # Format the response
        result = {
            'instanceId': instance_id,
            'instanceType': instance['InstanceType'],
            'state': instance['State']['Name'],
            'availabilityZone': instance['Placement']['AvailabilityZone'],
            'tags': {tag['Key']: tag['Value'] for tag in instance.get('Tags', [])}
        }
        
        print(f"Successfully processed instance {instance_id}")
        return result
        
    except Exception as e:
        print(f"Error processing instance: {str(e)}")
        raise
```

**런북 완료**  
다음은 단일 파일의 첨부 파일을 사용하는 전체 런북입니다.

```
description: Process EC2 instance data using single file attachment
schemaVersion: '0.3'
assumeRole: '{{AutomationAssumeRole}}'
parameters:
  AutomationAssumeRole:
    type: String
    description: (Required) IAM role for automation execution
  InstanceId:
    type: String
    description: (Required) EC2 instance ID to process

files:
  process_instance.py:
    checksums:
      sha256: "abc123def456..."

mainSteps:
  - name: processInstance
    action: aws:executeScript
    inputs:
      Runtime: python3.11
      Handler: process_instance.process_instance_data
      Attachment: process_instance.py
      InputPayload:
        instanceId: '{{InstanceId}}'
    outputs:
      - Type: StringMap
        Name: InstanceData
        Selector: $.Payload

outputs:
  - processInstance.InstanceData
```

### 예제 2: 다중 모듈 패키지
<a name="automation-action-executeScript-multi-module-example"></a>

이 예제에서는 복잡한 S3 버킷 작업을 위해 여러 Python 모듈을 포함하는 zip 패키지를 사용하는 방법을 보여줍니다.

**패키지 구조**  
다음 구조의 zip 패키지를 생성합니다.

```
s3-operations.zip
├── main.py
├── utils/
│   ├── __init__.py
│   ├── s3_helper.py
│   └── validation.py
└── config/
    ├── __init__.py
    └── settings.py
```

**main.py(진입 지점)**  
작업을 오케스트레이션하는 기본 스크립트:

```
from utils.s3_helper import S3Operations
from utils.validation import validate_bucket_name
from config.settings import get_default_settings

def cleanup_s3_bucket(events, context):
    """Clean up S3 bucket based on specified criteria."""
    try:
        bucket_name = events.get('bucketName')
        max_age_days = events.get('maxAgeDays', 30)
        
        # Validate inputs
        if not validate_bucket_name(bucket_name):
            raise ValueError(f"Invalid bucket name: {bucket_name}")
        
        # Initialize S3 operations
        s3_ops = S3Operations()
        settings = get_default_settings()
        
        # Perform cleanup
        deleted_objects = s3_ops.delete_old_objects(
            bucket_name, 
            max_age_days,
            settings['dry_run']
        )
        
        result = {
            'bucketName': bucket_name,
            'deletedCount': len(deleted_objects),
            'deletedObjects': deleted_objects[:10],  # Return first 10 for brevity
            'dryRun': settings['dry_run']
        }
        
        print(f"Cleanup completed for bucket {bucket_name}")
        return result
        
    except Exception as e:
        print(f"Error during S3 cleanup: {str(e)}")
        raise
```

## aws:executeScript 첨부 파일 문제 해결
<a name="automation-action-executeScript-troubleshooting"></a>

다음 지침을 사용하여 `aws:executeScript` 첨부 파일과 관련된 일반적인 문제를 해결합니다.

**모듈 가져오기 오류**  
다중 모듈 패키지를 사용할 때 가져오기 오류를 수신하는 경우:
+ Python 모듈을 포함하는 각 디렉터리에 빈 `__init__.py` 파일이 포함되어 있는지 확인합니다.
+ import 문이 zip 패키지의 실제 파일 및 디렉터리 구조와 일치하는지 확인합니다.
+ 상대적 가져오기(예: `from .utils import helper`) 또는 절대적 가져오기(예: `from utils import helper`)를 일관되게 사용합니다.

**첨부 파일 찾을 수 없음 오류**  
자동화에서 첨부 파일을 찾지 못하는 경우:
+ `Attachment` 파라미터 값이 `files` 섹션의 키와 정확히 일치하는지 확인합니다.
+ `files` 섹션에서 S3 버킷 경로 및 파일 이름이 올바른지 확인합니다.
+ 자동화 역할에 첨부 파일의 S3 위치에 대한 `s3:GetObject` 권한이 있는지 확인합니다.
+ 런북의 체크섬이 실제 파일 체크섬과 일치하는지 확인합니다.

**핸들러 함수 오류**  
핸들러 관련 오류를 수신하는 경우:
+ Python의 경우: `Handler` 파라미터에서 `filename.function_name` 형식을 사용합니다(예: `main.process_data`).
+ 핸들러 함수가 정확히 두 개의 파라미터(`events` 및 `context`)를 수락하는지 확인합니다.
+ PowerShell의 경우: `Handler` 파라미터를 지정하지 마세요. 스크립트는 직접 실행됩니다.

**스크립트 실행 실패**  
실행 중에 스크립트가 실패하는 경우:
+ 자동화 실행 기록에서 자세한 오류 메시지 및 스택 추적을 확인합니다.
+ `print()` 문(Python) 또는 `Write-Information`(PowerShell)을 사용하여 디버깅 출력을 추가합니다.
+ 자동화 역할에 필요한 모든 AWS 권한이 부여되었는지 확인합니다.
+ 첨부 파일로 패키징하기 전에 스크립트 로직을 로컬로 테스트합니다.

**종료 코드 및 오류 처리**  
오류를 올바르게 처리하고 종료 코드를 반환하는 방법:
+ Python의 경우: `raise Exception("error message")`를 사용하여 스크립트 실패를 나타냅니다.
+ PowerShell의 경우: `throw "error message"` 또는 `Write-Error`를 사용하여 실패를 나타냅니다.
+ 함수에서 구조화된 데이터를 반환하여 성공 또는 실패에 대한 세부 정보를 제공합니다.
+ try-catch 블록을 사용하여 예외를 정상적으로 처리하고 유용한 오류 메시지를 제공합니다.

# `aws:executeStateMachine` - AWS Step Functions 상태 시스템을 실행합니다.
<a name="automation-action-executeStateMachine"></a>

AWS Step Functions 상태 시스템을 실행합니다.

**참고**  
`aws:executeStateMachine` 작업은 자동 스로틀링 재시도를 지원합니다. 자세한 내용은 [스로틀링된 작업에 대한 자동 재시도 구성](automation-throttling-retry.md) 섹션을 참조하세요.

**입력**

이 작업은 Step Functions [StartExecution](https://docs.aws.amazon.com/step-functions/latest/apireference/API_StartExecution.html) API 작업에서 대부분의 파라미터를 지원합니다.

**필요한 AWS Identity and Access Management(IAM) 권한**
+ `states:DescribeExecution`
+ `states:StartExecution`
+ `states:StopExecution`

------
#### [ YAML ]

```
name: executeTheStateMachine
action: aws:executeStateMachine
inputs:
  stateMachineArn: StateMachine_ARN
  input: '{"parameters":"values"}'
  name: name
```

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

```
{
    "name": "executeTheStateMachine",
    "action": "aws:executeStateMachine",
    "inputs": {
        "stateMachineArn": "StateMachine_ARN",
        "input": "{\"parameters\":\"values\"}",
        "name": "name"
    }
}
```

------

stateMachineArn  
Step Functions 상태 시스템의 Amazon 리소스 이름(ARN)입니다.  
유형: 문자열  
필수 항목 여부: 예

이름  
실행의 이름입니다.  
유형: 문자열  
필수 여부: 아니요

입력  
실행을 위한 JSON 입력 문자를 포함하는 문자열입니다.  
유형: 문자열  
필수 여부: 아니요

**출력**  
이 작업의 경우 다음과 같은 출력이 사전 정의되어 있습니다.

executionArn  
실행의 ARN입니다.  
유형: 문자열

입력  
실행의 JSON 입력 데이터를 포함하는 문자열입니다. 길이 제한은 페이로드 크기에 적용되며 UTF-8 인코딩에서 바이트로 표시됩니다.  
유형: 문자열

이름  
실행의 이름입니다.  
유형: 문자열

output  
실행의 JSON 출력 데이터입니다. 길이 제한은 페이로드 크기에 적용되며 UTF-8 인코딩에서 바이트로 표시됩니다.  
유형: 문자열

startDate  
실행이 시작된 날짜입니다.  
유형: 문자열

stateMachineArn  
실행된 상태 시스템의 ARN입니다.  
유형: 문자열

status  
실행의 현재 상태입니다.  
유형: 문자열

stopDate  
실행이 이미 종료된 경우, 실행이 중지된 날짜입니다.  
유형: 문자열

# `aws:invokeWebhook` - Automation 웹후크 통합 호출
<a name="invoke-webhook"></a>

지정된 Automation 웹후크 통합을 호출합니다. Automation 통합 생성에 대한 자세한 내용은 [Automation을 위한 웹후크 통합 생성](creating-webhook-integrations.md) 섹션을 참조하세요.

**참고**  
`aws:invokeWebhook` 작업은 자동 스로틀링 재시도를 지원합니다. 자세한 내용은 [스로틀링된 작업에 대한 자동 재시도 구성](automation-throttling-retry.md) 섹션을 참조하세요.

**참고**  
`aws:invokeWebhook` 작업을 사용하려면 사용자 또는 서비스 역할이 다음 작업을 허용해야 합니다.  
ssm:GetParameter
kms:Decrypt
AWS Key Management Service(AWS KMS) `Decrypt` 작업에 대한 권한은 고객 관리형 키를 사용하여 통합을 위한 파라미터를 암호화하는 경우에만 필요합니다.

**Input**  
호출하려는 Automation 통합에 대한 정보를 제공합니다.

------
#### [ YAML ]

```
action: "aws:invokeWebhook"
inputs: 
 IntegrationName: "exampleIntegration"
 Body: "Request body"
```

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

```
{
    "action": "aws:invokeWebhook",
    "inputs": {
        "IntegrationName": "exampleIntegration",
        "Body": "Request body"
    }
}
```

------

IntegrationName  
Automation 통합의 이름입니다. 예를 들어 `exampleIntegration`입니다. 지정하는 통합은 이미 존재해야 합니다.  
유형: 문자열  
필수 항목 여부: 예

바디  
웹후크 통합이 호출될 때 전송하려는 페이로드입니다.  
유형: 문자열  
필수 여부: 아니요출력

응답  
웹후크 공급자 응답에서 받은 텍스트입니다.

ResponseCode  
웹후크 공급자 응답에서 받은 HTTP 상태 코드입니다.

# `aws:invokeLambdaFunction` - AWS Lambda 함수 호출
<a name="automation-action-lamb"></a>

지정된 AWS Lambda 함수를 호출합니다.

**참고**  
각 `aws:invokeLambdaFunction` 작업은 최대 300초(5분)까지 실행할 수 있습니다. `aws:invokeLambdaFunction` 단계에서 `timeoutSeconds` 파라미터를 지정하여 시간 제한을 제한할 수 있습니다.

**참고**  
`aws:invokeLambdaFunction` 작업은 자동 스로틀링 재시도를 지원합니다. 자세한 내용은 [스로틀링된 작업에 대한 자동 재시도 구성](automation-throttling-retry.md) 섹션을 참조하세요.

**Input**  
이 작업은 Lambda 서비스에 대한 대부분의 호출된 파라미터를 지원합니다. 자세한 내용은 [Invoke](https://docs.aws.amazon.com/lambda/latest/dg/API_Invoke.html)를 참조하세요.

------
#### [ YAML ]

```
name: invokeMyLambdaFunction
action: aws:invokeLambdaFunction
maxAttempts: 3
timeoutSeconds: 120
onFailure: Abort
inputs:
  FunctionName: MyLambdaFunction
```

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

```
{
    "name": "invokeMyLambdaFunction",
    "action": "aws:invokeLambdaFunction",
    "maxAttempts": 3,
    "timeoutSeconds": 120,
    "onFailure": "Abort",
    "inputs": {
        "FunctionName": "MyLambdaFunction"
    }
}
```

------

FunctionName  
Lambda 함수의 이름입니다. 이 함수가 존재해야 합니다.  
유형: 문자열  
필수 항목 여부: 예

Qualifier  
함수 버전 또는 별칭 이름.  
유형: 문자열  
필수 여부: 아니요

InvocationType  
호출 유형. 기본 값은 `RequestResponse`입니다.  
유형: 문자열  
유효한 값: `Event` \$1 `RequestResponse` \$1 `DryRun`  
필수 여부: 아니요

LogType  
기본값이 `Tail`인 경우 호출 유형은 `RequestResponse`여야 합니다. Lambda는 base64로 인코딩된 Lambda 함수에 의해 생성된 로그 데이터의 마지막 4KB를 반환합니다.  
유형: 문자열  
유효한 값: `None` \$1 `Tail`  
필수 여부: 아니요

ClientContext  
클라이언트 지정 정보.  
필수 여부: 아니요

InputPayload  
핸들러의 첫 번째 파라미터로 전달되는 YAML 또는 JSON 객체입니다. 이 입력을 사용하여 함수에 데이터를 전달할 수 있습니다. 이 입력은 기존 `Payload` 입력보다 더 많은 유연성과 지원을 제공합니다. 작업에 대해 `InputPayload`와 `Payload`를 모두 정의하는 경우 `InputPayload`가 우선하며 `Payload` 값은 사용되지 않습니다.  
유형: StringMap  
필수 여부: 아니요

페이로드  
핸들러의 첫 번째 파라미터에 전달되는 JSON 문자열입니다. 함수에 입력 데이터를 전달하는 데 사용할 수 있습니다. 추가된 기능에는 `InputPayload` 입력을 사용하는 것이 좋습니다.  
유형: 문자열  
필수 여부: 아니요출력

StatusCode  
HTTP 상태 코드.

FunctionError  
존재하는 경우 함수 실행 중에 오류가 발생했음을 나타냅니다. 오류에 대한 세부 정보가 응답 페이로드에 포함됩니다.

LogResult  
Lambda 함수 호출에 대한 base64 인코딩 로그입니다. 로그는 호출 유형이 `RequestResponse`이고 로그가 요청된 경우에만 표시됩니다.

페이로드  
Lambda 함수에서 반환된 객체의 JSON 표현입니다. 호출 유형이 `RequestResponse`인 경우에만 페이로드가 있습니다.

다음은 `aws:invokeLambdaFunction` 작업의 출력을 참조하는 방법을 보여주는 `AWS-PatchInstanceWithRollback` 실행서의 일부입니다.

------
#### [ YAML ]

```
- name: IdentifyRootVolume
  action: aws:invokeLambdaFunction
  inputs:
    FunctionName: "IdentifyRootVolumeLambda-{{automation:EXECUTION_ID}}"
    Payload: '{"InstanceId": "{{InstanceId}}"}'
- name: PrePatchSnapshot
  action: aws:executeAutomation
  inputs:
    DocumentName: "AWS-CreateSnapshot"
    RuntimeParameters:
      VolumeId: "{{IdentifyRootVolume.Payload}}"
      Description: "ApplyPatchBaseline restoration case contingency"
```

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

```
{
    "name": "IdentifyRootVolume",
    "action": "aws:invokeLambdaFunction",
    "inputs": {
      "FunctionName": "IdentifyRootVolumeLambda-{{automation:EXECUTION_ID}}",
      "Payload": "{\"InstanceId\": \"{{InstanceId}}\"}"
    }
  },
  {
    "name": "PrePatchSnapshot",
    "action": "aws:executeAutomation",
    "inputs": {
      "DocumentName": "AWS-CreateSnapshot",
      "RuntimeParameters": {
        "VolumeId": "{{IdentifyRootVolume.Payload}}",
        "Description": "ApplyPatchBaseline restoration case contingency"
      }
    }
  }
```

------

# `aws:loop`- 자동화의 여러 단계를 반복
<a name="automation-action-loop"></a>

이 작업은 Automation 런북의 일부 하위 단계를 반복합니다. `do while` 또는 `for each` 스타일 루프를 선택할 수 있습니다. `do while` 루프를 구성하려면 `LoopCondition` 입력 파라미터를 사용합니다. `for each` 루프를 구성하려면 `Iterators` 및 `IteratorDataType` 입력 파라미터를 사용합니다. `aws:loop` 작업을 사용할 때는 `Iterators` 또는 `LoopCondition` 입력 파라미터 중 하나만 지정하십시오. 최대 반복 횟수는 100회입니다.

`onCancel` 속성은 루프 내에 정의된 단계에 대해서만 사용할 수 있습니다. 해당 `onCancel` 속성은 `aws:loop` 작업에 지원되지 않습니다. `onFailure` 속성은 `aws:loop` 작업에 사용할 수 있지만 예상치 못한 오류가 발생하여 단계가 실패하는 경우에만 사용됩니다. 루프 내 단계에 대해 `onFailure` 속성을 정의하는 경우 `aws:loop` 작업이 이러한 속성을 상속하고 오류가 발생할 경우 적절하게 반응합니다.

**예제**  
다음은 다양한 유형의 루프 작업을 구성하는 방법의 예시입니다.

------
#### [ do while ]

```
name: RepeatMyLambdaFunctionUntilOutputIsReturned
action: aws:loop
inputs:
    Steps:
    - name: invokeMyLambda
        action: aws:invokeLambdaFunction
        inputs:
        FunctionName: LambdaFunctionName
        outputs:
        - Name: ShouldRetry
            Selector: $.Retry
            Type: Boolean
    LoopCondition:
        Variable: "{{ invokeMyLambda.ShouldRetry }}"
        BooleanEquals: true
    MaxIterations: 3
```

------
#### [ for each ]

```
name: stopAllInstancesWithWaitTime
action: aws:loop
inputs:
    Iterators: "{{ DescribeInstancesStep.InstanceIds }}"
    IteratorDataType: "String"
    Steps:
    - name: stopOneInstance
        action: aws:changeInstanceState
        inputs:
        InstanceIds:
            - "{{stopAllInstancesWithWaitTime.CurrentIteratorValue}}"
        CheckStateOnly: false
        DesiredState: stopped
    - name: wait10Seconds
        action: aws:sleep
        inputs:
        Duration: PT10S
```

------

**Input**  
입력은 다음과 같습니다.

반복자  
반복할 단계의 항목 목록입니다. 최대 반복자 수는 100입니다.  
유형: StringList  
필수 여부: 아니요

IteratorDataType  
`Iterators`의 데이터 유형을 지정하는 선택적 파라미터입니다. 이 파라미터의 값은 `Iterators` 입력 파라미터와 함께 제공될 수 있습니다. 이 파라미터와 `Iterators` 값을 지정하지 않으면 `LoopCondition` 파라미터의 값을 지정해야 합니다.  
유형: 문자열  
유효한 값: Boolean \$1 Integer \$1 String \$1 StringMap  
기본값: 문자열  
필수 여부: 아니요

LoopCondition  
평가할 `Variable` 및 연산자 조건으로 구성됩니다. 이 파라미터의 값을 지정하지 않으면 `Iterators` 및 `IteratorDataType` 파라미터의 값을 지정해야 합니다. `And`, `Not`, `Or` 연산자를 조합하여 복잡한 연산자 평가를 사용할 수 있습니다. 조건은 루프의 단계가 완료된 후에 평가됩니다. 조건이 `true`에 해당하고 `MaxIterations` 값에 도달하지 않은 경우 루프의 단계가 다시 실행됩니다. 연산자 조건은 다음과 같습니다.  

**문자열 연산**
+ StringEquals
+ EqualsIgnoreCase
+ StartsWith
+ EndsWith
+ 포함

**수치 연산**
+ NumericEquals
+ NumericGreater
+ NumericLesser
+ NumericGreaterOrEquals
+ NumericLesser
+ NumericLesserOrEquals

**부울 연산**
+ BooleanEquals
유형: StringMap  
필수 여부: 아니요

MaxIterations  
루프의 최대 단계 실행 횟수입니다. 이 입력값에 지정된 값에 도달하면 `LoopCondition` 항목이 여전히 `true`에 해당하거나 `Iterators` 파라미터에 객체가 남아 있더라도 루프 실행이 중지됩니다.  
유형: 정수  
유효한 값은 1\$1100입니다.  
필수 여부: 아니요

단계  
루프에서 실행할 단계 목록입니다. 이들은 중첩된 런북처럼 작동합니다. 이 단계에서 `{{loopStepName.CurrentIteratorValue}}` 구문을 사용하여 `for each` 루프의 현재 반복자 값에 액세스할 수 있습니다. `{{loopStepName.CurrentIteration}}` 구문을 사용하여 두 루프 유형에 대한 현재 반복의 정수 값에 액세스할 수도 있습니다.  
유형: 단계 목록  
필수 여부: 예출력

CurrentIteration  
현재 루프 반복을 정수로 나타낸 값입니다. 반복 값은 1에서 시작합니다.  
유형: 정수

CurrentIteratorValue  
문자열인 현재 반복자 값입니다. 이 출력은 `for each` 루프에만 표시됩니다.  
유형: 문자열

# `aws:pause` - 자동화 일시 중지
<a name="automation-action-pause"></a>

이 작업은 자동화를 일시 중지합니다. 자동화가 일시 중지되면 상태가 [*대기 중(Waiting)*]이 됩니다. 자동화를 계속하려면 신호 유형이 `Resume`인 [SendAutomationSignal](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_SendAutomationSignal.html) API 작업을 사용합니다. 작업 워크플로를 보다 세밀하게 제어할 수 있는 `aws:sleep` 또는`aws:approve` 작업을 사용하는 것이 좋습니다.

**참고**  
이 작업에 대한 기본 제한 시간은 7일(604800초)이고 최대 값은 30일(2592000초)입니다. `aws:pause` 단계에서 `timeoutSeconds` 파라미터를 지정하여 제한 시간을 제한 또는 연장할 수 있습니다.

**Input**  
입력은 다음과 같습니다.

------
#### [ YAML ]

```
name: pauseThis
action: aws:pause
timeoutSeconds: 1209600
inputs: {}
```

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

```
{
    "name": "pauseThis",
    "action": "aws:pause",
    "timeoutSeconds": "1209600",
    "inputs": {}
}
```

------출력

없음  


# `aws:runCommand` - 관리형 인스턴스에서 명령 실행
<a name="automation-action-runcommand"></a>

지정된 명령을 실행합니다.

**참고**  
Automation은 하나의 AWS Systems Manager Run Command 작업의 *Output*만 지원합니다. 런북에는 Run Command 작업이 여러 개 포함될 수 있지만 Output은 한 번에 한 작업에서만 지원됩니다.

**Input**  
이 작업은 대부분의 send-command parameters를 지원합니다. 자세한 내용은 [SendCommand](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_SendCommand.html)를 참조하십시오.

------
#### [ YAML ]

```
- name: checkMembership
  action: 'aws:runCommand'
  inputs:
    DocumentName: AWS-RunPowerShellScript
    InstanceIds:
      - '{{InstanceIds}}'
    Parameters:
      commands:
        - (Get-WmiObject -Class Win32_ComputerSystem).PartOfDomain
```

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

```
{
    "name": "checkMembership",
    "action": "aws:runCommand",
    "inputs": {
        "DocumentName": "AWS-RunPowerShellScript",
        "InstanceIds": [
            "{{InstanceIds}}"
        ],
        "Parameters": {
            "commands": [
                "(Get-WmiObject -Class Win32_ComputerSystem).PartOfDomain"
            ]
        }
    }
}
```

------

DocumentName  
명령 유형 문서가 사용자 또는 AWS의 소유인 경우 문서의 이름을 지정합니다. 다른 AWS 계정이 공유한 문서를 사용하는 경우 문서의 Amazon 리소스 이름(ARN)을 지정합니다. 공유 문서 사용에 대한 자세한 내용은 [공유 SSM 문서 사용](documents-ssm-sharing.md#using-shared-documents) 섹션을 참조하세요.  
유형: 문자열  
필수 항목 여부: 예

InstanceIds  
명령을 실행할 인스턴스 ID입니다. 최대 50개 ID를 지정할 수 있습니다.  
또한 인스턴스 ID 대신 의사 파라미터 `{{RESOURCE_ID}}`를 사용하여 대상 그룹의 모든 인스턴스에서 명령을 실행할 수 있습니다. 가상 parameters에 대한 자세한 내용은 [유지 관리 기간 작업 등록 시 의사 파라미터 사용](maintenance-window-tasks-pseudo-parameters.md) 단원을 참조하십시오.  
또 다른 대안은 `Targets` 파라미터를 사용하여 인스턴스 플릿에 명령을 보내는 것입니다. `Targets` 파라미터는 Amazon Elastic Compute Cloud(Amazon EC2) 태그를 허용합니다. `Targets` 파라미터 사용 방법에 대한 자세한 내용은 [대규모로 명령 실행](send-commands-multiple.md) 섹션을 참조하세요.  
유형: StringList  
필수 여부: 아니요(InstanceId를 지정하지 않거나 `{{RESOURCE_ID}}` 의사 파라미터를 사용하지 않는 경우 `Targets` 파라미터를 지정해야 함)

Targets  
지정한 키, 값 조합을 사용하여 인스턴스를 targets 하는 검색 기준의 배열입니다. `Targets`는 호출에 하나 이상의 인스턴스 ID를 제공하지 않는 경우 필요합니다. `Targets` 파라미터 사용 방법에 대한 자세한 내용은 [대규모로 명령 실행](send-commands-multiple.md) 섹션을 참조하세요.  
형식: MapList(목록의 맵 스키마가 객체와 일치해야 합니다.) 자세한 내용은 *AWS Systems Manager API Reference*의 [Target](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_Target.html)을 참조하세요.  
필수 여부: 아니요(`Targets`를 지정하지 않는 경우 InstanceId를 지정하거나 `{{RESOURCE_ID}}` 의사 파라미터를 사용해야 함)  
다음은 한 예입니다.  

```
- name: checkMembership
  action: aws:runCommand
  inputs:
    DocumentName: AWS-RunPowerShellScript
    Targets:
      - Key: tag:Stage
        Values:
          - Gamma
          - Beta
      - Key: tag-key
        Values:
          - Suite
    Parameters:
      commands:
        - (Get-WmiObject -Class Win32_ComputerSystem).PartOfDomain
```

```
{
    "name": "checkMembership",
    "action": "aws:runCommand",
    "inputs": {
        "DocumentName": "AWS-RunPowerShellScript",
        "Targets": [                   
            {
                "Key": "tag:Stage",
                "Values": [
                    "Gamma", "Beta"
                ]
            },
            {
                "Key": "tag:Application",
                "Values": [
                    "Suite"
                ]
            }
        ],
        "Parameters": {
            "commands": [
                "(Get-WmiObject -Class Win32_ComputerSystem).PartOfDomain"
            ]
        }
    }
}
```

Parameters  
문서에서 지정된 필수 및 선택 Parameters.  
유형: 맵  
필수 여부: 아니요

CloudWatchOutputConfig  
명령 Output을 Amazon CloudWatch Logs로 전송하기 위한 구성 옵션입니다. CloutWatch Logs로 명령 Output 전송에 대한 자세한 내용은 [Run Command에 대한 Amazon CloudWatch Logs 구성](sysman-rc-setting-up-cwlogs.md) 섹션을 참조하세요.  
유형: StringMap(지도의 스키마는 객체와 일치해야 합니다. 자세한 내용은 *AWS Systems Manager API Reference*의 [CloudWatchOutputConfig](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_CloudWatchOutputConfig.html)를 참조하세요.)  
필수 여부: 아니요  
다음은 한 예입니다.  

```
- name: checkMembership
  action: aws:runCommand
  inputs:
    DocumentName: AWS-RunPowerShellScript
    InstanceIds:
      - "{{InstanceIds}}"
    Parameters:
      commands:
        - "(Get-WmiObject -Class Win32_ComputerSystem).PartOfDomain"
    CloudWatchOutputConfig:
      CloudWatchLogGroupName: CloudWatchGroupForSSMAutomationService
      CloudWatchOutputEnabled: true
```

```
{
    "name": "checkMembership",
    "action": "aws:runCommand",
    "inputs": {
        "DocumentName": "AWS-RunPowerShellScript",
        "InstanceIds": [
            "{{InstanceIds}}"
        ],
        "Parameters": {
            "commands": [
                "(Get-WmiObject -Class Win32_ComputerSystem).PartOfDomain"
            ]
        },
        "CloudWatchOutputConfig" : { 
                "CloudWatchLogGroupName": "CloudWatchGroupForSSMAutomationService",
                "CloudWatchOutputEnabled": true
        }
    }
}
```

Comment  
명령에 관한 사용자 정의 정보.  
유형: 문자열  
필수 여부: 아니요

DocumentHash  
문서에 대한 해시.  
유형: 문자열  
필수 여부: 아니요

DocumentHashType  
해시의 유형.  
유형: 문자열  
유효한 값: `Sha256` \$1 `Sha1`  
필수 여부: 아니요

NotificationConfig  
알림 전송에 대한 구성.  
필수 여부: 아니요

OutputS3BucketName  
명령 Output 응답에 대한 S3 버킷의 이름. S3 버킷이 Output을 성공적으로 로깅하려면 관리형 노드에 권한이 있어야 합니다.  
유형: 문자열  
필수 여부: 아니요

OutputS3KeyPrefix  
 접두사입니다.  
유형: 문자열  
필수 여부: 아니요

ServiceRoleArn  
AWS Identity and Access Management(IAM) 역할의 ARN.  
유형: 문자열  
필수 여부: 아니요

TimeoutSeconds  
명령이 인스턴스의 AWS Systems Manager SSM Agent에 전송될 때까지 대기하는 시간(초)입니다. 지정된 값에 도달하기 전에 인스턴스의 SSM Agent에서 명령을 수신하지 않으면 명령 Status가 `Delivery Timed Out`으로 변경됩니다.  
유형: 정수  
필수 여부: 아니요  
유효한 값: 30\$12592000Output

CommandId  
명령의 ID.

Status  
명령 Status.

ResponseCode  
명령의 응답 코드입니다. 실행하는 문서의 단계가 두 개 이상인 경우 이 Output에는 값이 반환되지 않습니다.

Output  
명령의 Output입니다. 명령으로 태그 또는 여러 인스턴스를 대상으로 지정하는 경우 Output 값이 반환되지 않습니다. `GetCommandInvocation` 및 `ListCommandInvocations` API 작업을 사용하여 개별 인스턴스의 Output을 검색할 수 있습니다.

# `aws:runInstances` - Amazon EC2 인스턴스 시작
<a name="automation-action-runinstance"></a>

새로운 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스를 시작합니다.

**참고**  
`aws:runInstances` 작업은 자동 스로틀링 재시도를 지원합니다. 자세한 내용은 [스로틀링된 작업에 대한 자동 재시도 구성](automation-throttling-retry.md) 섹션을 참조하세요.

**Input**  
이 작업은 대다수 API 파라미터를 지원합니다. 자세한 내용은 [RunInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html) API 문서를 참조하세요.

------
#### [ YAML ]

```
name: launchInstance
action: aws:runInstances
maxAttempts: 3
timeoutSeconds: 1200
onFailure: Abort
inputs:
  ImageId: ami-12345678
  InstanceType: t2.micro
  MinInstanceCount: 1
  MaxInstanceCount: 1
  IamInstanceProfileName: myRunCmdRole
  TagSpecifications:
  - ResourceType: instance
    Tags:
    - Key: LaunchedBy
      Value: SSMAutomation
    - Key: Category
      Value: HighAvailabilityFleetHost
```

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

```
{
   "name":"launchInstance",
   "action":"aws:runInstances",
   "maxAttempts":3,
   "timeoutSeconds":1200,
   "onFailure":"Abort",
   "inputs":{
      "ImageId":"ami-12345678",
      "InstanceType":"t2.micro",
      "MinInstanceCount":1,
      "MaxInstanceCount":1,
      "IamInstanceProfileName":"myRunCmdRole",
      "TagSpecifications":[
         {
            "ResourceType":"instance",
            "Tags":[
               {
                  "Key":"LaunchedBy",
                  "Value":"SSMAutomation"
               },
               {
                  "Key":"Category",
                  "Value":"HighAvailabilityFleetHost"
               }
            ]
         }
      ]
   }
}
```

------

AdditionalInfo  
예약.  
유형: 문자열  
필수 여부: 아니요

BlockDeviceMappings  
해당 인스턴스용 블록 디바이스.  
유형: MapList  
필수 여부: 아니요

ClientToken  
요청의 멱등성을 보장하는 식별자.  
유형: 문자열  
필수 여부: 아니요

DisableApiTermination  
인스턴스 API 종료를 설정하거나 해제합니다.  
유형: 부울  
필수 여부: 아니요

EbsOptimized  
Amazon Elastic Block Store(Amazon EBS) 최적화를 설정하거나 해제합니다.  
유형: 부울  
필수 여부: 아니요

IamInstanceProfileArn  
인스턴스에 대한 AWS Identity and Access Management(IAM) 인스턴스 프로파일의 Amazon 리소스 이름(ARN)입니다.  
유형: 문자열  
필수 여부: 아니요

IamInstanceProfileName  
인스턴스용 IAM 인스턴스 프로파일의 이름입니다.  
유형: 문자열  
필수 여부: 아니요

ImageId  
Amazon Machine Image(AMI)의 ID입니다.  
유형: 문자열  
필수 항목 여부: 예

InstanceInitiatedShutdownBehavior  
시스템 종료 시 인스턴스를 중지할지 종료할지 나타냅니다.  
유형: 문자열  
필수 여부: 아니요

InstanceType  
인스턴스 유형.  
인스턴스 유형 값이 제공되지 않은 경우에는 m1 스몰 인스턴스 유형이 사용됩니다.
유형: 문자열  
필수 여부: 아니요

KernelId  
커널 ID.  
유형: 문자열  
필수 여부: 아니요

KeyName  
키 페어 이름.  
유형: 문자열  
필수 여부: 아니요

MaxInstanceCount  
시작되는 인스턴스의 최대 수.  
유형: 문자열  
필수 여부: 아니요

MetadataOptions  
인스턴스에 대한 메타데이터 옵션입니다. 자세한 내용은 [InstanceMetadataOptionsRequest](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_InstanceMetadataOptionsRequest.html)를 참조하세요.  
유형: StringMap  
필수 여부: 아니요

MinInstanceCount  
시작되는 인스턴스의 최소 수.  
유형: 문자열  
필수 여부: 아니요

모니터링  
세부 모니터링을 설정하거나 해제합니다.  
유형: 부울  
필수 여부: 아니요

NetworkInterfaces  
네트워크 인터페이스.  
유형: MapList  
필수 여부: 아니요

배치  
인스턴스 배치.  
유형: StringMap  
필수 여부: 아니요

PrivateIpAddress  
기본 IPv4 주소.  
유형: 문자열  
필수 여부: 아니요

RamdiskId  
RAM 디스크 ID.  
유형: 문자열  
필수 여부: 아니요

SecurityGroupIds  
인스턴스에 대한 보안 그룹의 ID.  
유형: StringList  
필수 여부: 아니요

SecurityGroups  
인스턴스에 대한 보안 그룹의 이름.  
유형: StringList  
필수 여부: 아니요

SubnetId  
서브넷 ID.  
유형: 문자열  
필수 여부: 아니요

TagSpecifications  
시작 시 리소스에 적용되는 태그. 시작 시에만 인스턴스와 볼륨에 태그를 지정할 수 있습니다. 지정된 태그는 시작 시 생성된 모든 인스턴스 또는 볼륨에 적용됩니다. 시작된 후 인스턴스에 태그를 지정하려면 [`aws:createTags` - AWS 리소스에 대한 태그 생성](automation-action-createtag.md) 작업을 사용합니다.  
형식: MapList. 자세한 내용은 [TagSpecification](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_TagSpecification.html)을 참조하세요.  
필수 여부: 아니요

UserData  
문자열 리터럴 값으로 제공된 스크립트입니다. 리터럴 값이 입력되면 Base64로 인코딩되어야 합니다.  
유형: 문자열  
필수 여부: 아니요출력

InstanceIds  
인스턴스의 ID.

InstanceStates  
인스턴스의 현재 상태입니다.

# `aws:sleep` - 자동화 지연
<a name="automation-action-sleep"></a>

지정된 시간 동안 자동화를 지연시킵니다. 이 작업은 ISO(국제 표준화 기구) 8601 날짜 및 시간 형식을 사용합니다. 이 날짜 및 시간 형식에 대한 자세한 내용은 [ISO 8601](https://www.iso.org/iso-8601-date-and-time-format.html)을 참조하십시오.

**Input**  
지정된 기간 동안 자동화를 지연시킬 수 있습니다.

------
#### [ YAML ]

```
name: sleep
action: aws:sleep
inputs:
  Duration: PT10M
```

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

```
{
   "name":"sleep",
   "action":"aws:sleep",
   "inputs":{
      "Duration":"PT10M"
   }
}
```

------

또한 지정된 날짜와 시간까지 자동화를 지연시킬 수 있습니다. 지정된 날짜와 시간이 경과하면 작업이 즉시 진행됩니다.

------
#### [ YAML ]

```
name: sleep
action: aws:sleep
inputs:
  Timestamp: '2020-01-01T01:00:00Z'
```

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

```
{
    "name": "sleep",
    "action": "aws:sleep",
    "inputs": {
        "Timestamp": "2020-01-01T01:00:00Z"
    }
}
```

------

**참고**  
Automation은 최대 지연을 604,799초(7일)까지 지원합니다.

지속 시간  
ISO 8601 기간. 음의 기간을 지정할 수 없습니다.  
유형: 문자열  
필수 여부: 아니요

타임스탬프  
ISO 8601 타임스탬프. 이 파라미터의 값을 지정하지 않으면 `Duration` 파라미터의 값을 지정해야 합니다.  
유형: 문자열  
필수 여부: 아니요출력

없음  


# `aws:updateVariable` - 런북 변수 값을 업데이트
<a name="automation-action-update-variable"></a>

이 작업은 런북 변수 값을 업데이트합니다. 값의 데이터 유형은 업데이트하려는 변수의 데이터 유형과 일치해야 합니다. 데이터 유형 변환은 지원되지 않습니다. 해당 `onCancel` 속성은 `aws:updateVariable` 작업에 지원되지 않습니다.

**Input**  
입력은 다음과 같습니다.

------
#### [ YAML ]

```
name: updateStringList
action: aws:updateVariable
inputs:
    Name: variable:variable name
    Value:
    - "1"
    - "2"
```

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

```
{
    "name": "updateStringList",
    "action": "aws:updateVariable",
    "inputs": {
        "Name": "variable:variable name",
        "Value": ["1","2"]
    }
}
```

------

이름  
값을 업데이트할 변수의 이름입니다. `variable:variable name` 형식을 사용해야 합니다.  
유형: 문자열  
필수 항목 여부: 예

값  
변수에 할당할 새 값입니다. 값은 변수의 데이터 유형과 일치해야 합니다. 데이터 유형 변환은 지원되지 않습니다.  
형식: Boolean \$1 Integer \$1 MapList \$1 String \$1 StringList \$1 StringMap  
필수 여부: 예  
제약 조건:  
+ MapList는 최대 200개의 항목을 포함할 수 있습니다.
+ 키 길이는 최소 1자이고 최대 길이는 50자입니다.
+ StringList는 최소 0개 항목에서 최대 50개 항목일 수 있습니다.
+ 문자열의 최소 길이는 1자이고 최대 길이는 512자입니다.출력

없음  


# `aws:waitForAwsResourceProperty` - AWS 리소스 속성 대기
<a name="automation-action-waitForAwsResourceProperty"></a>

`aws:waitForAwsResourceProperty` 작업을 사용하면 자동화를 계속 진행하기 전에 자동화에서 특정 리소스 상태나 이벤트 상태를 대기할 수 있습니다. 이 작업을 사용하는 방법에 관한 자세한 내용은 [추가 런북 예제](automation-document-examples.md) 섹션을 참조하세요.

**참고**  
이 작업의 기본 제한 시간 값은 3,600초(1시간)입니다. `aws:waitForAwsResourceProperty` 단계에서 `timeoutSeconds` 파라미터를 지정하여 제한 시간을 제한 또는 연장할 수 있습니다. 이 작업을 사용하는 방법에 관한 자세한 내용과 예제는 [실행서에서 시간 제한 처리](automation-handling-timeouts.md) 섹션을 참조하세요.

**참고**  
`aws:waitForAwsResourceProperty` 작업은 자동 스로틀링 재시도를 지원합니다. 자세한 내용은 [스로틀링된 작업에 대한 자동 재시도 구성](automation-throttling-retry.md) 섹션을 참조하세요.

**Input**  
입력은 선택하는 API 작업에 의해 정의됩니다.

------
#### [ YAML ]

```
action: aws:waitForAwsResourceProperty
inputs:
  Service: The official namespace of the service
  Api: The API operation or method name
  API operation inputs or parameters: A value
  PropertySelector: Response object
  DesiredValues:
  - Desired property value
```

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

```
{
  "action": "aws:waitForAwsResourceProperty",
  "inputs": {
    "Service":"The official namespace of the service",
    "Api":"The API operation or method name",
    "API operation inputs or parameters":"A value",
    "PropertySelector": "Response object",
    "DesiredValues": [
      "Desired property value"
    ]
  }
}
```

------

서비스  
실행하려는 API 작업을 포함하는 AWS 서비스 네임스페이스입니다. 예를 들면 AWS Systems Manager의 네임스페이스는 `ssm`입니다. Amazon Elastic Compute Cloud(Amazon EC2)의 네임스페이스는 `ec2`입니다. *AWS CLI 명령 참조*의 [사용 가능한 서비스](https://docs.aws.amazon.com/cli/latest/reference/#available-services) 섹션에서 지원되는 AWS 서비스 네임스페이스 목록을 볼 수 있습니다.  
유형: 문자열  
필수 항목 여부: 예

Api  
실행할 API 작업의 이름입니다. 다음 [[서비스 참조(Services Reference)](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/index.html)] 페이지의 왼쪽 탐색 영역에서 서비스를 선택하여 API 작업(메서드라고도 함)을 볼 수 있습니다. 호출할 서비스에 대한 **클라이언트** 섹션에서 메서드를 선택합니다. 예를 들어 Amazon Relational Database Service(Amazon RDS)에 대한 모든 API 작업(메서드)이 [Amazon RDS 메서드](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/rds.html) 페이지에 나열됩니다.  
유형: 문자열  
필수 항목 여부: 예

API 작업 입력  
하나 이상의 API 작업 입력입니다. 다음 [서비스 참조](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/index.html) 페이지의 왼쪽 탐색 영역에서 서비스를 선택하여 사용할 수 있는 입력(파라미터)을 볼 수 있습니다. 호출할 서비스에 대한 **클라이언트** 섹션에서 메서드를 선택합니다. 예를 들어 Amazon RDS에 대한 모든 메서드는 [Amazon RDS 메서드](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/rds.html) 페이지에 나열됩니다. [describe\$1db\$1instances](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/rds.html#RDS.Client.describe_db_instances) 메서드를 선택하고 아래로 스크롤하여 **DBInstanceIdentifier**, **Name** 및 **Values** 같은 사용할 수 있는 파라미터를 볼 수 있습니다.  

```
inputs:
  Service: The official namespace of the service
  Api: The API operation name
  API input 1: A value
  API Input 2: A value
  API Input 3: A value
```

```
"inputs":{
      "Service":"The official namespace of the service",
      "Api":"The API operation name",
      "API input 1":"A value",
      "API Input 2":"A value",
      "API Input 3":"A value"
}
```
형식: 선택한 API 작업에 의해 결정됨  
필수 여부: 예

PropertySelector  
응답 객체의 특정 속성에 대한 JSONPath입니다. 다음 [서비스 참조](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/index.html) 페이지의 왼쪽 탐색 영역에서 서비스를 선택하여 응답 객체를 볼 수 있습니다. 호출할 서비스에 대한 **클라이언트** 섹션에서 메서드를 선택합니다. 예를 들어 Amazon RDS에 대한 모든 메서드는 [Amazon RDS 메서드](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/rds.html) 페이지에 나열됩니다. [describe\$1db\$1instances](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/rds.html#RDS.Client.describe_db_instances) 메서드를 선택하고 **Response Structure(응답 구조)** 섹션이 있는 아래쪽으로 스크롤합니다. **DBInstances**가 응답 객체로 나열됩니다.  
유형: 문자열  
필수 항목 여부: 예

DesiredValues  
필요한 상태 또는 자동화를 계속 진행하기 위해 충족되어야 할 상태입니다.  
유형: MapList, StringList  
필수 여부: 예

# Automation 시스템 변수
<a name="automation-variables"></a>

AWS Systems Manager Automation 실행서는 다음 변수를 사용합니다. 이러한 변수를 사용하는 방법의 예는 `AWS-UpdateWindowsAmi` 실행서의 JSON 원본을 참조하세요.

**`AWS-UpdateWindowsAmi` 실행서의 JSON 소스를 보려면**

1. AWS Systems Manager 콘솔([https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/))을 엽니다.

1. 탐색 창에서 **Documents**를 선택합니다.

1. 문서 목록에서 검색 창을 사용하거나 검색 창 오른쪽의 숫자를 사용하여 실행서 `AWS-UpdateWindowsAmi`를 선택합니다.

1. **콘텐츠** 탭을 선택합니다.

**시스템 변수**  
Automation 실행서는 다음 시스템 변수를 지원합니다.


****  

| 변수 | Details | 
| --- | --- | 
|  `global:ACCOUNT_ID`  |  Automation이 실행되는 사용자 또는 역할의 AWS 계정 ID입니다.  | 
|  `global:DATE`  |  yyyy-MM-dd 형식의 날짜(런타임 시).  | 
|  `global:DATE_TIME`  |  yyyy-MM-dd\$1HH.mm.ss 형식의 날짜와 시간(런타임 시).  | 
|  `global:AWS_PARTITION`  |  리소스가 있는 파티션. 표준 AWS 리전에서 파티션은 `aws`입니다. 다른 파티션에 있는 리소스의 경우 파티션은 `aws-partitionname`입니다. 예를 들어 AWS GovCloud(미국 서부) 리전의 리소스 파티션은 `aws-us-gov`입니다.  | 
|  `global:REGION`  |  실행서가 실행되는 리전입니다. 예: us-east-2.  | 

**Automation 변수**  
Automation 실행서는 다음 자동화 변수를 지원합니다.


****  

| 변수 | Details | 
| --- | --- | 
|  `automation:EXECUTION_ID`  |  현재 자동화에 할당된 고유 식별자입니다. 예: `1a2b3c-1a2b3c-1a2b3c-1a2b3c1a2b3c1a2b3c`.  | 

**Topics**
+ [용어](#automation-terms)
+ [지원되는 시나리오](#automation-variables-support)
+ [지원되지 않는 시나리오](#automation-variables-unsupported)

## 용어
<a name="automation-terms"></a>

다음 용어는 변수 및 파라미터 확인 방식을 설명합니다.


****  

| 용어 | 정의 | 예 | 
| --- | --- | --- | 
|  Constant ARN  |  변수가 없는 유효한 Amazon 리소스 이름(ARN)입니다.  |  `arn:aws:iam::123456789012:role/roleName`  | 
|  실행서 파라미터  |  실행서 수준에서 정의된 파라미터(예:`instanceId`)입니다. 파라미터는 기본 문자열 대체 항목으로 사용됩니다. 값은 실행 시작 시점에 제공됩니다.  |  <pre>{ <br />   "description": "Create Image Demo",<br />   "version": "0.3",<br />   "assumeRole": "Your_Automation_Assume_Role_ARN",<br />   "parameters":{ <br />      "instanceId": { <br />         "type": "String",<br />         "description": "Instance to create image from"<br />   }<br />}</pre>  | 
|  시스템 변수  |  실행서의 일부를 평가할 때 실행서에 대체 항목으로 제공되는 일반 변수입니다.  |  <pre>"activities": [ <br />   { <br />      "id": "copyImage",<br />      "activityType": "AWS-CopyImage",<br />      "maxAttempts": 1,<br />      "onFailure": "Continue",<br />      "inputs": { <br />         "ImageName": "{{imageName}}",<br />         "SourceImageId": "{{sourceImageId}}",<br />         "SourceRegion": "{{sourceRegion}}",<br />         "Encrypted": true,<br />         "ImageDescription": "Test CopyImage Description created on {{global:DATE}}"<br />      }<br />   }<br />]</pre>  | 
|  자동화 변수  |  실행서의 일부를 평가할 때 실행서에 대체 항목으로 제공되는 자동화 관련 변수입니다.  |  <pre>{ <br />   "name": "runFixedCmds",<br />   "action": "aws:runCommand",<br />   "maxAttempts": 1,<br />   "onFailure": "Continue",<br />   "inputs": { <br />      "DocumentName": "AWS-RunPowerShellScript",<br />      "InstanceIds": [ <br />         "{{LaunchInstance.InstanceIds}}"<br />      ],<br />      "Parameters": { <br />         "commands": [ <br />            "dir",<br />            "date",<br />            "“{{outputFormat}}” -f “left”,”right”,”{{global:DATE}}”,”{{automation:EXECUTION_ID}}”<br />         ]<br />      }<br />   }<br />}</pre>  | 
|  Systems Manager 파라미터  |  AWS Systems Manager Parameter Store에서 정의된 변수입니다. 단계 입력에서는 직접 참조할 수 없습니다. 파라미터에 액세스하려면 권한이 필요할 수 있습니다.  |  <pre><br />description: Launch new Windows test instance<br />schemaVersion: '0.3'<br />assumeRole: '{{AutomationAssumeRole}}'<br />parameters:<br />  AutomationAssumeRole:<br />    type: String<br />    default: ''<br />    description: >-<br />      (Required) The ARN of the role that allows Automation to perform the<br />      actions on your behalf. If no role is specified, Systems Manager<br />      Automation uses your IAM permissions to run this runbook.<br />  LatestAmi:<br />    type: String<br />    default: >-<br />      {{ssm:/aws/service/ami-windows-latest/Windows_Server-2016-English-Full-Base}}<br />    description: The latest Windows Server 2016 AMI queried from the public parameter.<br />mainSteps:<br />  - name: launchInstance<br />    action: 'aws:runInstances'<br />    maxAttempts: 3<br />    timeoutSeconds: 1200<br />    onFailure: Abort<br />    inputs:<br />      ImageId: '{{LatestAmi}}'<br />...</pre>  | 

## 지원되는 시나리오
<a name="automation-variables-support"></a>


****  

| 시나리오 | 설명 | 예 | 
| --- | --- | --- | 
|  생성 시 상수 ARN `assumeRole`.  |  호출 사용자가 지정된 `assumeRole`을 전달하도록 허용되는지 확인하는 권한 부여 확인이 수행됩니다.  |  <pre>{<br />  "description": "Test all Automation resolvable parameters",<br />  "schemaVersion": "0.3",<br />  "assumeRole": "arn:aws:iam::123456789012:role/roleName",<br />  "parameters": { <br />  ...</pre>  | 
|  자동화가 시작될 때 `AssumeRole`에 제공되는 실행서 파라미터입니다.  |  실행서의 파라미터 목록에서 정의되어야 합니다.  |  <pre>{<br />  "description": "Test all Automation resolvable parameters",<br />  "schemaVersion": "0.3",<br />  "assumeRole": "{{dynamicARN}}",<br />  "parameters": {<br /> ...</pre>  | 
|  시작 시 실행서 파라미터에 제공된 값입니다.  |  고객이 파라미터에 사용할 값을 제공합니다. 시작 시 제공된 입력이 실행서의 파라미터 목록에 정의되어야 합니다.  |  <pre>...<br />"parameters": {<br />    "amiId": {<br />      "type": "String",<br />      "default": "ami-12345678",<br />      "description": "list of commands to run as part of first step"<br />    },<br />...</pre> 자동화 실행 시작에 입력되는 항목: `{"amiId" : ["ami-12345678"] }`  | 
|  실행서 내용 내에서 참조되는 Systems Manager 파라미터입니다.  |  변수는 고객의 계정 내에 존재하거나 공개적으로 액세스 가능한 파라미터이며 실행서의 `AssumeRole`은 변수에 액세스할 수 있습니다. 생성 시 `AssumeRole`에 액세스 권한이 있는지 확인이 이루어집니다. 이 파라미터는 단계 입력에서 직접 참조할 수 없습니다.  |  <pre><br />...<br />parameters:<br />    LatestAmi:<br />    type: String<br />    default: >-<br />      {{ssm:/aws/service/ami-windows-latest/Windows_Server-2016-English-Full-Base}}<br />    description: The latest Windows Server 2016 AMI queried from the public parameter.<br />mainSteps:<br />  - name: launchInstance<br />    action: 'aws:runInstances'<br />    maxAttempts: 3<br />    timeoutSeconds: 1200<br />    onFailure: Abort<br />    inputs:<br />      ImageId: '{{LatestAmi}}'<br />...</pre>  | 
|  단계 정의 내에서 참조되는 시스템 변수  |  자동화가 시작될 때 시스템 변수가 실행서로 대체됩니다. 실행서에 입력된 값은 대체가 이루어진 시점과 관련이 있습니다. 즉, 그 사이의 단계를 실행하는 데 걸리는 시간 때문에 1단계에 입력된 시간 변수의 값은 3단계에 입력된 값과 다릅니다. 시스템 변수를 실행서의 파라미터 목록에 설정할 필요가 없습니다.  |  <pre>...<br />  "mainSteps": [<br />    {<br />      "name": "RunSomeCommands",<br />      "action": "aws:runCommand",<br />      "maxAttempts": 1,<br />      "onFailure": "Continue",<br />      "inputs": {<br />        "DocumentName": "AWS:RunPowerShell",<br />        "InstanceIds": ["{{LaunchInstance.InstanceIds}}"],<br />        "Parameters": {<br />            "commands" : [<br />                "echo {The time is now {{global:DATE_TIME}}}"<br />            ]<br />        }<br />    }<br />}, ... </pre>  | 
|  단계 정의 내에서 참조되는 자동화 변수.  |  자동화 변수를 실행서의 파라미터 목록에 설정할 필요가 없습니다. 지원되는 유일한 자동화 변수는 **automation:EXECUTION\$1ID**입니다.  |  <pre>...<br />"mainSteps": [<br />    {<br />      "name": "invokeLambdaFunction",<br />      "action": "aws:invokeLambdaFunction",<br />      "maxAttempts": 1,<br />      "onFailure": "Continue",<br />      "inputs": {<br />        "FunctionName": "Hello-World-LambdaFunction",<br /><br />"Payload" : "{ "executionId" : "{{automation:EXECUTION_ID}}" }"<br />      }<br />    }<br />... </pre>  | 
|  다음 단계 정의에 포함된 이전 단계의 출력을 참조하십시오.  |  이는 파라미터 리디렉션입니다. 이전 단계의 출력은 구문 `{{stepName.OutputName}}`을 이용해 참조됩니다. 고객은 이 구문을 실행서 파라미터에 사용할 수 없습니다. 이것은 참조 단계가 실행될 때 해결됩니다. 파라미터가 실행서의 파라미터에 열거되지 않습니다.  |  <pre>...<br />"mainSteps": [<br />    {<br />      "name": "LaunchInstance",<br />      "action": "aws:runInstances",<br />      "maxAttempts": 1,<br />      "onFailure": "Continue",<br />      "inputs": {<br />        "ImageId": "{{amiId}}",<br />        "MinInstanceCount": 1,<br />        "MaxInstanceCount": 2<br />      }<br />    },<br />    {<br />      "name":"changeState",<br />      "action": "aws:changeInstanceState",<br />      "maxAttempts": 1,<br />      "onFailure": "Continue",<br />      "inputs": {<br />        "InstanceIds": ["{{LaunchInstance.InstanceIds}}"],<br />        "DesiredState": "terminated"<br />      }<br />    }<br /><br />... </pre>  | 

## 지원되지 않는 시나리오
<a name="automation-variables-unsupported"></a>


****  

| 시나리오 | 설명 | 예 | 
| --- | --- | --- | 
|  생성 시 `assumeRole`에 제공되는 Systems Manager 파라미터입니다.  |  지원하지 않음.  |  <pre>...<br /><br />{<br />  "description": "Test all Automation resolvable parameters",<br />  "schemaVersion": "0.3",<br />  "assumeRole": "{{ssm:administratorRoleARN}}",<br />  "parameters": {<br /><br />... </pre>  | 
|  Systems Manager 파라미터는 단계 입력에서 직접 참조할 수 있습니다.  |  생성 시 `InvalidDocumentContent` 예외를 반환합니다.  |  <pre><br />...<br />mainSteps:<br />  - name: launchInstance<br />    action: 'aws:runInstances'<br />    maxAttempts: 3<br />    timeoutSeconds: 1200<br />    onFailure: Abort<br />    inputs:<br />      ImageId: '{{ssm:/aws/service/ami-windows-latest/Windows_Server-2016-English-Full-Base}}'<br />...</pre>  | 
|  변수 단계 정의  |  실행서에서 단계의 정의는 변수에 의해 구성됩니다.  |  <pre>...<br /><br />"mainSteps": [<br />    {<br />      "name": "LaunchInstance",<br />      "action": "aws:runInstances",<br />      "{{attemptModel}}": 1,<br />      "onFailure": "Continue",<br />      "inputs": {<br />        "ImageId": "ami-12345678",<br />        "MinInstanceCount": 1,<br />        "MaxInstanceCount": 2<br />      }<br /><br />...<br /><br />User supplies input : { "attemptModel" : "minAttempts" } </pre>  | 
|  실행서 파라미터 상호 참조  |  시작 시 사용자가 실행서 내 다른 파라미터에 대한 참조인 입력 파라미터를 제공합니다.  |  <pre>...<br />"parameters": {<br />    "amiId": {<br />      "type": "String",<br />      "default": "ami-7f2e6015",<br />      "description": "list of commands to run as part of first step"<br />    },<br />    "alternateAmiId": {<br />      "type": "String",<br />      "description": "The alternate AMI to try if this first fails".<br /><br />"default" : "{{amiId}}"<br />    },<br /><br />... </pre>  | 
|  다중 확장  |  실행서가 변수의 이름으로 평가되는 변수를 정의합니다. 이는 변수 구분 기호(즉 *\$1\$1 \$1\$1*) 내에 포함되고 해당 변수/파라미터의 값으로 확장됩니다.  |  <pre>...<br />  "parameters": {<br />    "firstParameter": {<br />      "type": "String",<br />      "default": "param2",<br />      "description": "The parameter to reference"<br />    },<br />    "secondParameter": {<br />      "type": "String",<br />      "default" : "echo {Hello world}",<br />      "description": "What to run"<br />    }<br />  },<br />  "mainSteps": [{<br />      "name": "runFixedCmds",<br />      "action": "aws:runCommand",<br />      "maxAttempts": 1,<br />      "onFailure": "Continue",<br />      "inputs": {<br />        "DocumentName": "AWS-RunPowerShellScript",<br /><br />"InstanceIds" : "{{LaunchInstance.InstanceIds}}",<br />        "Parameters": {<br />          "commands": [ "{{ {{firstParameter}} }}"]<br /><br />}<br /><br />...<br /><br />Note: The customer intention here would be to run a command of "echo {Hello world}" </pre>  | 
|  변수 유형이 다른 실행서 단계의 출력을 참조  |  사용자가 이후 단계에서 이전 실행서 단계의 출력을 참조합니다. 출력이 이후 단계 작업의 요구 사항을 충족하지 않는 변수 유형입니다.  |  <pre>...<br />mainSteps:<br />- name: getImageId<br />  action: aws:executeAwsApi<br />  inputs:<br />    Service: ec2<br />    Api: DescribeImages<br />    Filters:  <br />    - Name: "name"<br />      Values: <br />      - "{{ImageName}}"<br />  outputs:<br />  - Name: ImageIdList<br />    Selector: "$.Images"<br />    Type: "StringList"<br />- name: copyMyImages<br />  action: aws:copyImage<br />  maxAttempts: 3<br />  onFailure: Abort<br />  inputs:<br />    SourceImageId: {{getImageId.ImageIdList}}<br />    SourceRegion: ap-northeast-2<br />    ImageName: Encrypted Copies of LAMP base AMI in ap-northeast-2<br />    Encrypted: true <br />... <br />Note: You must provide the type required by the Automation action. <br />In this case, aws:copyImage requires a "String" type variable but the preceding step outputs a "StringList" type variable.<br />                                        </pre>  | 