

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

# AWS Systems Manager State Manager
<a name="systems-manager-state"></a>

AWS Systems Manager의 도구인 State Manager는 안전하고 확장 가능한 구성 관리 서비스로서 관리형 노드 및 다른 AWS 리소스를 사용자가 정의한 상태로 유지하는 프로세스를 자동화합니다. State Manager를 시작하려면 [Systems Manager 콘솔](https://console.aws.amazon.com//systems-manager/state-manager)을 엽니다. 탐색 창에서 **State Manager**를 선택합니다.

**참고**  
State Manager 및 Maintenance Windows가 관리형 노드에서 몇 가지 유사한 유형의 업데이트를 수행할 수 있습니다. 어느 유형의 업데이트를 선택할지는 시스템 규정 준수를 자동화해야 하는지 아니면 지정한 기간 동안 우선순위가 높고 시간에 민감한 태스크를 수행해야 하는지 여부에 따라 다릅니다.  
자세한 내용은 [State Manager와 Maintenance Windows 중에서 선택](state-manager-vs-maintenance-windows.md) 섹션을 참조하세요.

## State Manager가 조직에 주는 이점은 무엇인가요?
<a name="state-manager-benefits"></a>

사전 구성된 Systems Manager 문서(SSM 문서)를 사용하면 State Manager에서는 노드를 관리할 때 다음과 같은 이점을 제공합니다.
+ 시작 시 특정 소프트웨어로 노드 부트스트랩
+ 정의된 일정에 따라 SSM Agent를 포함하여 에이전트 다운로드 및 업데이트
+ 네트워크 설정 구성
+ 노드를 Microsoft Active Directory 도메인에 조인합니다.
+ 수명 주기 동안 Linux, macOS 및 Windows Server 관리형 노드에서 스크립트를 실행합니다.

다른 AWS 리소스 간에 구성 드리프트를 관리하기 위해서는 State Manager를 통해 Systems Manager 도구인 Automation을 사용하여 다음과 같은 유형의 작업을 수행할 수 있습니다.
+ Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에 연결하여 Systems Manager 역할을 *관리형 노드*로 만듭니다.
+ 보안 그룹에 원하는 인바운드 및 아웃바운드 규칙을 적용합니다.
+ Amazon DynamoDB 백업을 생성하거나 삭제합니다.
+ Amazon Elastic Block Store(Amazon EBS) 스냅샷을 생성하거나 삭제합니다.
+ Amazon Simple Storage Service(Amazon S3) 버킷에 대한 읽기 및 쓰기 권한을 해제합니다.
+ 관리형 노드 및 Amazon Relational Database Service(Amazon RDS) 인스턴스를 시작, 재시작 또는 중지합니다.
+ Linux, macOS 및 Window AMIs를 패치합니다.

Automation 실행서를 통한 State Manager 사용 방법에 대한 자세한 내용은 [State Manager 연결을 사용하여 자동화 예약](scheduling-automations-state-manager-associations.md) 섹션을 참조하세요.

## State Manager는 누가 사용해야 하나요?
<a name="state-manager-who"></a>

State Manager는 AWS 리소스의 관리 및 거버넌스를 개선하고 구성 드리프트를 줄이려는 모든 AWS 사용자에게 적합합니다.

## State Manager에는 어떤 기능이 있나요?
<a name="state-manager-features"></a>

State Manager의 주요 기능은 다음과 같습니다.
+ 

**State Manager 연결**  
State Manager *연결*은 사용자가 자신의 AWS 리소스에 할당하는 구성입니다. 이러한 구성은 리소스에서 관리하려는 상태를 정의합니다. 예를 들어, 연결은 관리형 노드에서 안티바이러스 소프트웨어가 설치되어 실행 중이어야 하는지 또는 특정 포트가 닫혀 있어야 하는지를 지정할 수 있습니다.

  연결은 구성 및 연결 대상을 적용할 시점의 일정을 지정합니다. 예를 들어, 안티바이러스 소프트웨어에 대한 연결은 AWS 계정의 관리형 노드에서 하루에 한 번 실행할 수 있습니다. 노드에 소프트웨어가 설치되어 있지 않으면 연결은 State Manager에 소프트웨어를 설치하도록 지시할 수 있습니다. 소프트웨어가 설치되어 있으나 서비스가 실행 중이 아닌 경우 연결이 State Manager에 해당 서비스의 시작을 지시할 수 있습니다.
+ 

**유연한 예약 옵션**  
State Manager에서는 연결이 실행될 때 다음과 같은 예약 옵션을 제공합니다.
  + **즉각적인 처리 또는 지연된 처리**

    연결을 생성하면 기본적으로 시스템은 지정된 리소스에서 연결을 즉시 실행합니다. 최초 실행 후 연결은 정의한 일정에 따른 간격으로 실행됩니다.

    콘솔에서 **지정된 다음 Cron 간격에서만 연결 적용(Apply association only at the next specified Cron interval)** 옵션 또는 명령줄에서 `ApplyOnlyAtCronInterval` 파라미터를 사용하여 즉시 연결을 실행하지 말라고 State Manager에 지시할 수 있습니다.
  + **Cron 및 Rate 표현식**

    연결을 생성하는 경우 State Manager이(가) 구성을 적용하는 시기의 일정을 지정합니다. State Manager은(는) 연결이 실행될 때 예약에 대한 가장 표준적인 cron 및 rate 표현식을 지원합니다. State Manager은(는) 또한 요일 및 숫자 기호(\$1)를 포함하는 cron 표현식을 지원하여 매달 *n* 번째 일을 지정하고, 연결 및 (L) 기호를 실행하고, 매월 마지막 *X*일을 지정합니다.
**참고**  
State Manager은(는) 현재 연결에 대한 cron 표현식에서 월 지정을 지원하지 않습니다.

    예를 들어, 화요일을 패치한 지 2일 후 연결을 실행하려는 경우 연결 실행 시기를 추가로 제어하려면 오프셋을 지정할 수 있습니다. *오프셋*을 통해 연결을 실행하도록 예약된 날짜 이후에 대기할 일 수를 정의할 수 있습니다.

    cron 및 rate 표현식 작성에 대한 자세한 내용은 [참조: Systems Manager용 Cron 및 Rate 표현식](reference-cron-and-rate-expressions.md)을(를) 참조하세요.
+ 

**여러 대상 지정 옵션**  
연결은 연결 대상도 지정합니다. State Manager는 태그, AWS Resource Groups, 개별 노드 ID 또는 현재 AWS 리전 및 AWS 계정의 모든 관리형 노드를 사용하여 AWS 리소스를 지원합니다.
+ 

**Amazon S3 지원**  
선택한 Amazon S3 버킷에 연결 실행의 명령 출력을 저장합니다. 자세한 내용은 [Systems Manager에서 연결 작업](state-manager-associations.md) 섹션을 참조하세요.
+ 

**EventBridge 지원**  
이 Systems Manager 도구는 Amazon EventBridge 규칙에서 *이벤트* 유형과 *대상* 유형으로 모두 지원됩니다. 자세한 내용은 [Amazon EventBridge로 Systems Manager 이벤트 모니터링](monitoring-eventbridge-events.md) 및 [참조: Systems Manager용 Amazon EventBridge 이벤트 패턴 및 유형](reference-eventbridge-events.md) 섹션을 참조하세요.

## State Manager를 사용하는 데 비용이 듭니까?
<a name="state-manager-cost"></a>

State Manager는 추가 요금 없이 사용할 수 있습니다.

**Topics**
+ [State Manager가 조직에 주는 이점은 무엇인가요?](#state-manager-benefits)
+ [State Manager는 누가 사용해야 하나요?](#state-manager-who)
+ [State Manager에는 어떤 기능이 있나요?](#state-manager-features)
+ [State Manager를 사용하는 데 비용이 듭니까?](#state-manager-cost)
+ [State Manager 작동 방식 이해](state-manager-about.md)
+ [Systems Manager에서 연결 작업](state-manager-associations.md)
+ [MOF 파일을 실행하는 연결 생성](systems-manager-state-manager-using-mof-file.md)
+ [Ansible 플레이북을 실행하는 연결 생성](systems-manager-state-manager-ansible.md)
+ [Chef 레시피를 실행하는 연결 생성](systems-manager-state-manager-chef.md)
+ [연습: AWS CLI를 사용하여 SSM Agent를 자동으로 업데이트](state-manager-update-ssm-agent-cli.md)
+ [연습: Windows Server용 EC2 인스턴스에서 PV 드라이버 자동 업데이트](state-manager-update-pv-drivers.md)

**추가 정보**  
+ [Amazon EC2 Systems Manager 및 Windows PowerShell DSC를 사용하여 구성 불일치 방지](https://aws.amazon.com/blogs/mt/combating-configuration-drift-using-amazon-ec2-systems-manager-and-windows-powershell-dsc/)
+ [State Manager를 사용하여 Auto Scaling 그룹에서 Amazon EC2 인스턴스 구성](https://aws.amazon.com/blogs/mt/configure-amazon-ec2-instances-in-an-auto-scaling-group-using-state-manager/)

# State Manager 작동 방식 이해
<a name="state-manager-about"></a>

AWS Systems Manager의 도구인 State Manager는 [하이브리드 및 멀티클라우드](operating-systems-and-machine-types.md#supported-machine-types) 인프라에서 관리형 노드를 사용자가 정의하는 상태로 유지하는 프로세스를 자동화하는 안전하고 확장 가능한 서비스입니다.

State Manager의 작동 방식은 다음과 같습니다.

**1. AWS 리소스에 적용하려는 상태를 결정합니다.**  
안티바이러스 또는 멀웨어 애플리케이션 등의 특정 애플리케이션에서 관리형 노드를 구성하도록 하시겠나요? SSM Agent 또는 다른 AWS 패키지(예: `AWSPVDriver`) 업데이트 프로세스를 자동화하고 싶으신가요? 특정 포트가 열려 있거나 닫혀 있도록 해야 하나요? State Manager로 시작하려면 AWS 리소스에 적용하려는 상태를 결정합니다. 적용하려는 상태에 따라 State Manager 연결을 생성하는 데 사용할 SSM 문서가 결정됩니다.  
State Manager *연결*은 사용자가 자신의 AWS 리소스에 할당하는 구성입니다. 이러한 구성은 리소스에서 관리하려는 상태를 정의합니다. 예를 들어, 연결은 관리형 노드에서 안티바이러스 소프트웨어가 설치되어 실행 중이어야 하는지 또는 특정 포트가 닫혀 있어야 하는지를 지정할 수 있습니다.  
연결은 구성 및 연결 대상을 적용할 시점의 일정을 지정합니다. 예를 들어, 안티바이러스 소프트웨어에 대한 연결은 AWS 계정의 관리형 노드에서 하루에 한 번 실행할 수 있습니다. 노드에 소프트웨어가 설치되어 있지 않으면 연결은 State Manager에 소프트웨어를 설치하도록 지시할 수 있습니다. 소프트웨어가 설치되어 있으나 서비스가 실행 중이 아닌 경우 연결이 State Manager에 해당 서비스의 시작을 지시할 수 있습니다.

**2. 사전 구성된 SSM 문서가 AWS 리소스에서 원하는 상태를 생성하는 데 도움이 되는지 확인합니다.**  
Systems Manager에는 연결을 생성하는 데 사용할 수 있는 수십 개의 사전 구성된 SSM 문서가 있습니다. 사전 구성된 문서는 애플리케이션 설치, Amazon CloudWatch 구성, AWS Systems Manager 자동화, PowerShell 및 셸 스크립트 실행, 관리형 노드를 Active Directory의 디렉터리 서비스 도메인에 조인 등의 일반적인 태스크를 수행할 준비가 되어 있습니다.  
[Systems Manager 콘솔](https://console.aws.amazon.com/systems-manager/documents)에서 모든 SSM 문서를 볼 수 있습니다. 문서의 이름을 선택하여 각 문서에 대해 자세히 알아봅니다. [https://console.aws.amazon.com/systems-manager/documents/AWS-ConfigureAWSPackage/description](https://console.aws.amazon.com/systems-manager/documents/AWS-ConfigureAWSPackage/description)와 [https://console.aws.amazon.com/systems-manager/documents/AWS-InstallApplication/description](https://console.aws.amazon.com/systems-manager/documents/AWS-InstallApplication/description)의 두 가지 예가 있습니다.

**3. 연결을 생성합니다.**  
Systems Manager 콘솔, AWS Command Line Interface(AWS CLI), AWS Tools for Windows PowerShell(Tools for Windows PowerShell) 또는 Systems Manager API를 사용하여 연결을 생성할 수 있습니다. 연결을 생성할 때 다음 정보를 지정할 수 있습니다.  
+ 연결의 이름입니다.
+ SSM 문서의 파라미터(예: 설치할 애플리케이션 경로 또는 노드에서 실행할 스크립트)입니다.
+ 연결 대상. 태그를 지정하거나, 개별 인스턴스 ID를 선택하거나, AWS Resource Groups에서 그룹을 선택하여 관리형 노드를 대상으로 지정할 수 있습니다. 현재 AWS 리전 및 AWS 계정의 *모든* 관리형 노드를 대상으로 지정할 수도 있습니다. 대상에 1,000개 이상의 노드가 포함된 경우 시스템은 시간당 스로틀링 메커니즘을 사용합니다. 즉, 집계 프로세스는 노드의 실행 상태가 변경될 때만 시간당 실행되므로 상태 집계 수가 부정확할 수 있습니다.
+ 연결에서 사용자를 대신하여 작업을 수행하는 데 사용하는 역할입니다. State Manager는 이 역할을 수임하고 구성을 노드로 디스패치할 때 필요한 API를 직접 호출합니다. 사용자 지정으로 제공된 역할의 설정에 대한 자세한 내용은 [`AssociationDispatchAssumeRole` 역할 설정](#setup-assume-role) 섹션을 참조하세요. 역할이 제공되지 않으면 [Systems Manager의 서비스 연결 역할](https://docs.aws.amazon.com/systems-manager/latest/userguide/using-service-linked-roles.html)이 사용됩니다.
**참고**  
사용자를 대신하여 작업을 수행할 때 State Manager가 갖는 권한을 완전히 제어할 수 있도록 사용자 지정 IAM 역할을 정의하는 것이 좋습니다.  
State Manager의 서비스 연결 역할 지원을 단계적으로 중단하고 있습니다. 서비스 연결 역할에 의존하는 연결은 계속 제대로 작동하려면 향후 업데이트가 필요할 수 있습니다.  
사용자 지정으로 제공된 역할의 사용 관리에 대한 자세한 내용은 [`ssm:AssociationDispatchAssumeRole`을 사용하여 AssociationDispatchAssumeRole 사용 관리](#context-key-assume-role) 섹션을 참조하세요.
+ 상태를 적용할 시간 또는 빈도에 대한 일정. cron 또는 rate 표현식을 지정할 수 있습니다. cron 및 rate 표현식을 사용하여 일정 생성에 대한 자세한 내용은 [연결에 대한 Cron 및 Rate 표현식](reference-cron-and-rate-expressions.md#reference-cron-and-rate-expressions-association) 섹션을 참조하세요.
**참고**  
State Manager은(는) 현재 연결에 대한 cron 표현식에서 월 지정을 지원하지 않습니다.
연결 생성을 위한 명령을 실행하면 Systems Manager는 지정한 정보(일정, 대상, SSM 문서 및 파라미터)를 대상으로 지정된 리소스로 바인딩합니다. 시스템에서 모든 대상에 연결하고 연결에 지정된 상태를 *즉시* 적용하려고 하기 때문에 연결 상태는 처음에 "보류 중"으로 표시됩니다.  
이전 연결이 실행 중인 상태에서 실행하도록 예정된 새 연결을 생성하면 이전 연결 시간이 초과되고 새 연결이 실행됩니다.
Systems Manager가 리소스에서 연결을 생성하기 위해 요청 상태를 보고합니다. [DescribeInstanceAssociationsStatus](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_DescribeInstanceAssociationsStatus.html) API 작업을 사용하여 콘솔 또는 (관리형 노드)의 상태 세부 정보를 볼 수 있습니다. 연결을 생성할 때 명령의 출력을 Amazon Simple Storage Service(Amazon S3)에 쓰기로 선택한 경우 지정한 Amazon S3 버킷에서 출력을 볼 수도 있습니다.  
자세한 내용은 [Systems Manager에서 연결 작업](state-manager-associations.md) 섹션을 참조하세요.  
연결 실행 중에 SSM 문서에 의해 시작된 API 작업은 AWS CloudTrail에 로깅되지 않습니다.

**4. 모니터링 및 업데이트합니다.**  
연결을 생성하면 State Manager에서 연결에 정의된 일정에 따라 구성을 다시 적용합니다. 연결 상태는 콘솔의 [State Manager 페이지](https://console.aws.amazon.com/systems-manager/state-manager)에서 보거나 연결 생성 시 Systems Manager가 생성한 연결 ID를 직접 호출하여 볼 수 있습니다. 자세한 내용은 [연결 내역 보기](state-manager-associations-history.md) 섹션을 참조하세요. 연결 문서를 업데이트하고 필요에 따라 다시 적용할 수 있습니다. 여러 버전의 연결을 생성할 수도 있습니다. 자세한 내용은 [새로운 연결 버전 편집 및 생성](state-manager-associations-edit.md) 섹션을 참조하세요.

## 리소스에 연결이 적용되는 시기 이해
<a name="state-manager-about-scheduling"></a>

연결을 생성할 때 구성, 대상 리소스 목록 및 구성 적용 일정을 정의하는 SSM 문서를 지정합니다. 기본적으로 State Manager에서는 연결을 생성할 때와 이후에는 일정에 따라 연결을 실행합니다. State Manager는 또한 다음과 같은 상황에서 연결을 실행하려고 시도합니다.
+ **연결 편집** - State Manager는 사용자가 `DOCUMENT_VERSION`, `PARAMETERS`, `SCHEDULE_EXPRESSION`, `OUTPUT_S3_LOCATION` 연결 필드를 편집하고 변경 사항을 저장한 후 연결을 실행합니다.
+ **문서 편집** - State Manager는 사용자가 연결 구성 상태를 정의하는 SSM 문서를 편집하고 변경 사항을 저장한 이후에 연결을 실행합니다. 특히 연결은 문서를 다음과 같이 편집한 후에 실행됩니다.
  + 사용자가 새 `$DEFAULT` 문서 버전을 지정하고 `$DEFAULT` 버전을 사용하여 연결을 생성했습니다.
  + 사용자가 문서를 업데이트하고 `$LATEST` 버전을 사용하여 연결을 생성했습니다.
  + 사용자는 연결을 생성할 때 지정된 문서를 삭제합니다.
+ **수동 시작** - State Manager가 사용자가 Systems Manager 콘솔에서 또는 프로그래밍 방식으로 시작한 경우에 연결을 실행합니다.
+ **대상 변경** - State Manager는 대상 노드에서 다음 활동이 발생한 이후에 연결을 실행합니다.
  + 관리형 노드가 처음 온라인 상태로 전환됩니다.
  + 예약된 연결 실행을 지나친 후 관리형 노드가 온라인 상태로 전환됩니다.
  + 30일 넘게 중지된 경우 이후 관리형 노드가 온라인 상태로 전환됩니다.

     
**참고**  
State Manager는 AWS 계정 전반의 연결에 사용되는 문서나 패키지를 모니터링하지 않습니다. 한 계정에서 문서 또는 패키지를 업데이트하는 경우 업데이트로 인해 두 번째 계정에서 연결이 실행되지 않습니다. 두 번째 계정에서 연결을 수동으로 실행해야 합니다.

**대상 변경 시 연결 실행 방지**  
경우에 따라 관리형 노드로 구성된 대상이 변경될 때가 아니라, 지정된 일정에 따라 연결을 실행해야 할 수 있습니다.
**참고**  
Automation 런북을 실행하면 비용이 발생합니다. Automation 런북과의 연결이 계정의 모든 인스턴스를 대상으로 하고 주기적으로 많은 수의 인스턴스를 시작하는 경우, 런북은 시작 시에 각 인스턴스에서 실행됩니다. 이로 인해 자동화 요금이 증가할 수 있습니다.

  해당 연결의 대상이 변경될 때 연결이 실행되지 않도록 하려면, **지정된 다음 cron 간격에서만 연결 적용** 확인란을 선택합니다. 이 확인란은 **연결 생성** 및 **연결 편집** 페이지의 **일정 지정** 영역에 있습니다.

  이 옵션은 Automation 런북 또는 SSM 문서를 통합하는 연결에 적용됩니다.

## Automation 런북을 사용한 대상 업데이트 정보
<a name="runbook-target-updates"></a>

새 대상 노드가 감지될 때 Automation 런북으로 생성된 연결을 적용하려면 다음 조건이 True여야 합니다.
+ 연결은 [Quick Setup](systems-manager-quick-setup.md) 구성에 의해 생성되어야 합니다. Quick Setup은 AWS Systems Manager의 도구입니다. 다른 프로세스에서 생성한 연결은 현재 지원되지 않습니다.
+ Automation 런북은 명시적으로 리소스 유형 `AWS::EC2::Instance` 또는 `AWS::SSM::ManagedInstance`를 대상으로 지정해야 합니다.
+ 연결은 파라미터와 대상을 모두 지정해야 합니다.

  콘솔에서 속도 제어 실행을 선택하면 **파라미터** 및 **대상** 필드가 표시됩니다.  
![\[파라미터 및 대상 옵션은 속도 제어 실행을 위해 콘솔에 표시됩니다.\]](http://docs.aws.amazon.com/ko_kr/systems-manager/latest/userguide/images/sm_Rate_control_execution_options.png)

  [https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_CreateAssociation.html](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_CreateAssociation.html), [https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_CreateAssociationBatch.html](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_CreateAssociationBatch.html) 또는 [https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_UpdateAssociation.html](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_UpdateAssociation.html) API 작업을 사용하는 경우 `AutomationTargetParameterName` 및 `Targets` 입력을 사용하여 이러한 값을 지정할 수 있습니다. 이러한 각 API 작업에서 `ApplyOnlyAtCronInterval` 파라미터를 `true`로 설정하여 대상이 변경될 때마다 연결이 실행되지 않도록 할 수도 있습니다.

  Automation 실행에 따른 예상치 못한 높은 비용을 방지하는 방법을 비롯하여, 콘솔을 사용하여 연결 실행 조건을 제어하는 방법에 대한 자세한 내용은 [리소스에 연결이 적용되는 시기 이해](#state-manager-about-scheduling) 섹션을 참조하세요.

## `AssociationDispatchAssumeRole` 역할 설정
<a name="setup-assume-role"></a>

State Manager가 사용자를 대신하여 작업을 수행할 때 수임하는 사용자 지정 디스패치 수임 역할을 설정하려면, 해당 역할은 `ssm.amazonaws.com`을 신뢰하고 연결 사용 사례에 따라 `ssm:SendCommand` 또는 `ssm:StartAutomationExecution`을 호출하는 데 필요한 권한을 보유해야 합니다.

샘플 신뢰 정책: 

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "",
            "Effect": "Allow",
            "Principal": {
                "Service": [
                    "ssm.amazonaws.com"
                ]
            },
            "Action": "sts:AssumeRole"
        }
    ]
}
```

## `ssm:AssociationDispatchAssumeRole`을 사용하여 AssociationDispatchAssumeRole 사용 관리
<a name="context-key-assume-role"></a>

State Manager가 사용자를 대신하여 작업을 수행할 때 수임하는 사용자 지정 디스패치 수임 역할의 사용을 관리하려면 `ssm:AssociationDispatchAssumeRole` 조건 키를 사용하세요. 이 조건은 사용자 지정 디스패치 수임 역할을 지정하지 않고 연결을 생성하거나 업데이트할 수 있는지 여부를 제어합니다.

다음 샘플 정책에서 `"Allow"` 문은 `AssociationDispatchAssumeRole` 파라미터가 지정된 경우에만 연결 생성 및 업데이트 API에 대한 권한을 부여합니다. API 요청에 이 파라미터가 없으면 해당 정책은 연결을 생성하거나 업데이트할 수 있는 권한을 부여하지 않습니다.

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssm:CreateAssociation",
                "ssm:UpdateAssociation",
                "ssm:CreateAssociationBatch"
            ],
            "Resource": "*",
            "Condition": {
                "StringLike": {
                    "ssm:AssociationDispatchAssumeRole": "*"
                }
            }
        }
    ]
}
```

# Systems Manager에서 연결 작업
<a name="state-manager-associations"></a>

이 섹션에서는 AWS Systems Manager 콘솔, AWS Command Line Interface(AWS CLI) 및 AWS Tools for PowerShell을 사용하여 State Manager 연결을 생성하고 관리하는 방법을 설명합니다.

**Topics**
+ [State Manager 연결에서의 대상 및 속도 제어 이해](systems-manager-state-manager-targets-and-rate-controls.md)
+ [연결 생성](state-manager-associations-creating.md)
+ [새로운 연결 버전 편집 및 생성](state-manager-associations-edit.md)
+ [연결 삭제](systems-manager-state-manager-delete-association.md)
+ [연결을 사용하여 Auto Scaling 그룹 실행](systems-manager-state-manager-asg.md)
+ [연결 내역 보기](state-manager-associations-history.md)
+ [IAM을 사용한 연결 작업](systems-manager-state-manager-iam.md)

# State Manager 연결에서의 대상 및 속도 제어 이해
<a name="systems-manager-state-manager-targets-and-rate-controls"></a>

이 주제에서는 예약된 시간에 연결을 실행하는 노드 수를 제어하면서 수십 또는 수백 개의 노드에 대한 연결을 배포하는 데 도움이 되는 State Manager에 대해 설명합니다. State Manager는 AWS Systems Manager의 도구입니다.

## 대상 사용
<a name="systems-manager-state-manager-targets-and-rate-controls-about-targets"></a>

State Manager 연결을 생성할 때 여기에 표시된 대로 Systems Manager 콘솔의 **대상(Targets)** 섹션에서 연결로 구성할 노드를 선택합니다.

![\[State Manager 연결 생성 시 노드를 대상으로 지정하는 다양한 옵션\]](http://docs.aws.amazon.com/ko_kr/systems-manager/latest/userguide/images/state-manager-targets.png)


AWS Command Line Interface(AWS CLI)와 같은 명령줄 도구를 사용하여 연결을 생성하는 경우 `targets` 파라미터를 지정합니다. 노드를 대상으로 지정하면 개별 노드 ID를 지정하거나 선택할 필요 없이 수십, 수백 또는 수천 개의 노드를 연결로 구성할 수 있습니다.

각 관리형 노드는 최대 20개 연결의 대상이 될 수 있습니다.

연결 생성 시 State Manager에는 다음과 같은 대상 옵션이 포함되어 있습니다.

**태그 지정**  
이 옵션을 사용하여 태그 키와 노드에 지정된 태그 값(옵션)을 지정합니다. 요청을 실행하면 시스템은 지정된 태그 키 및 값과 일치하는 모든 노드를 찾아 해당 인스턴스에서 연결을 생성하려고 시도합니다. 여러 태그 값을 지정한 경우 연결은 해당 태그 값 중 적어도 하나 이상이 있는 모든 노드를 대상으로 합니다. 시스템은 처음 연결을 생성할 때 연결을 실행합니다. 이러한 최초 실행 후, 시스템은 사용자가 지정한 일정에 따라 연결을 실행합니다.

새 노드를 생성하고 지정된 태그 키 및 값을 해당 노드에 할당하면, 시스템은 자동으로 연결을 적용하고 즉시 실행하며 그 다음에는 일정에 따라 실행합니다. 이는 연결에서 Command 또는 Policy 문서를 사용하는 경우 적용되며 연결에서 Automation 실행서를 사용하는 경우에는 적용되지 않습니다. 노드에서 지정된 태그를 삭제하면 시스템은 더 이상 해당 노드에서 연결을 실행하지 않습니다.

**참고**  
State Manager(으)로 Automation 실행서를 사용하며 태깅 제한으로 인해 특정 목표를 달성할 수 없는 경우 Amazon EventBridge로 Automation 실행서를 사용하는 것을 고려하세요. 자세한 내용은 [EventBridge 이벤트를 기반으로 자동화 실행](running-automations-event-bridge.md) 섹션을 참조하세요. State Manager(으)로 실행서를 사용하는 방법에 대한 자세한 내용은 [State Manager 연결을 사용하여 자동화 예약](scheduling-automations-state-manager-associations.md)을(를) 참조하세요.

명령 또는 정책 문서를 사용하는 연결을 생성할 때 태그를 사용하는 것이 가장 좋습니다. 오토 스케일링을 실행하는 연결을 생성할 때 태그를 사용하는 것도 좋습니다. 자세한 내용은 [연결을 사용하여 Auto Scaling 그룹 실행](systems-manager-state-manager-asg.md) 섹션을 참조하세요.

**참고**  
다음 정보를 참고하세요.  
AWS Management Console에서 태그를 사용하여 노드를 대상으로 하는 연결을 생성할 때 자동 연결에는 1개의 태그 키만 지정하고 명령 연결에는 5개의 태그 키만 지정할 수 있습니다. 연결에 지정된 *모든* 태그 키가 현재 노드에 할당되어 있어야 합니다. 그렇지 않으면 State Manager에서 노드를 연결 대상으로 지정하지 못합니다.
콘솔을 사용*하고* 자동 연결에 2개 이상의 태그 키를 사용하고 명령 연결에 5개의 태그 키를 사용하여 노드를 대상으로 지정하려면 AWS Resource Groups 그룹에 태그 키를 할당하고 노드를 추가합니다. 그러면 State Manager 연결을 생성할 때 **대상** 목록에서 **리소스 그룹** 옵션을 선택할 수 있습니다.
AWS CLI를 사용하여 최대 5개의 태그 키를 지정할 수 있습니다. AWS CLI를 사용하는 경우 `create-association` 명령에 지정된 *모든* 태그 키가 현재 노드에 할당되어 있어야 합니다. 그렇지 않으면 State Manager에서 노드를 연결 대상으로 지정하지 못합니다.

**수동으로 노드 선택**  
이 옵션을 사용하면 연결을 생성하려는 노드를 수동으로 선택할 수 있습니다. **인스턴스(Instances)** 창에는 현재 AWS 계정 및 AWS 리전의 모든 Systems Manager 관리형 노드가 표시됩니다. 노드를 원하는 수만큼 수동으로 선택할 수 있습니다. 시스템은 처음 연결을 생성할 때 연결을 실행합니다. 이러한 최초 실행 후, 시스템은 사용자가 지정한 일정에 따라 연결을 실행합니다.

**참고**  
예상한 관리형 노드가 목록에 없으면 [관리형 노드 가용성 문제 해결](fleet-manager-troubleshooting-managed-nodes.md)에서 문제 해결 팁을 참조하세요.

**리소스 그룹 선택**  
이 옵션을 사용하면 AWS Resource Groups 태그 기반 또는 AWS CloudFormation 스택 기반 쿼리에서 반환된 모든 노드에서 연결을 생성할 수 있습니다.

다음은 연결을 위해 리소스 그룹을 대상으로 지정하는 방법에 대한 세부 정보입니다.
+ 새 노드를 그룹에 추가하면 시스템은 리소스 그룹을 대상으로 하는 연결에 해당 노드를 자동으로 매핑합니다. 변경 사항이 발견되면 시스템은 노드에 연결을 적용합니다. 이러한 최초 실행 후, 시스템은 사용자가 지정한 일정에 따라 연결을 실행합니다.
+ 리소스 그룹을 대상으로 지정하는 연결을 생성하고 해당 그룹에 대해 `AWS::SSM::ManagedInstance` 리소스 유형을 지정된 경우 [하이브리드 및 멀티클라우드](operating-systems-and-machine-types.md#supported-machine-types) 환경에서 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스와 비 EC2 노드에서 모두 연결이 실행되도록 설계되어 있습니다.

  반대의 경우도 마찬가지입니다. 리소스 그룹을 대상으로 지정하는 연결을 생성하고 해당 그룹에 대해 `AWS::EC2::Instance` 리소스 유형이 지정된 경우 [하이브리드 및 멀티클라우드](operating-systems-and-machine-types.md#supported-machine-types) 환경의 비 EC2 노드와 (Amazon EC2) 인스턴스에서 모두 연결이 실행되도록 설계되어 있습니다.
+ 리소스 그룹을 대상으로 하는 연결을 생성하는 경우 리소스 그룹에 5개 이상의 태그 키가 할당되어 있거나 하나의 태그 키에 대해 5개 이상의 값이 지정되지 않아야 합니다. 이러한 조건 중 하나가 리소스 그룹에 할당된 태그 및 키에 적용되는 경우 연결이 실행되지 않고 `InvalidTarget` 오류를 반환합니다.
+ 태그를 사용하여 리소스 그룹을 대상으로 지정하는 연결을 생성하는 경우 태그 값에 대해 **(빈 값)** 옵션을 선택할 수 없습니다.
+ 리소스 그룹을 삭제하면 해당 그룹의 모든 인스턴스는 더 이상 연결을 실행하지 않습니다. 그룹을 대상으로 하는 연결을 삭제하는 것이 좋습니다.
+ 연결에 대해 단일 리소스 그룹만 대상으로 지정할 수 있습니다. 여러 그룹 또는 중첩된 그룹은 지원되지 않습니다.
+ 연결을 생성한 후 State Manager는 리소스 그룹의 리소스에 대한 정보를 이용해 연결을 주기적으로 업데이트합니다. 새 리소스를 리소스 그룹에 추가하는 경우, 시스템에서 새 리소스에 연결을 적용할 때의 일정은 몇 가지 요소에 따라 다릅니다. Systems Manager 콘솔의 State Manager 페이지에서 연결 상태를 확인할 수 있습니다.

**주의**  
Amazon EC2 인스턴스의 리소스 그룹을 대상으로 하는 연결을 생성할 수 있는 권한을 가진 AWS Identity and Access Management(IAM) 사용자, 그룹 또는 역할은 해당 그룹의 모든 인스턴스에 대한 루트 수준 제어 권한을 자동으로 갖습니다. 신뢰할 수 있는 관리자에게만 연결 생성이 허용되어야 합니다.

Resource Groups에 대한 자세한 내용은 *AWS Resource Groups User Guide*의 [What Is AWS Resource Groups?](https://docs.aws.amazon.com/ARG/latest/userguide/)를 참조하세요.

**모든 노드 선택**  
이 옵션을 사용하면 현재 AWS 계정 및 AWS 리전의 모든 노드를 대상으로 지정할 수 있습니다. 요청을 실행하면 시스템은 현재 AWS 계정 및 AWS 리전의 모든 노드를 찾아 해당 노드에서 연결을 생성하려고 시도합니다. 시스템은 처음 연결을 생성할 때 연결을 실행합니다. 이러한 최초 실행 후, 시스템은 사용자가 지정한 일정에 따라 연결을 실행합니다. 새 노드를 생성하면, 시스템은 자동으로 연결을 적용하고 즉시 실행하며 그 다음에는 일정에 따라 실행합니다.

## 비율 제어 사용
<a name="systems-manager-state-manager-targets-and-rate-controls-about-controls"></a>

동시성 값과 오류 임계값을 지정하여 노드에서 연결 실행을 제어할 수 있습니다. 동시성 값은 연결을 동시에 실행할 수 있는 노드의 수를 지정합니다. 오류 임계값은 Systems Manager가 연결 실행을 중지하기 위해 해당 연결로 구성된 각 노드에 명령을 보내기 전에 실패할 수 있는 연결 실행 수를 지정합니다. 이 명령은 다음 예정된 실행까지 연결이 실행되는 것을 중지합니다. 동시성 및 오류 임계값 기능을 통칭하여 *속도 제어*라고 합니다.

![\[State Manager 연결 생성 시 다양한 속도 제어 옵션\]](http://docs.aws.amazon.com/ko_kr/systems-manager/latest/userguide/images/state-manager-rate-controls.png)


**동시성**  
동시성은 한 번에 특정한 수의 노드만 연결을 처리하도록 지정하여 노드에 대한 영향을 제한할 수 있습니다. 노드의 절대 개수(예: 20)를 지정하거나 대상 집합의 노드 비율(예: 10%)을 지정할 수 있습니다.

State Manager 동시성에는 다음과 같은 제한 사항이 있습니다.
+ 대상을 사용하여 연결을 생성하도록 선택했으나 동시성 값을 지정하지 않은 경우 State Manager는 최대 동시성으로 노드 50개를 자동으로 적용합니다.
+ 동시성을 사용하는 연결이 실행 중인데 대상 기준을 충족하는 새 노드가 온라인 상태가 되면 동시성 값을 초과하지 않는 경우 새 노드가 연결을 실행합니다. 동시성 값이 초과되면 현재 연결 실행 간격 중에는 새 노드가 무시됩니다. 동시성 요구 사항을 준수할 때 노드는 예약된 다음 간격 중 연결을 실행합니다.
+ 동시성을 사용하는 연결을 업데이트하고 업데이트 시 하나 이상의 노드가 연결을 처리 중이면 연결을 실행 중인 모든 노드를 완료할 수 있습니다. 시작되지 않은 연결은 중지됩니다. 연결이 업데이트되었기 때문에 연결 실행이 완료되면 모든 대상 노드가 즉시 연결을 실행합니다. 연결이 다시 실행되면 동시성 값이 적용됩니다.

**오류 임계값**  
오류 임계값은 Systems Manager가 해당 연결로 구성된 각 노드에 명령을 보내기 전에 실패가 허용되는 연결 실행 수를 지정합니다. 이 명령은 다음 예정된 실행까지 연결이 실행되는 것을 중지합니다. 오류의 절대 개수(예: 10개)를 지정하거나 대상 집합의 비율(예: 10%)을 지정할 수 있습니다.

예를 들어, 오류 절대 개수를 3으로 지정한 경우 4번째 오류가 반환되면 State Manager에서는 중지 명령을 전송합니다. 0을 지정하면 첫 번째 오류 결과가 반환된 후 State Manager는 중지 명령을 전송합니다.

예를 들어, 오류 임계값을 50개 연결의 10%로 지정한 경우 6번째 오류가 반환되면 State Manager에서는 중지 명령을 전송합니다. 오류 임계값에 도달했을 때 자동화를 이미 실행 중인 연결은 완료될 수도 있지만, 이러한 연결 중 일부가 실패할 수 있습니다. 오류 수가 오류 임계값에 지정된 수보다 많지 않도록 하려면 연결이 한 번에 하나씩 진행되도록 **동시성** 값을 1로 설정합니다.

State Manager 오류 임계값에는 다음과 같은 제한 및 제약이 있습니다.
+ 오류 임계값은 현재 간격에 대해 적용됩니다.
+ 단계 수준 세부 정보를 비롯해 각 오류에 대한 정보는 연결 내역에 기록됩니다.
+ 대상을 사용하여 연결을 생성하도록 선택했으나 오류 임계값을 지정하지 않은 경우 State Manager에서는 임계값으로 100% 실패를 자동으로 적용합니다.

# 연결 생성
<a name="state-manager-associations-creating"></a>

AWS Systems Manager의 도구인 State Manager는 AWS 리소스를 구성 드리프트를 정의하고 줄일 수 있는 상태로 유지하는 데 도움이 됩니다. 이렇게 하기 위해 State Manager는 연결을 사용합니다. *연결*은 사용자가 자신의 AWS 리소스에 할당하는 구성입니다. 이러한 구성은 리소스에서 관리하려는 상태를 정의합니다. 예를 들어, 연결은 관리형 노드에서 안티바이러스 소프트웨어가 설치되어 실행 중이어야 하는지 또는 특정 포트가 닫혀 있어야 하는지를 지정할 수 있습니다.

연결은 구성 및 연결 대상을 적용할 시점의 일정을 지정합니다. 예를 들어, 안티바이러스 소프트웨어에 대한 연결은 AWS 계정의 관리형 노드에서 하루에 한 번 실행할 수 있습니다. 노드에 소프트웨어가 설치되어 있지 않으면 연결은 State Manager에 소프트웨어를 설치하도록 지시할 수 있습니다. 소프트웨어가 설치되어 있으나 서비스가 실행 중이 아닌 경우 연결이 State Manager에 해당 서비스의 시작을 지시할 수 있습니다.

**주의**  
연결을 생성하는 경우 연결의 대상으로 관리형 노드의 AWS 리소스 그룹을 선택할 수 있습니다. AWS Identity and Access Management(IAM) 사용자, 그룹 또는 역할이 관리형 노드의 리소스 그룹을 대상으로 하는 연결을 생성할 수 있는 권한을 가진 경우, 해당 사용자, 그룹 또는 역할에는 그룹의 모든 노드에 대한 루트 수준 제어 권한이 자동으로 생깁니다. 신뢰할 수 있는 관리자에게만 연결 생성이 허용됩니다.

**연결 대상 및 속도 제어**  
연결은 연결을 수신해야 하는 관리형 노드 또는 대상을 지정할 수 있습니다. State Manager에는 관리형 노드를 대상으로 지정하고 해당 대상으로 연결을 배포하는 방법을 제어하는 데 도움이 되는 몇 가지 기능이 포함되어 있습니다. 대상 및 속도 제어에 대한 자세한 내용은 [State Manager 연결에서의 대상 및 속도 제어 이해](systems-manager-state-manager-targets-and-rate-controls.md) 섹션을 참조하세요.

**연결 태그 지정**  
AWS CLI 또는 AWS Tools for PowerShell 등의 명령줄 도구를 사용하여 연결을 생성할 때 연결에 태그를 할당할 수 있습니다. Systems Manager 콘솔을 사용하여 연결에 태그를 추가하는 것은 지원되지 않습니다.

**연결 실행**  
기본적으로 State Manager는 연결을 생성한 직후 정의한 일정에 따라 실행합니다.

또한 시스템은 다음 규칙에 따라 연결을 실행합니다.
+ 간격 중에 State Manager는 지정되거나 대상으로 지정된 모든 노드에서 연결을 실행하려고 시도합니다.
+ (예를 들어, 동시성 값이 한 번에 연결을 처리할 수 있는 노드 수를 제한했기 때문에) 간격 동안 연결이 실행되지 않은 경우 State Manager에서는 다음 간격 중 해당 연결을 실행하려고 합니다.
+ State Manager는 연결의 구성, 대상 노드, 문서 또는 파라미터 변경 후 연결을 실행합니다. 자세한 내용은 [리소스에 연결이 적용되는 시기 이해](state-manager-about.md#state-manager-about-scheduling) 섹션을 참조하세요.
+ State Manager는 건너 뛴 모든 간격을 기록합니다. 이러한 기록은 **실행 내역** 탭에서 확인할 수 있습니다.

## 연결 예약
<a name="state-manager-about-creating-associations"></a>

*10시간마다*와 같은 기본 간격으로 실행되도록 연결을 예약하거나 사용자 지정 cron 및 rate 표현식을 사용하여 고급 일정을 생성할 수 있습니다. 연결을 처음 생성할 때 연결이 실행되지 않도록 할 수도 있습니다.

**cron 및 rate 표현식을 사용하여 연결 실행 예약**  
표준 cron 또는 rate 표현식 외에도 State Manager는 또한 요일 및 숫자 기호(\$1)를 포함하는 cron 표현식을 지원하여 연결을 실행할 매월 *n*번째 일을 지정할 수 있습니다. 매월 셋째 주 화요일 UTC 23:30에 cron 일정을 실행하는 예는 다음과 같습니다.

`cron(30 23 ? * TUE#3 *)`

매월 두 번째 목요일 UTC 자정에 실행하는 예는 다음과 같습니다.

`cron(0 0 ? * THU#2 *)`

또한 State Manager는 (L) 기호를 지원하여 매월 마지막 *X* 일을 표시합니다. 매월 마지막 화요일 UTC 자정에 cron 일정을 실행하는 예는 다음과 같습니다.

`cron(0 0 ? * 3L *)`

예를 들어, 화요일을 패치한 지 2일 후 연결을 실행하려는 경우 연결 실행 시기를 추가로 제어하려면 오프셋을 지정할 수 있습니다. *오프셋*을 통해 연결을 실행하도록 예약된 날짜 이후에 대기할 일 수를 정의할 수 있습니다. 예를 들어, `cron(0 0 ? * THU#2 *)`의 cron 일정을 지정한 경우 **일정 오프셋** 필드에 숫자 3을 지정하여 매월 두 번째 목요일 이후 매주 일요일에 연결을 실행할 수 있습니다.

**참고**  
오프셋을 사용하려면 콘솔에서 **지정된 다음 Cron 간격에서만 연결 적용**을 선택하거나 명령줄에서 `ApplyOnlyAtCronInterval` 파라미터를 지정해야 합니다. 이러한 옵션 중 하나가 활성화되면 연결을 생성한 직후 State Manager가 연결을 실행하지 않습니다.

Cron 및 Rate 표현식에 대한 자세한 내용은 [참조: Systems Manager용 Cron 및 Rate 표현식](reference-cron-and-rate-expressions.md) 섹션을 참조하세요.

## 연결 생성(콘솔)
<a name="state-manager-associations-console"></a>

다음 절차에서는 Systems Manager 콘솔을 사용하여 State Manager 연결을 생성하는 방법을 설명합니다.

**참고**  
다음 정보를 참고하세요.  
이 절차에서는 `Command` 또는 `Policy` 문서를 사용하는 연결을 생성하여 관리형 노드를 대상으로 지정하는 방법에 대해 설명합니다. Automation 런북을 사용하는 연결을 생성하여 노드 또는 다른 유형의 AWS 리소스를 대상 지정하는 방법에 대한 자세한 내용은 [State Manager 연결을 사용하여 자동화 예약](scheduling-automations-state-manager-associations.md) 섹션을 참조하세요.
연결을 생성할 때 AWS Management Console을 사용하여 최대 5개의 태그 키를 지정할 수 있습니다. 연결에 지정된 *모든* 태그 키가 현재 노드에 할당되어 있어야 합니다. 그렇지 않은 경우 State Manager에서 노드를 연결 대상으로 지정하지 못합니다.

**State Manager 연결 생성**

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

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

1. **연결 생성**을 선택합니다.

1. **이름(Name)** 필드에 이름을 지정합니다.

1. **문서** 목록에서 문서 이름 옆에 있는 옵션을 선택합니다. 문서 유형을 적어둡니다. 이 절차는 `Command` 및 `Policy` 문서에 적용됩니다. Automation 런북을 사용하는 연결 생성에 대한 자세한 내용은 [State Manager 연결을 사용하여 자동화 예약](scheduling-automations-state-manager-associations.md) 섹션을 참조하세요.
**중요**  
State Manager는 해당 문서가 다른 계정에서 공유되는 경우 새 버전의 문서를 사용하는 연결 실행을 지원하지 않습니다. Systems Manager 콘솔이 새로운 버전이 처리되었음을 보여주더라도 상태 관리자는 언제나 다른 계정에서 공유된 문서의 `default` 버전을 실행합니다. 다른 계정에서 공유한 문서의 새 버전을 사용하여 연결을 실행하려면 문서 버전을 `default`로 설정해야 합니다.

1. **파라미터**에서 필요한 입력 파라미터를 지정합니다.

1. (선택 사항) **연결 디스패치 역할 수임**의 드롭다운에서 역할을 선택합니다. State Manager는 사용자를 대신하여 이 역할을 사용해 작업을 수행합니다. 사용자 지정으로 제공된 역할의 설정에 대한 자세한 내용은 [`AssociationDispatchAssumeRole` 역할 설정](state-manager-about.md#setup-assume-role) 섹션을 참조하세요.
**참고**  
사용자를 대신하여 작업을 수행할 때 State Manager가 갖는 권한을 완전히 제어할 수 있도록 사용자 지정 IAM 역할을 정의하는 것이 좋습니다.  
State Manager의 서비스 연결 역할 지원을 단계적으로 중단하고 있습니다. 서비스 연결 역할에 의존하는 연결은 계속 제대로 작동하려면 향후 업데이트가 필요할 수 있습니다.  
사용자 지정으로 제공된 역할의 사용 관리에 대한 자세한 내용은 [`ssm:AssociationDispatchAssumeRole`을 사용하여 AssociationDispatchAssumeRole 사용 관리](state-manager-about.md#context-key-assume-role) 섹션을 참조하세요.

1. (선택 사항) 모니터링을 위해 연결에 적용할 CloudWatch 경보를 선택합니다.
**참고**  
이 단계에 대한 다음 정보를 참조하세요.  
알람 목록에는 최대 100개의 알람이 표시됩니다. 목록에 해당 경보가 표시되지 않으면 AWS Command Line Interface를 사용하여 연결을 생성합니다. 자세한 내용은 [연결 생성(명령줄)](#create-state-manager-association-commandline) 섹션을 참조하세요.
CloudWatch 경보를 명령에 연결하려면 연결을 생성하는 IAM 보안 주체에 `iam:createServiceLinkedRole` 작업에 대한 권한이 있어야 합니다. CloudWatch 경보에 대한 자세한 내용은 [Amazon CloudWatch 경보 사용](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html)을 참조하세요.
경보가 활성화되면 보류 중인 명령 호출 또는 자동화가 실행되지 않습니다.

1. **대상**에서 옵션을 선택합니다. 태그 사용에 대한 자세한 내용은 [State Manager 연결에서의 대상 및 속도 제어 이해](systems-manager-state-manager-targets-and-rate-controls.md) 섹션을 참조하세요.
**참고**  
새 대상 노드가 감지될 때 Automation 런북을 사용하여 생성된 연결을 적용하려면 특정 조건을 충족해야 합니다. 자세한 내용은 [Automation 런북을 사용한 대상 업데이트 정보](state-manager-about.md#runbook-target-updates) 섹션을 참조하세요.

1. **일정 지정** 섹션에서 **On Schedule(일정이 있을 때)** 또는 **No schedule(일정이 없을 때)**을 선택합니다. **On Schedule(일정이 있을 때)**을 선택한 경우 제공된 버튼을 사용하여 연결에 대한 cron 또는 rate 일정을 생성합니다.

   연결을 생성한 직후에 연결을 실행하지 않으려면 **지정된 다음 Cron 간격에서만 연결 적용을** 선택합니다.

1. (선택 사항) **일정 오프셋(Schedule offset)** 필드에 1에서 6 사이의 숫자를 지정합니다.

1. [**고급 옵션(Advanced options)**] 섹션에서 [**규정 준수 심각도(Compliance severity)**]를 사용하여 연결의 심각도 수준을 선택하고 [**변경 일정(Change Calendars)**]을 사용하여 연결의 변경 일정을 선택합니다.

   규정 준수 보고는 여기서 지정한 심각도 수준과 함께 연결 상태가 준수인지 아니면 미준수인지를 나타냅니다. 자세한 내용은 [State Manager 연결 규정 준수 정보](compliance-about.md#compliance-about-association) 섹션을 참조하세요.

   변경 일정에 따라 연결 실행 시기가 결정됩니다. 일정이 닫혀 있으면 연결이 적용되지 않습니다. 일정이 열려 있으면 그에 따라 연결이 실행됩니다. 자세한 내용은 [AWS Systems Manager Change Calendar](systems-manager-change-calendar.md) 섹션을 참조하세요.

1. **속도 제어(Rate control)** 섹션의 여러 노드에서 연결을 실행하는 방법을 제어하는 옵션을 선택합니다. 속도 제어 사용에 대한 자세한 내용은 [State Manager 연결에서의 대상 및 속도 제어 이해](systems-manager-state-manager-targets-and-rate-controls.md) 섹션을 참조하세요.

   **동시성** 섹션에서 옵션을 선택합니다.
   + **대상**을 선택하여 연결을 동시에 실행할 수 있는 대상 수(절대 개수)를 입력합니다.
   + **백분율**을 선택하여 연결을 동시에 실행할 수 있는 대상의 백분율을 입력합니다.

   **오류 임계값** 섹션에서 옵션을 선택합니다.
   + **오류**를 선택하여 State Manager에서 추가 대상에 대한 연결 실행을 중지하기 전에 허용되는 절대 오류 수를 입력합니다.
   + **백분율**을 선택하여 State Manager에서 추가 대상에 대한 연결 실행을 중지하기 전에 허용되는 오류 비율을 입력합니다.

1. (선택 사항) **출력 옵션**에서 명령 출력을 파일에 저장하려면 **S3 버킷에 쓰기 활성화** 옆의 상자를 선택합니다. 상자에 버킷 및 접두사(폴더) 이름을 입력합니다.
**참고**  
데이터를 S3 버킷에 쓰는 기능을 부여하는 S3 권한은 이 작업을 수행하는 IAM 사용자의 권한이 아닌 관리형 노드에 할당된 인스턴스 프로파일의 권한입니다. 자세한 내용은 [Systems Manager에 필요한 인스턴스 권한 구성](setup-instance-permissions.md)이나 [하이브리드 환경을 위한 IAM 서비스 역할 생성](hybrid-multicloud-service-role.md)을 참조하세요. 또한 지정된 S3 버킷이 다른 AWS 계정에 있는 경우 관리형 노드와 연결된 인스턴스 프로파일 또는 IAM 서비스 역할은 해당 버킷에 쓸 수 있는 권한이 있어야 합니다.

   다음은 연결에 대해 Amazon S3 출력을 설정하는 데 필요한 최소 권한입니다. IAM 정책을 계정 내의 사용자 또는 역할에 연결하여 액세스를 추가로 제한할 수 있습니다. 최소한 Amazon EC2 인스턴스 프로파일에는 `AmazonSSMManagedInstanceCore` 관리형 정책과 다음 인라인 정책이 포함된 IAM 역할이 있어야 합니다.

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "s3:PutObject",
                   "s3:GetObject",
                   "s3:PutObjectAcl"
               ],
               "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*"
           }
       ]
   }
   ```

------

   최소 권한을 위해 내보내는 Amazon S3 버킷에 Amazon S3 콘솔에서 정의한 기본 설정이 있어야 합니다. Amazon S3 버킷 생성에 대한 자세한 내용은 *Amazon S3 사용 설명서*의 [버킷 생성](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)을 참조하세요.
**참고**  
연결 실행 중에 SSM 문서에 의해 시작된 API 작업은 AWS CloudTrail에 로깅되지 않습니다.

1. **연결 생성**을 선택합니다.

**참고**  
생성한 연결을 삭제하면 연결은 더 이상 해당 연결의 대상에서 실행되지 않습니다.

## 연결 생성(명령줄)
<a name="create-state-manager-association-commandline"></a>

다음 절차에서는 AWS CLI(Linux 또는 Windows Server) 또는 Tools for PowerShell을 사용하여 State Manager 연결을 생성하는 방법을 설명합니다. 이 섹션에는 대상 및 속도 제어를 사용하는 방법을 보여주는 몇 가지 예제가 포함되어 있습니다. 대상 및 속도 제어를 사용하면 수십 또는 수백 개의 노드에 연결을 할당하면서 이러한 연결의 실행을 제어할 수 있습니다. 대상 및 속도 제어에 대한 자세한 내용은 [State Manager 연결에서의 대상 및 속도 제어 이해](systems-manager-state-manager-targets-and-rate-controls.md) 섹션을 참조하세요.

**중요**  
이 절차에서는 `Command` 또는 `Policy` 문서를 사용하는 연결을 생성하여 관리형 노드를 대상으로 지정하는 방법에 대해 설명합니다. Automation 런북을 사용하는 연결을 생성하여 노드 또는 다른 유형의 AWS 리소스를 대상 지정하는 방법에 대한 자세한 내용은 [State Manager 연결을 사용하여 자동화 예약](scheduling-automations-state-manager-associations.md) 섹션을 참조하세요.

**시작하기 전 준비 사항**  
`targets` 파라미터는 지정한 `Key`-`Value` 조합을 사용하여 노드를 대상으로 지정하는 검색 조건의 배열입니다. `targets` 파라미터를 사용하여 수십 또는 수백 개의 노드에서 연결을 생성하려는 경우, 절차를 시작하기 전에 다음의 대상 지정 옵션을 검토하세요.

ID를 지정하여 특정 노드를 대상으로 지정

```
--targets Key=InstanceIds,Values=instance-id-1,instance-id-2,instance-id-3
```

```
--targets Key=InstanceIds,Values=i-02573cafcfEXAMPLE,i-0471e04240EXAMPLE,i-07782c72faEXAMPLE
```

 태그를 사용하여 인스턴스를 대상으로 지정

```
--targets Key=tag:tag-key,Values=tag-value-1,tag-value-2,tag-value-3
```

```
--targets Key=tag:Environment,Values=Development,Test,Pre-production
```

AWS Resource Groups를 사용하여 노드 대상 지정

```
--targets Key=resource-groups:Name,Values=resource-group-name
```

```
--targets Key=resource-groups:Name,Values=WindowsInstancesGroup
```

현재 AWS 계정 및 AWS 리전의 모든 인스턴스를 대상으로 지정

```
--targets Key=InstanceIds,Values=*
```

**참고**  
다음 정보를 참고하세요.  
State Manager는 해당 문서가 다른 계정에서 공유되는 경우 새 버전의 문서를 사용하는 연결 실행을 지원하지 않습니다. Systems Manager 콘솔이 새로운 버전이 처리되었음을 보여주더라도 상태 관리자는 언제나 다른 계정에서 공유된 문서의 `default` 버전을 실행합니다. 다른 계정에서 새 버전의 문서 공유 양식을 사용하여 연결을 실행하려면 문서 버전을 `default`로 설정해야 합니다.
State Manager는 [TargetLocation](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_TargetLocation.html)에 `IncludeChildOrganizationUnits`, `ExcludeAccounts`, `TargetsMaxErrors`, `TargetsMaxConcurrency`, `Targets`, `TargetLocationAlarmConfiguration` 파라미터를 지원하지 않습니다.
AWS CLI를 사용하여 최대 5개의 태그 키를 지정할 수 있습니다. AWS CLI를 사용하는 경우 `create-association` 명령에 지정된 *모든* 태그 키가 현재 노드에 할당되어 있어야 합니다. 그렇지 않으면 State Manager에서 노드를 연결 대상으로 지정하지 못합니다.
연결을 생성할 때 언제 일정을 실행할지 지정합니다. Cron 및 Rate 표현식을 사용하여 일정을 지정합니다. Cron 및 Rate 표현식에 대한 자세한 내용은 [연결에 대한 Cron 및 Rate 표현식](reference-cron-and-rate-expressions.md#reference-cron-and-rate-expressions-association) 섹션을 참조하세요.
새 대상 노드가 감지될 때 Automation 런북을 사용하여 생성된 연결을 적용하려면 특정 조건을 충족해야 합니다. 자세한 내용은 [Automation 런북을 사용한 대상 업데이트 정보](state-manager-about.md#runbook-target-updates) 섹션을 참조하세요.

**연결을 생성하려면**

1. 아직 하지 않은 경우 AWS CLI 또는 AWS Tools for PowerShell을 설치하고 구성합니다.

   자세한 내용은 [최신 버전의 AWS CLI 설치 또는 업데이트](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) 및 [AWS Tools for PowerShell 설치](https://docs.aws.amazon.com/powershell/latest/userguide/pstools-getting-set-up.html)를 참조하세요.

1. 다음 형식을 사용하여 State Manager 연결을 생성하는 명령을 만듭니다. 각 *example resource placeholder*를 사용자의 정보로 바꿉니다.

------
#### [ Linux & macOS ]

   ```
   aws ssm create-association \
       --name document_name \
       --document-version version_of_document_applied \
       --instance-id instances_to_apply_association_on \
       --parameters (if any) \
       --targets target_options \
       --association-dispatch-assume-role arn_of_role_to_be_used_when_dispatching_configurations \
       --schedule-expression "cron_or_rate_expression" \
       --apply-only-at-cron-interval required_parameter_for_schedule_offsets \
       --schedule-offset number_between_1_and_6 \
       --output-location s3_bucket_to_store_output_details \
       --association-name association_name \
       --max-errors a_number_of_errors_or_a_percentage_of_target_set \
       --max-concurrency a_number_of_instances_or_a_percentage_of_target_set \
       --compliance-severity severity_level \
       --calendar-names change_calendar_names \
       --target-locations aws_region_or_account \
       --tags "Key=tag_key,Value=tag_value"
   ```

------
#### [ Windows ]

   ```
   aws ssm create-association ^
       --name document_name ^
       --document-version version_of_document_applied ^
       --instance-id instances_to_apply_association_on ^
       --parameters (if any) ^
       --targets target_options ^
       --association-dispatch-assume-role arn_of_role_to_be_used_when_dispatching_configurations ^
       --schedule-expression "cron_or_rate_expression" ^
       --apply-only-at-cron-interval required_parameter_for_schedule_offsets ^
       --schedule-offset number_between_1_and_6 ^
       --output-location s3_bucket_to_store_output_details ^
       --association-name association_name ^
       --max-errors a_number_of_errors_or_a_percentage_of_target_set ^
       --max-concurrency a_number_of_instances_or_a_percentage_of_target_set ^
       --compliance-severity severity_level ^
       --calendar-names change_calendar_names ^
       --target-locations aws_region_or_account ^
       --tags "Key=tag_key,Value=tag_value"
   ```

------
#### [ PowerShell ]

   ```
   New-SSMAssociation `
       -Name document_name `
       -DocumentVersion version_of_document_applied `
       -InstanceId instances_to_apply_association_on `
       -Parameters (if any) `
       -Target target_options `
       -AssociationDispatchAssumeRole arn_of_role_to_be_used_when_dispatching_configurations `
       -ScheduleExpression "cron_or_rate_expression" `
       -ApplyOnlyAtCronInterval required_parameter_for_schedule_offsets `
       -ScheduleOffSet number_between_1_and_6 `
       -OutputLocation s3_bucket_to_store_output_details `
       -AssociationName association_name `
       -MaxError  a_number_of_errors_or_a_percentage_of_target_set
       -MaxConcurrency a_number_of_instances_or_a_percentage_of_target_set `
       -ComplianceSeverity severity_level `
       -CalendarNames change_calendar_names `
       -TargetLocations aws_region_or_account `
       -Tags "Key=tag_key,Value=tag_value"
   ```

------

   다음 예제에서는 `"Environment,Linux"` 태그가 지정된 노드에 대해 연결을 생성합니다. 이 연결은 `AWS-UpdateSSMAgent` 문서를 사용하여 매주 일요일 오전 2시(협정 세계 표준시(UTC))에 대상 노드에 대해 SSM Agent를 업데이트합니다. 이 연결은 주어진 시간에 최대 10개의 노드에서 동시에 실행됩니다. 또한 이 연결은 오류 수가 5를 초과하는 경우 특정 실행 간격에 대해 더 많은 노드에서 실행을 중지합니다. 규정 준수 보고를 위해 이 연결에는 중간 심각도 수준이 할당됩니다.

------
#### [ Linux & macOS ]

   ```
   aws ssm create-association \
     --association-name Update_SSM_Agent_Linux \
     --targets Key=tag:Environment,Values=Linux \
     --name AWS-UpdateSSMAgent  \
     --association-dispatch-assume-role arn:aws:iam::123456789012:role/myAssociationDispatchAssumeRole \
     --compliance-severity "MEDIUM" \
     --schedule-expression "cron(0 2 ? * SUN *)" \
     --max-errors "5" \
     --max-concurrency "10"
   ```

------
#### [ Windows ]

   ```
   aws ssm create-association ^
     --association-name Update_SSM_Agent_Linux ^
     --targets Key=tag:Environment,Values=Linux ^
     --name AWS-UpdateSSMAgent  ^
     --association-dispatch-assume-role arn:aws:iam::123456789012:role/myAssociationDispatchAssumeRole ^
     --compliance-severity "MEDIUM" ^
     --schedule-expression "cron(0 2 ? * SUN *)" ^
     --max-errors "5" ^
     --max-concurrency "10"
   ```

------
#### [ PowerShell ]

   ```
   New-SSMAssociation `
     -AssociationName Update_SSM_Agent_Linux `
     -Name AWS-UpdateSSMAgent `
     -AssociationDispatchAssumeRole "arn:aws:iam::123456789012:role/myAssociationDispatchAssumeRole" `
     -Target @{
         "Key"="tag:Environment"
         "Values"="Linux"
       } `
     -ComplianceSeverity MEDIUM `
     -ScheduleExpression "cron(0 2 ? * SUN *)" `
     -MaxConcurrency 10 `
     -MaxError 5
   ```

------

   다음 예는 와일드카드 값(\$1)을 지정하여 노드 ID를 대상으로 지정합니다. 이를 통해 Systems Manager는 현재 AWS 계정 및 AWS 리전의 *모든* 노드에 대한 연결을 생성할 수 있습니다. 이 연결은 주어진 시간에 최대 10개의 노드에서 동시에 실행됩니다. 또한 이 연결은 오류 수가 5를 초과하는 경우 특정 실행 간격에 대해 더 많은 노드에서 실행을 중지합니다. 규정 준수 보고를 위해 이 연결에는 중간 심각도 수준이 할당됩니다. 이 연결에서는 일정 오프셋을 사용합니다. 즉, 지정된 cron 일정 2일 후에 실행됩니다. 또한 `ApplyOnlyAtCronInterval` 파라미터를 포함하며, 이 파라미터는 일정 오프셋을 사용하는 데 필요합니다. 즉, 연결은 생성된 직후에는 실행되지 않습니다.

------
#### [ Linux & macOS ]

   ```
   aws ssm create-association \
     --association-name Update_SSM_Agent_Linux \
     --name "AWS-UpdateSSMAgent" \
     --association-dispatch-assume-role arn:aws:iam::123456789012:role/myAssociationDispatchAssumeRole \
     --targets "Key=instanceids,Values=*" \
     --compliance-severity "MEDIUM" \
     --schedule-expression "cron(0 2 ? * SUN#2 *)" \
     --apply-only-at-cron-interval \
     --schedule-offset 2 \
     --max-errors "5" \
     --max-concurrency "10" \
   ```

------
#### [ Windows ]

   ```
   aws ssm create-association ^
     --association-name Update_SSM_Agent_Linux ^
     --name "AWS-UpdateSSMAgent" ^
     --association-dispatch-assume-role arn:aws:iam::123456789012:role/myAssociationDispatchAssumeRole ^
     --targets "Key=instanceids,Values=*" ^
     --compliance-severity "MEDIUM" ^
     --schedule-expression "cron(0 2 ? * SUN#2 *)" ^
     --apply-only-at-cron-interval ^
     --schedule-offset 2 ^
     --max-errors "5" ^
     --max-concurrency "10" ^
     --apply-only-at-cron-interval
   ```

------
#### [ PowerShell ]

   ```
   New-SSMAssociation `
     -AssociationName Update_SSM_Agent_All `
     -Name AWS-UpdateSSMAgent `
     -AssociationDispatchAssumeRole "arn:aws:iam::123456789012:role/myAssociationDispatchAssumeRole" `
     -Target @{
         "Key"="InstanceIds"
         "Values"="*"
       } `
     -ScheduleExpression "cron(0 2 ? * SUN#2 *)" `
     -ApplyOnlyAtCronInterval `
     -ScheduleOffset 2 `
     -MaxConcurrency 10 `
     -MaxError 5 `
     -ComplianceSeverity MEDIUM `
     -ApplyOnlyAtCronInterval
   ```

------

   다음 예에서는 Resource Groups의 노드에 연결을 생성합니다. 그룹 이름은 "HR-Department"입니다. 이 연결은 `AWS-UpdateSSMAgent` 문서를 사용하여 매주 일요일 오전 2시(협정 세계 표준시(UTC))에 대상 노드에 대해 SSM Agent를 업데이트합니다. 이 연결은 주어진 시간에 최대 10개의 노드에서 동시에 실행됩니다. 또한 이 연결은 오류 수가 5를 초과하는 경우 특정 실행 간격에 대해 더 많은 노드에서 실행을 중지합니다. 규정 준수 보고를 위해 이 연결에는 중간 심각도 수준이 할당됩니다. 이 연결은 지정된 cron 일정에서 실행됩니다. 연결이 생성된 직후에는 실행되지 않습니다.

------
#### [ Linux & macOS ]

   ```
   aws ssm create-association \
     --association-name Update_SSM_Agent_Linux \
     --targets Key=resource-groups:Name,Values=HR-Department \
     --name AWS-UpdateSSMAgent  \
     --association-dispatch-assume-role arn:aws:iam::123456789012:role/myAssociationDispatchAssumeRole \
     --compliance-severity "MEDIUM" \
     --schedule-expression "cron(0 2 ? * SUN *)" \
     --max-errors "5" \
     --max-concurrency "10" \
     --apply-only-at-cron-interval
   ```

------
#### [ Windows ]

   ```
   aws ssm create-association ^
     --association-name Update_SSM_Agent_Linux ^
     --targets Key=resource-groups:Name,Values=HR-Department ^
     --name AWS-UpdateSSMAgent  ^
     -association-dispatch-assume-role arn:aws:iam::123456789012:role/myAssociationDispatchAssumeRole ^
     --compliance-severity "MEDIUM" ^
     --schedule-expression "cron(0 2 ? * SUN *)" ^
     --max-errors "5" ^
     --max-concurrency "10" ^
     --apply-only-at-cron-interval
   ```

------
#### [ PowerShell ]

   ```
   New-SSMAssociation `
     -AssociationName Update_SSM_Agent_Linux `
     -Name AWS-UpdateSSMAgent `
     -AssociationDispatchAssumeRole "arn:aws:iam::123456789012:role/myAssociationDispatchAssumeRole" `
     -Target @{
         "Key"="resource-groups:Name"
         "Values"="HR-Department"
       } `
     -ScheduleExpression "cron(0 2 ? * SUN *)" `
     -MaxConcurrency 10 `
     -MaxError 5 `
     -ComplianceSeverity MEDIUM `
     -ApplyOnlyAtCronInterval
   ```

------

   다음 예에서는 특정 노드 ID로 태그가 지정된 노드에서 실행되는 연결을 생성합니다. 연결은 변경 일정이 열려 있을 때 SSM Agent 문서를 사용하여 대상 노드에서 SSM Agent를 한 번 업데이트합니다. 연결은 실행 시 일정 상태를 확인합니다. 시작 시 일정이 닫혀 있고 연결이 한 번만 실행되면 연결 실행 기간이 지나므로 열결이 다시 실행되지 않습니다. 일정이 열려 있으면 그에 따라 연결이 실행됩니다.
**참고**  
변경 일정이 닫힐 때 연결이 작동하는 태그 또는 리소스 그룹에 새 노드를 추가하는 경우 변경 일정이 열리면 연결이 해당 노드에 적용됩니다.

------
#### [ Linux & macOS ]

   ```
   aws ssm create-association \
     --association-name CalendarAssociation \
     --targets "Key=instanceids,Values=i-0cb2b964d3e14fd9f" \
     --name AWS-UpdateSSMAgent  \
     --association-dispatch-assume-role arn:aws:iam::123456789012:role/myAssociationDispatchAssumeRole \
     --calendar-names "arn:aws:ssm:us-east-1:123456789012:document/testCalendar1" \
     --schedule-expression "rate(1day)"
   ```

------
#### [ Windows ]

   ```
   aws ssm create-association ^
     --association-name CalendarAssociation ^
     --targets "Key=instanceids,Values=i-0cb2b964d3e14fd9f" ^
     --name AWS-UpdateSSMAgent  ^
     --association-dispatch-assume-role arn:aws:iam::123456789012:role/myAssociationDispatchAssumeRole ^
     --calendar-names "arn:aws:ssm:us-east-1:123456789012:document/testCalendar1" ^
     --schedule-expression "rate(1day)"
   ```

------
#### [ PowerShell ]

   ```
   New-SSMAssociation `
     -AssociationName CalendarAssociation `
     -Target @{
         "Key"="tag:instanceids"
         "Values"="i-0cb2b964d3e14fd9f"
       } `
     -Name AWS-UpdateSSMAgent `
     -AssociationDispatchAssumeRole "arn:aws:iam::123456789012:role/myAssociationDispatchAssumeRole" `
     -CalendarNames "arn:aws:ssm:us-east-1:123456789012:document/testCalendar1" `
     -ScheduleExpression "rate(1day)"
   ```

------

   다음 예에서는 특정 노드 ID로 태그가 지정된 노드에서 실행되는 연결을 생성합니다. 이 연결은 SSM Agent 문서를 사용하여 매주 일요일 오전 2시에 대상 노드에 대해 SSM Agent를 업데이트합니다. 이 연결은 변경 일정이 열려 있을 때 지정된 cron 일정에서만 실행됩니다. 연결은 생성 시 일정 상태를 확인합니다. 일정이 닫혀 있으면 연결이 적용되지 않습니다. 연결 적용 간격이 일요일 오전 2시에 시작되면 연결은 달력이 열려 있는지 확인합니다. 일정이 열려 있으면 그에 따라 연결이 실행됩니다.
**참고**  
변경 일정이 닫힐 때 연결이 작동하는 태그 또는 리소스 그룹에 새 노드를 추가하는 경우 변경 일정이 열리면 연결이 해당 노드에 적용됩니다.

------
#### [ Linux & macOS ]

   ```
   aws ssm create-association \
     --association-name MultiCalendarAssociation \
     --targets "Key=instanceids,Values=i-0cb2b964d3e14fd9f" \
     --name AWS-UpdateSSMAgent  \
     --association-dispatch-assume-role arn:aws:iam::123456789012:role/myAssociationDispatchAssumeRole \
     --calendar-names "arn:aws:ssm:us-east-1:123456789012:document/testCalendar1" "arn:aws:ssm:us-east-2:123456789012:document/testCalendar2" \
     --schedule-expression "cron(0 2 ? * SUN *)"
   ```

------
#### [ Windows ]

   ```
   aws ssm create-association ^
     --association-name MultiCalendarAssociation ^
     --targets "Key=instanceids,Values=i-0cb2b964d3e14fd9f" ^
     --name AWS-UpdateSSMAgent  ^
     --association-dispatch-assume-role arn:aws:iam::123456789012:role/myAssociationDispatchAssumeRole ^
     --calendar-names "arn:aws:ssm:us-east-1:123456789012:document/testCalendar1" "arn:aws:ssm:us-east-2:123456789012:document/testCalendar2" ^
     --schedule-expression "cron(0 2 ? * SUN *)"
   ```

------
#### [ PowerShell ]

   ```
   New-SSMAssociation `
     -AssociationName MultiCalendarAssociation `
     -Name AWS-UpdateSSMAgent `
     -AssociationDispatchAssumeRole "arn:aws:iam::123456789012:role/myAssociationDispatchAssumeRole" `
     -Target @{
         "Key"="tag:instanceids"
         "Values"="i-0cb2b964d3e14fd9f"
       } `
     -CalendarNames "arn:aws:ssm:us-east-1:123456789012:document/testCalendar1" "arn:aws:ssm:us-east-2:123456789012:document/testCalendar2" `
     -ScheduleExpression "cron(0 2 ? * SUN *)"
   ```

------

**참고**  
생성한 연결을 삭제하면 연결은 더 이상 해당 연결의 대상에서 실행되지 않습니다. 또한 `apply-only-at-cron-interval` 파라미터를 지정한 경우 이 옵션을 재설정할 수 있습니다. 이렇게 하려면 명령줄에서 연결을 업데이트할 때 `no-apply-only-at-cron-interval` 파라미터를 지정합니다. 이 파라미터는 연결을 업데이트한 직후 지정된 간격에 따라 연결을 강제로 실행합니다.

# 새로운 연결 버전 편집 및 생성
<a name="state-manager-associations-edit"></a>

State Manager 연결을 편집하여 새 이름, 일정, 심각도 수준, 대상 또는 기타 값을 지정할 수 있습니다. SSM Command 유형 문서 기반 연결인 경우 명령의 출력을 Amazon Simple Storage Service(S3) 버킷에 쓰도록 선택할 수도 있습니다. 연결을 편집하면 State Manager에서 새로운 버전을 생성합니다. 다음 절차에 설명된 대로 편집 후에 다른 버전이 표시될 수 있습니다.

**참고**  
새 대상 노드가 감지될 때 Automation 런북을 사용하여 생성된 연결을 적용하려면 특정 조건을 충족해야 합니다. 자세한 내용은 [Automation 런북을 사용한 대상 업데이트 정보](state-manager-about.md#runbook-target-updates) 섹션을 참조하세요.

다음 절차에서는 Systems Manager 콘솔, AWS Command Line Interface(AWS CLI) 및 AWS Tools for PowerShell(Tools for PowerShell)을 사용하여 새로운 연결 버전을 편집하고 생성하는 방법을 설명합니다.

**중요**  
State Manager는 해당 문서가 다른 계정에서 공유되는 경우 새 버전의 문서를 사용하는 연결 실행을 지원하지 않습니다. State Manager는 Systems Manager 콘솔이 새 버전이 처리되었음을 보여주더라도 다른 계정에서 공유된 경우 문서의 `default` 버전을 항상 실행합니다. 다른 계정에서 새 버전의 문서 공유 양식을 사용하여 연결을 실행하려면 문서 버전을 `default`로 설정해야 합니다.

## 연결 편집(콘솔)
<a name="state-manager-associations-edit-console"></a>

다음 절차에서는 Systems Manager 콘솔을 사용하여 새로운 연결 버전을 편집하고 생성하는 방법을 설명합니다.

**참고**  
Automation 런북이 아닌 SSM Command 문서를 사용하는 연결의 경우 이 절차를 수행하려면 기존 Amazon S3 버킷에 대한 쓰기 액세스 권한이 있어야 합니다. 이전에 Amazon S3를 사용해 본 적이 없는 경우 Amazon S3 사용 요금이 부과되므로 주의하세요. 버킷을 생성하는 방법에 대한 자세한 내용은 [버킷 생성](https://docs.aws.amazon.com/AmazonS3/latest/userguide/CreatingABucket.html) 섹션을 참조하세요.

**State Manager 연결을 편집하려면**

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

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

1. 기존 연결을 선택하고 **편집**을 선택합니다.

1. 현재 요구 사항을 충족하도록 연결을 다시 구성합니다.

   `Command` 및 `Policy` 문서를 사용한 옵션에 대한 자세한 내용은 [연결 생성](state-manager-associations-creating.md) 문서를 참조하세요. Automation 런북을 사용한 연결 옵션에 대한 자세한 내용은 [State Manager 연결을 사용하여 자동화 예약](scheduling-automations-state-manager-associations.md) 문서를 참조하세요.

1. **변경 사항 저장(Save Changes)**을 선택합니다.

1. (선택사항) **연결** 페이지에서 연결 정보를 보려면 편집한 연결의 이름을 선택한 후 **버전** 탭을 선택합니다. 생성하고 편집한 연결의 각 버전이 시스템에 나열됩니다.

1. (선택 사항) SSM `Command` 문서를 기반으로 한 연결의 출력을 보려면 다음을 수행합니다.

   1. [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)에서 S3 콘솔을 엽니다.

   1. 명령 출력을 저장하도록 지정한 Amazon S3 버킷의 이름을 선택한 후, 연결을 실행한 노드의 ID로 이름을 지정한 폴더를 선택합니다. (버킷의 폴더에 출력을 저장하도록 선택한 경우, 해당 폴더를 먼저 여세요.)

   1. 몇 가지 수준을 드릴다운하여 `awsrunPowerShell` 폴더의 `stdout` 파일을 찾습니다.

   1. **열기** 또는 **다운로드**를 선택하여 호스트 이름을 확인합니다.

## 연결 편집(명령줄)
<a name="state-manager-associations-edit-commandline"></a>

다음 절차에서는 AWS CLI(Linux 또는 Windows Server) 또는 AWS Tools for PowerShell을 사용하여 새로운 연결 버전을 편집 및 생성하는 방법을 설명합니다.

**State Manager 연결을 편집하려면**

1. 아직 하지 않은 경우 AWS CLI 또는 AWS Tools for PowerShell을 설치하고 구성합니다.

   자세한 내용은 [최신 버전의 AWS CLI 설치 또는 업데이트](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) 및 [AWS Tools for PowerShell 설치](https://docs.aws.amazon.com/powershell/latest/userguide/pstools-getting-set-up.html)를 참조하세요.

1. 다음 형식을 사용하여 기존 State Manager 연결의 새로운 버전을 편집 및 생성할 명령을 만듭니다. 각 *example resource placeholder*를 사용자의 정보로 바꿉니다.
**중요**  
`[https://docs.aws.amazon.com/cli/latest/reference/ssm/desupdatecribe-association.html](https://docs.aws.amazon.com/cli/latest/reference/ssm/desupdatecribe-association.html)`을 호출할 때, 시스템은 요청의 모든 부가적인 파라미터를 드롭하고 이 파라미터를 null 값으로 덮어씁니다. 이것은 설계에 따른 것입니다. 파라미터를 변경하지 않더라도 호출에서 모든 선택적 파라미터를 지정해야 합니다. 여기에는 `--name` 파라미터가 포함됩니다. 이 작업을 호출하기 전에, `[https://docs.aws.amazon.com/cli/latest/reference/ssm/describe-association.html](https://docs.aws.amazon.com/cli/latest/reference/ssm/describe-association.html)` 작업을 직접 호출하고 `update-association` 직접 호출에 필요한 모든 선택적 파라미터를 기록해 두는 것이 좋습니다.

------
#### [ Linux & macOS ]

   ```
   aws ssm update-association \
       --name document_name \
       --document-version version_of_document_applied \
       --instance-id instances_to_apply_association_on \
       --parameters (if any) \
       --targets target_options \
       --association-dispatch-assume-role arn_of_role_to_be_used_when_dispatching_configurations \
       --schedule-expression "cron_or_rate_expression" \
       --schedule-offset "number_between_1_and_6" \
       --output-location s3_bucket_to_store_output_details \
       --association-name association_name \
       --max-errors a_number_of_errors_or_a_percentage_of_target_set \
       --max-concurrency a_number_of_instances_or_a_percentage_of_target_set \
       --compliance-severity severity_level \
       --calendar-names change_calendar_names \
       --target-locations aws_region_or_account
   ```

------
#### [ Windows ]

   ```
   aws ssm update-association ^
       --name document_name ^
       --document-version version_of_document_applied ^
       --instance-id instances_to_apply_association_on ^
       --parameters (if any) ^
       --targets target_options ^
       --association-dispatch-assume-role arn_of_role_to_be_used_when_dispatching_configurations ^
       --schedule-expression "cron_or_rate_expression" ^
       --schedule-offset "number_between_1_and_6" ^
       --output-location s3_bucket_to_store_output_details ^
       --association-name association_name ^
       --max-errors a_number_of_errors_or_a_percentage_of_target_set ^
       --max-concurrency a_number_of_instances_or_a_percentage_of_target_set ^
       --compliance-severity severity_level ^
       --calendar-names change_calendar_names ^
       --target-locations aws_region_or_account
   ```

------
#### [ PowerShell ]

   ```
   Update-SSMAssociation `
       -Name document_name `
       -DocumentVersion version_of_document_applied `
       -InstanceId instances_to_apply_association_on `
       -Parameters (if any) `
       -Target target_options `
       -AssociationDispatchAssumeRole arn_of_role_to_be_used_when_dispatching_configurations `
       -ScheduleExpression "cron_or_rate_expression" `
       -ScheduleOffset "number_between_1_and_6" `
       -OutputLocation s3_bucket_to_store_output_details `
       -AssociationName association_name `
       -MaxError  a_number_of_errors_or_a_percentage_of_target_set
       -MaxConcurrency a_number_of_instances_or_a_percentage_of_target_set `
       -ComplianceSeverity severity_level `
       -CalendarNames change_calendar_names `
       -TargetLocations aws_region_or_account
   ```

------

   다음 예제에서는 이름을 `TestHostnameAssociation2`으로 변경하도록 기존 연결을 업데이트합니다. 새로운 연결 버전은 매 시간마다 실행되고 명령의 출력을 지정된 Amazon S3 버킷에 씁니다.

------
#### [ Linux & macOS ]

   ```
   aws ssm update-association \
     --association-id 8dfe3659-4309-493a-8755-01234EXAMPLE \
     --association-name TestHostnameAssociation2 \
     --parameters commands="echo Association" \
     --association-dispatch-assume-role arn:aws:iam::123456789012:role/myAssociationDispatchAssumeRole \
     --output-location S3Location='{OutputS3Region=us-east-1,OutputS3BucketName=amzn-s3-demo-bucket,OutputS3KeyPrefix=logs}' \
     --schedule-expression "cron(0 */1 * * ? *)"
   ```

------
#### [ Windows ]

   ```
   aws ssm update-association ^
     --association-id 8dfe3659-4309-493a-8755-01234EXAMPLE ^
     --association-name TestHostnameAssociation2 ^
     --parameters commands="echo Association" ^
     --association-dispatch-assume-role arn:aws:iam::123456789012:role/myAssociationDispatchAssumeRole ^
     --output-location S3Location='{OutputS3Region=us-east-1,OutputS3BucketName=amzn-s3-demo-bucket,OutputS3KeyPrefix=logs}' ^
     --schedule-expression "cron(0 */1 * * ? *)"
   ```

------
#### [ PowerShell ]

   ```
   Update-SSMAssociation `
     -AssociationId b85ccafe-9f02-4812-9b81-01234EXAMPLE `
     -AssociationName TestHostnameAssociation2 `
     -Parameter @{"commands"="echo Association"} `
     -AssociationDispatchAssumeRole "arn:aws:iam::123456789012:role/myAssociationDispatchAssumeRole" `
     -S3Location_OutputS3BucketName amzn-s3-demo-bucket `
     -S3Location_OutputS3KeyPrefix logs `
     -S3Location_OutputS3Region us-east-1 `
     -ScheduleExpression "cron(0 */1 * * ? *)"
   ```

------

   다음 예제에서는 이름을 `CalendarAssociation`으로 변경하도록 기존 연결을 업데이트합니다. 새로운 연결은 달력이 열릴 때 실행되고 명령 출력을 지정된 Amazon S3 버킷에 씁니다.

------
#### [ Linux & macOS ]

   ```
   aws ssm update-association \
     --association-id 8dfe3659-4309-493a-8755-01234EXAMPLE \
     --association-name CalendarAssociation \
     --parameters commands="echo Association" \
     --output-location S3Location='{OutputS3Region=us-east-1,OutputS3BucketName=amzn-s3-demo-bucket,OutputS3KeyPrefix=logs}' \
     --calendar-names "arn:aws:ssm:us-east-1:123456789012:document/testCalendar2"
   ```

------
#### [ Windows ]

   ```
   aws ssm update-association ^
     --association-id 8dfe3659-4309-493a-8755-01234EXAMPLE ^
     --association-name CalendarAssociation ^
     --parameters commands="echo Association" ^
     --output-location S3Location='{OutputS3Region=us-east-1,OutputS3BucketName=amzn-s3-demo-bucket,OutputS3KeyPrefix=logs}' ^
     --calendar-names "arn:aws:ssm:us-east-1:123456789012:document/testCalendar2"
   ```

------
#### [ PowerShell ]

   ```
   Update-SSMAssociation `
     -AssociationId b85ccafe-9f02-4812-9b81-01234EXAMPLE `
     -AssociationName CalendarAssociation `
     -AssociationName OneTimeAssociation `
     -Parameter @{"commands"="echo Association"} `
     -S3Location_OutputS3BucketName amzn-s3-demo-bucket `
     -CalendarNames "arn:aws:ssm:us-east-1:123456789012:document/testCalendar2"
   ```

------

   다음 예제에서는 이름을 `MultiCalendarAssociation`으로 변경하도록 기존 연결을 업데이트합니다. 새로운 연결은 달력이 열려 있을 때 실행되고 명령 출력을 지정된 Amazon S3 버킷에 씁니다.

------
#### [ Linux & macOS ]

   ```
   aws ssm update-association \
     --association-id 8dfe3659-4309-493a-8755-01234EXAMPLE \
     --association-name MultiCalendarAssociation \
     --parameters commands="echo Association" \
     --output-location S3Location='{OutputS3Region=us-east-1,OutputS3BucketName=amzn-s3-demo-bucket,OutputS3KeyPrefix=logs}' \
     --calendar-names "arn:aws:ssm:us-east-1:123456789012:document/testCalendar1" "arn:aws:ssm:us-east-2:123456789012:document/testCalendar2"
   ```

------
#### [ Windows ]

   ```
   aws ssm update-association ^
     --association-id 8dfe3659-4309-493a-8755-01234EXAMPLE ^
     --association-name MultiCalendarAssociation ^
     --parameters commands="echo Association" ^
     --output-location S3Location='{OutputS3Region=us-east-1,OutputS3BucketName=amzn-s3-demo-bucket,OutputS3KeyPrefix=logs}' ^
     --calendar-names "arn:aws:ssm:us-east-1:123456789012:document/testCalendar1" "arn:aws:ssm:us-east-2:123456789012:document/testCalendar2"
   ```

------
#### [ PowerShell ]

   ```
   Update-SSMAssociation `
     -AssociationId b85ccafe-9f02-4812-9b81-01234EXAMPLE `
     -AssociationName MultiCalendarAssociation `
     -Parameter @{"commands"="echo Association"} `
     -S3Location_OutputS3BucketName amzn-s3-demo-bucket `
     -CalendarNames "arn:aws:ssm:us-east-1:123456789012:document/testCalendar1" "arn:aws:ssm:us-east-2:123456789012:document/testCalendar2"
   ```

------

1. 새로운 연결 버전을 보려면 다음 명령을 실행합니다.

------
#### [ Linux & macOS ]

   ```
   aws ssm describe-association \
     --association-id b85ccafe-9f02-4812-9b81-01234EXAMPLE
   ```

------
#### [ Windows ]

   ```
   aws ssm describe-association ^
     --association-id b85ccafe-9f02-4812-9b81-01234EXAMPLE
   ```

------
#### [ PowerShell ]

   ```
   Get-SSMAssociation `
     -AssociationId b85ccafe-9f02-4812-9b81-01234EXAMPLE | Select-Object *
   ```

------

   시스템은 다음과 같은 정보를 반환합니다.

------
#### [ Linux & macOS ]

   ```
   {
       "AssociationDescription": {
           "ScheduleExpression": "cron(0 */1 * * ? *)",
           "OutputLocation": {
               "S3Location": {
                   "OutputS3KeyPrefix": "logs",
                   "OutputS3BucketName": "amzn-s3-demo-bucket",
                   "OutputS3Region": "us-east-1"
               }
           },
           "Name": "AWS-RunPowerShellScript",
           "Parameters": {
               "commands": [
                   "echo Association"
               ]
           },
           "LastExecutionDate": 1559316400.338,
           "Overview": {
               "Status": "Success",
               "DetailedStatus": "Success",
               "AssociationStatusAggregatedCount": {}
           },
           "AssociationId": "b85ccafe-9f02-4812-9b81-01234EXAMPLE",
           "DocumentVersion": "$DEFAULT",
           "LastSuccessfulExecutionDate": 1559316400.338,
           "LastUpdateAssociationDate": 1559316389.753,
           "Date": 1559314038.532,
           "AssociationVersion": "2",
           "AssociationName": "TestHostnameAssociation2",
           "Targets": [
               {
                   "Values": [
                       "Windows"
                   ],
                   "Key": "tag:Environment"
               }
           ]
       }
   }
   ```

------
#### [ Windows ]

   ```
   {
       "AssociationDescription": {
           "ScheduleExpression": "cron(0 */1 * * ? *)",
           "OutputLocation": {
               "S3Location": {
                   "OutputS3KeyPrefix": "logs",
                   "OutputS3BucketName": "amzn-s3-demo-bucket",
                   "OutputS3Region": "us-east-1"
               }
           },
           "Name": "AWS-RunPowerShellScript",
           "Parameters": {
               "commands": [
                   "echo Association"
               ]
           },
           "LastExecutionDate": 1559316400.338,
           "Overview": {
               "Status": "Success",
               "DetailedStatus": "Success",
               "AssociationStatusAggregatedCount": {}
           },
           "AssociationId": "b85ccafe-9f02-4812-9b81-01234EXAMPLE",
           "DocumentVersion": "$DEFAULT",
           "LastSuccessfulExecutionDate": 1559316400.338,
           "LastUpdateAssociationDate": 1559316389.753,
           "Date": 1559314038.532,
           "AssociationVersion": "2",
           "AssociationName": "TestHostnameAssociation2",
           "Targets": [
               {
                   "Values": [
                       "Windows"
                   ],
                   "Key": "tag:Environment"
               }
           ]
       }
   }
   ```

------
#### [ PowerShell ]

   ```
   AssociationId                 : b85ccafe-9f02-4812-9b81-01234EXAMPLE
   AssociationName               : TestHostnameAssociation2
   AssociationVersion            : 2
   AutomationTargetParameterName : 
   ComplianceSeverity            : 
   Date                          : 5/31/2019 2:47:18 PM
   DocumentVersion               : $DEFAULT
   InstanceId                    : 
   LastExecutionDate             : 5/31/2019 3:26:40 PM
   LastSuccessfulExecutionDate   : 5/31/2019 3:26:40 PM
   LastUpdateAssociationDate     : 5/31/2019 3:26:29 PM
   MaxConcurrency                : 
   MaxErrors                     : 
   Name                          : AWS-RunPowerShellScript
   OutputLocation                : Amazon.SimpleSystemsManagement.Model.InstanceAssociationOutputLocation
   Overview                      : Amazon.SimpleSystemsManagement.Model.AssociationOverview
   Parameters                    : {[commands, Amazon.Runtime.Internal.Util.AlwaysSendList`1[System.String]]}
   ScheduleExpression            : cron(0 */1 * * ? *)
   Status                        : 
   Targets                       : {tag:Environment}
   ```

------

# 연결 삭제
<a name="systems-manager-state-manager-delete-association"></a>

다음 절차에 따라 AWS Systems Manager 콘솔을 사용하여 연결을 삭제합니다.

**연결을 삭제하려면**

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

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

1. 연결을 선택하고 **삭제**를 선택합니다.

AWS Systems Manager 콘솔에서 자동화를 실행하여 한 번의 작업으로 여러 개의 연결을 삭제할 수 있습니다. 삭제할 연결을 여러 개 선택하면 State Manager가 입력 파라미터 값으로 입력된 연결 ID를 사용하여 자동화 런북 시작 페이지를 시작합니다.

**한 번의 작업으로 여러 연결을 삭제하려면**

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

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

1. 삭제하려는 각 연결을 선택한 다음 **삭제**를 선택합니다.

1. (선택 사항) **추가 입력 파라미터** 영역에서 실행 중에 자동화가 사용할 **역할 수임을 위한 Amazon 리소스 이름(ARN)을 선택합니다. 새 역할 수임을 생성하려면 **생성**을 선택하세요.

1. **제출**을 선택합니다.

# 연결을 사용하여 Auto Scaling 그룹 실행
<a name="systems-manager-state-manager-asg"></a>

연결을 사용하여 Auto Scaling 그룹을 실행할 때 모범 사례는 태그 대상을 사용하는 것입니다. 태그를 사용하지 않으면 연결 제한에 도달하게 될 수 있습니다.

모든 노드에 동일한 키와 값으로 태그가 지정된 경우 Auto Scaling 그룹을 실행하는 데 하나의 연결만 필요합니다. 다음 절차에서는 이러한 연결을 생성하는 방법을 설명합니다.

**Auto Scaling 그룹을 실행하는 연결을 생성하려면**

1. Auto Scaling 그룹의 모든 노드에 동일한 키와 값으로 태그가 지정되었는지 확인합니다. 노드에 태그를 지정하는 자세한 지침은 *AWS Auto Scaling 사용 설명서*의 [Auto Scaling 그룹 및 인스턴스 태그 지정](https://docs.aws.amazon.com//autoscaling/ec2/userguide/autoscaling-tagging.html)을 참조하세요.

1. [Systems Manager에서 연결 작업](state-manager-associations.md)의 절차를 사용하여 연결을 생성합니다.

   콘솔에서 작업 중인 경우 [**대상(Targets)**] 필드에서 [**인스턴스 태그 지정(Specify instance tags)**]을 선택합니다. [**인스턴스 태그(Instance tags)**]에 Auto Scaling 그룹의 [**태그(Tag)**] 키와 값을 입력합니다.

   AWS Command Line Interface(AWS CLI)를 사용하는 경우 키와 값이 노드에 태그를 지정하는 데 사용한 것과 일치하는 `--targets Key=tag:tag-key,Values=tag-value`를 지정합니다.

# 연결 내역 보기
<a name="state-manager-associations-history"></a>

[DescribeAssociationExecutions](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_DescribeAssociationExecutions.html) API 작업을 사용하여 특정 연결 ID에 대한 모든 실행을 볼 수 있습니다. 이 작업을 사용하여 State Manager 연결의 상태, 세부 상태, 결과, 마지막 실행 시간 및 추가 정보를 봅니다. State Manager는 AWS Systems Manager의 도구입니다. 이 API 작업에는 지정한 기준에 따라 연결을 찾는 데 도움이 되는 필터도 포함됩니다. 예를 들어 정확한 날짜 및 시간을 지정하고 GREATER\$1THAN 필터를 사용하여 지정한 날짜 및 시간 이후에 처리된 실행을 볼 수 있습니다.

예를 들어 연결 실행에 실패한 경우 [DescribeAssociationExecutionTargets](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_DescribeAssociationExecutionTargets.html) API 작업을 사용하여 특정 실행의 세부 정보를 심층 분석할 수 있습니다. 이 작업은 연결이 실행된 노드 ID와 같은 리소스 및 다양한 연결 상태를 보여줍니다. 그러면 연결 실행에 실패한 리소스나 노드를 확인할 수 있습니다. 그런 다음 리소스 ID를 사용하여 명령 실행 세부 정보를 보고 명령의 어떤 단계가 실패했는지를 확인할 수 있습니다.

이 섹션의 예에는 [StartAssociationsOnce](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_StartAssociationsOnce.html) API 작업을 사용하여 생성 시 한 번 연결을 실행하는 방법에 대한 정보도 포함되어 있습니다. 실패한 연결 실행을 조사할 때 이 API 작업을 사용할 수 있습니다. 연결이 실패했음을 확인하는 경우 리소스를 변경한 다음 연결을 즉시 실행하여 리소스 변경으로 인해 연결을 성공적으로 실행할 수 있는지 여부를 확인할 수 있습니다.

**참고**  
연결 실행 중에 SSM 문서에 의해 시작된 API 작업은 AWS CloudTrail에 로깅되지 않습니다.

## 연결 내역 보기(콘솔)
<a name="state-manager-associations-history-console"></a>

다음 절차를 사용하여 특정 연결 ID에 대한 실행 내역을 본 다음 하나 이상의 리소스에 대한 실행 세부 정보를 봅니다.

**특정 연결 ID에 대한 실행 내역을 보려면**

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

1. **State Manager**을 선택합니다.

1. **Association id(연결 ID)** 필드에서 내역을 보려는 연결을 선택합니다.

1. **세부 정보 보기(View details)** 버튼을 선택합니다.

1. **Execution history(실행 내역)** 탭을 선택합니다.

1. 리소스 레벨 실행 세부 정보를 보려는 연결을 선택합니다. 예를 들어, **Failed(실패)** 상태를 보여 주는 연결을 선택합니다. 그런 다음 연결을 실행하는 데 실패한 노드에 대한 실행 세부 정보를 볼 수 있습니다.

   검색 상자 필터를 사용하여 세부 정보를 보려는 실행을 찾습니다.  
![\[State Manager 연결 실행 목록 필터링\]](http://docs.aws.amazon.com/ko_kr/systems-manager/latest/userguide/images/sysman-state-executions-filter.png)

1. 실행 ID를 선택합니다. **Association execution targets(연결 실행 대상)** 페이지가 열립니다. 이 페이지에는 연결을 실행한 모든 리소스가 표시됩니다.

1. 리소스 ID를 선택하여 해당 리소스에 대한 구체적인 정보를 봅니다.

   검색 상자 필터를 사용하여 세부 정보를 보려는 리소스를 찾습니다.  
![\[State Manager 연결 실행 대상 목록 필터링\]](http://docs.aws.amazon.com/ko_kr/systems-manager/latest/userguide/images/sysman-state-executions-targets-filter.png)

1. 실행에 실패한 연결을 조사하는 경우 [**지금 연결 적용(Apply association now)**] 버튼을 사용하여 생성 시 연결을 한 번 실행할 수 있습니다. 연결 실행에 실패한 리소스를 변경한 후 탐색 이동 경로에서 **Association ID(연결 ID)** 랭크를 선택합니다.

1. **Apply association now(지금 연결 적용)** 버튼을 선택합니다. 실행이 완료된 후 해당 연결 실행이 성공했는지를 확인합니다.

## 연결 내역 보기(명령줄)
<a name="state-manager-associations-history-commandline"></a>

다음 절차에서는 AWS Command Line Interface(AWS CLI)(Linux 또는 Windows Server) 또는 AWS Tools for PowerShell을 사용하여 특정 연결 ID에 대한 실행 내역을 보는 방법을 설명합니다. 그런 다음, 하나 이상의 리소스에 대한 실행 세부 정보를 보는 방법을 설명합니다.

**특정 연결 ID에 대한 실행 내역을 보려면**

1. 아직 하지 않은 경우 AWS CLI 또는 AWS Tools for PowerShell을 설치하고 구성합니다.

   자세한 내용은 [최신 버전의 AWS CLI 설치 또는 업데이트](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) 및 [AWS Tools for PowerShell 설치](https://docs.aws.amazon.com/powershell/latest/userguide/pstools-getting-set-up.html)를 참조하세요.

1. 다음 명령을 실행하여 특정 연결 ID의 작업 실행 목록을 봅니다.

------
#### [ Linux & macOS ]

   ```
   aws ssm describe-association-executions \
     --association-id ID \
     --filters Key=CreatedTime,Value="2018-04-10T19:15:38.372Z",Type=GREATER_THAN
   ```

**참고**  
이 명령에는 특정 날짜 및 시간 이후에 발생한 실행으로만 결과를 제한하는 필터가 포함됩니다. 특정 연결 ID의 모든 실행을 보려는 경우 `--filters` 파라미터 및 ` Key=CreatedTime,Value="2018-04-10T19:15:38.372Z",Type=GREATER_THAN` 값을 제거합니다.

------
#### [ Windows ]

   ```
   aws ssm describe-association-executions ^
     --association-id ID ^
     --filters Key=CreatedTime,Value="2018-04-10T19:15:38.372Z",Type=GREATER_THAN
   ```

**참고**  
이 명령에는 특정 날짜 및 시간 이후에 발생한 실행으로만 결과를 제한하는 필터가 포함됩니다. 특정 연결 ID의 모든 실행을 보려는 경우 `--filters` 파라미터 및 ` Key=CreatedTime,Value="2018-04-10T19:15:38.372Z",Type=GREATER_THAN` 값을 제거합니다.

------
#### [ PowerShell ]

   ```
   Get-SSMAssociationExecution `
     -AssociationId ID `
     -Filter @{"Key"="CreatedTime";"Value"="2019-06-01T19:15:38.372Z";"Type"="GREATER_THAN"}
   ```

**참고**  
이 명령에는 특정 날짜 및 시간 이후에 발생한 실행으로만 결과를 제한하는 필터가 포함됩니다. 특정 연결 ID의 모든 실행을 보려는 경우 `-Filter` 파라미터 및 ` @{"Key"="CreatedTime";"Value"="2019-06-01T19:15:38.372Z";"Type"="GREATER_THAN"}` 값을 제거합니다.

------

   시스템은 다음과 같은 정보를 반환합니다.

------
#### [ Linux & macOS ]

   ```
   {
      "AssociationExecutions":[
         {
            "Status":"Success",
            "DetailedStatus":"Success",
            "AssociationId":"c336d2ab-09de-44ba-8f6a-6136cEXAMPLE",
            "ExecutionId":"76a5a04f-caf6-490c-b448-92c02EXAMPLE",
            "CreatedTime":1523986028.219,
            "AssociationVersion":"1"
         },
         {
            "Status":"Success",
            "DetailedStatus":"Success",
            "AssociationId":"c336d2ab-09de-44ba-8f6a-6136cEXAMPLE",
            "ExecutionId":"791b72e0-f0da-4021-8b35-f95dfEXAMPLE",
            "CreatedTime":1523984226.074,
            "AssociationVersion":"1"
         },
         {
            "Status":"Success",
            "DetailedStatus":"Success",
            "AssociationId":"c336d2ab-09de-44ba-8f6a-6136cEXAMPLE",
            "ExecutionId":"ecec60fa-6bb0-4d26-98c7-140308EXAMPLE",
            "CreatedTime":1523982404.013,
            "AssociationVersion":"1"
         }
      ]
   }
   ```

------
#### [ Windows ]

   ```
   {
      "AssociationExecutions":[
         {
            "Status":"Success",
            "DetailedStatus":"Success",
            "AssociationId":"c336d2ab-09de-44ba-8f6a-6136cEXAMPLE",
            "ExecutionId":"76a5a04f-caf6-490c-b448-92c02EXAMPLE",
            "CreatedTime":1523986028.219,
            "AssociationVersion":"1"
         },
         {
            "Status":"Success",
            "DetailedStatus":"Success",
            "AssociationId":"c336d2ab-09de-44ba-8f6a-6136cEXAMPLE",
            "ExecutionId":"791b72e0-f0da-4021-8b35-f95dfEXAMPLE",
            "CreatedTime":1523984226.074,
            "AssociationVersion":"1"
         },
         {
            "Status":"Success",
            "DetailedStatus":"Success",
            "AssociationId":"c336d2ab-09de-44ba-8f6a-6136cEXAMPLE",
            "ExecutionId":"ecec60fa-6bb0-4d26-98c7-140308EXAMPLE",
            "CreatedTime":1523982404.013,
            "AssociationVersion":"1"
         }
      ]
   }
   ```

------
#### [ PowerShell ]

   ```
   AssociationId         : c336d2ab-09de-44ba-8f6a-6136cEXAMPLE
   AssociationVersion    : 1
   CreatedTime           : 8/18/2019 2:00:50 AM
   DetailedStatus        : Success
   ExecutionId           : 76a5a04f-caf6-490c-b448-92c02EXAMPLE
   LastExecutionDate     : 1/1/0001 12:00:00 AM
   ResourceCountByStatus : {Success=1}
   Status                : Success
   
   AssociationId         : c336d2ab-09de-44ba-8f6a-6136cEXAMPLE
   AssociationVersion    : 1
   CreatedTime           : 8/11/2019 2:00:54 AM
   DetailedStatus        : Success
   ExecutionId           : 791b72e0-f0da-4021-8b35-f95dfEXAMPLE
   LastExecutionDate     : 1/1/0001 12:00:00 AM
   ResourceCountByStatus : {Success=1}
   Status                : Success
   
   AssociationId         : c336d2ab-09de-44ba-8f6a-6136cEXAMPLE
   AssociationVersion    : 1
   CreatedTime           : 8/4/2019 2:01:00 AM
   DetailedStatus        : Success
   ExecutionId           : ecec60fa-6bb0-4d26-98c7-140308EXAMPLE
   LastExecutionDate     : 1/1/0001 12:00:00 AM
   ResourceCountByStatus : {Success=1}
   Status                : Success
   ```

------

   하나 이상의 필터를 사용하려 결과를 제한할 수 있습니다. 다음 예는 특정 날짜 및 시간 이전에 실행된 모든 연결을 반환합니다.

------
#### [ Linux & macOS ]

   ```
   aws ssm describe-association-executions \
     --association-id ID \
     --filters Key=CreatedTime,Value="2018-04-10T19:15:38.372Z",Type=LESS_THAN
   ```

------
#### [ Windows ]

   ```
   aws ssm describe-association-executions ^
     --association-id ID ^
     --filters Key=CreatedTime,Value="2018-04-10T19:15:38.372Z",Type=LESS_THAN
   ```

------
#### [ PowerShell ]

   ```
   Get-SSMAssociationExecution `
     -AssociationId 14bea65d-5ccc-462d-a2f3-e99c8EXAMPLE `
     -Filter @{"Key"="CreatedTime";"Value"="2019-06-01T19:15:38.372Z";"Type"="LESS_THAN"}
   ```

------

   다음은 특정 날짜 및 시간 이후에 *성공적으로* 실행된 모든 연결을 반환합니다.

------
#### [ Linux & macOS ]

   ```
   aws ssm describe-association-executions \
     --association-id ID \
     --filters Key=CreatedTime,Value="2018-04-10T19:15:38.372Z",Type=GREATER_THAN Key=Status,Value=Success,Type=EQUAL
   ```

------
#### [ Windows ]

   ```
   aws ssm describe-association-executions ^
     --association-id ID ^
     --filters Key=CreatedTime,Value="2018-04-10T19:15:38.372Z",Type=GREATER_THAN Key=Status,Value=Success,Type=EQUAL
   ```

------
#### [ PowerShell ]

   ```
   Get-SSMAssociationExecution `
     -AssociationId 14bea65d-5ccc-462d-a2f3-e99c8EXAMPLE `
     -Filter @{
         "Key"="CreatedTime";
         "Value"="2019-06-01T19:15:38.372Z";
         "Type"="GREATER_THAN"
       },
       @{
         "Key"="Status";
         "Value"="Success";
         "Type"="EQUAL"
       }
   ```

------

1. 다음 명령을 실행하여 특정 실행이 실행된 모든 대상을 봅니다.

------
#### [ Linux & macOS ]

   ```
   aws ssm describe-association-execution-targets \
     --association-id ID \
     --execution-id ID
   ```

------
#### [ Windows ]

   ```
   aws ssm describe-association-execution-targets ^
     --association-id ID ^
     --execution-id ID
   ```

------
#### [ PowerShell ]

   ```
   Get-SSMAssociationExecutionTarget `
     -AssociationId 14bea65d-5ccc-462d-a2f3-e99c8EXAMPLE `
     -ExecutionId 76a5a04f-caf6-490c-b448-92c02EXAMPLE
   ```

------

   하나 이상의 필터를 사용하려 결과를 제한할 수 있습니다. 다음 예는 특정 연결 실행에 실패한 모든 대상에 대한 정보를 반환합니다.

------
#### [ Linux & macOS ]

   ```
   aws ssm describe-association-execution-targets \
     --association-id ID \
     --execution-id ID \
     --filters Key=Status,Value="Failed"
   ```

------
#### [ Windows ]

   ```
   aws ssm describe-association-execution-targets ^
     --association-id ID ^
     --execution-id ID ^
     --filters Key=Status,Value="Failed"
   ```

------
#### [ PowerShell ]

   ```
   Get-SSMAssociationExecutionTarget `
     -AssociationId 14bea65d-5ccc-462d-a2f3-e99c8EXAMPLE `
     -ExecutionId 76a5a04f-caf6-490c-b448-92c02EXAMPLE `
     -Filter @{
         "Key"="Status";
         "Value"="Failed"
       }
   ```

------

   다음 예는 연결 실행에 실패한 특정 관리형 노드에 대한 정보를 반환합니다.

------
#### [ Linux & macOS ]

   ```
   aws ssm describe-association-execution-targets \
     --association-id ID \
     --execution-id ID \
     --filters Key=Status,Value=Failed Key=ResourceId,Value="i-02573cafcfEXAMPLE" Key=ResourceType,Value=ManagedInstance
   ```

------
#### [ Windows ]

   ```
   aws ssm describe-association-execution-targets ^
     --association-id ID ^
     --execution-id ID ^
     --filters Key=Status,Value=Failed Key=ResourceId,Value="i-02573cafcfEXAMPLE" Key=ResourceType,Value=ManagedInstance
   ```

------
#### [ PowerShell ]

   ```
   Get-SSMAssociationExecutionTarget `
     -AssociationId 14bea65d-5ccc-462d-a2f3-e99c8EXAMPLE `
     -ExecutionId 76a5a04f-caf6-490c-b448-92c02EXAMPLE `
     -Filter @{
         "Key"="Status";
         "Value"="Success"
       },
       @{
         "Key"="ResourceId";
         "Value"="i-02573cafcfEXAMPLE"
       },
       @{
         "Key"="ResourceType";
         "Value"="ManagedInstance"
       }
   ```

------

1. 실행에 실패한 연결을 조사하는 경우 [StartAssociationsOnce](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_StartAssociationsOnce.html) API 작업을 사용하여 연결을 한 번만 즉시 실행할 수 있습니다. 연결 실행에 실패한 리소스를 변경한 후 다음 명령을 실행하여 연결을 한 번만 즉시 실행합니다.

------
#### [ Linux & macOS ]

   ```
   aws ssm start-associations-once \
     --association-id ID
   ```

------
#### [ Windows ]

   ```
   aws ssm start-associations-once ^
     --association-id ID
   ```

------
#### [ PowerShell ]

   ```
   Start-SSMAssociationsOnce `
     -AssociationId ID
   ```

------

# IAM을 사용한 연결 작업
<a name="systems-manager-state-manager-iam"></a>

State Manager의 도구인 AWS Systems Manager는 [대상](systems-manager-state-manager-targets-and-rate-controls.md#systems-manager-state-manager-targets-and-rate-controls-about-targets)을 사용하여 연결을 구성할 인스턴스를 선택합니다. 원래 연결은 문서 이름(`Name`)과 인스턴스 ID(`InstanceId`)를 지정하여 생성되었습니다. 그러면 문서와 인스턴스 또는 관리형 노드드 간 연결이 생성됩니다. 이러한 파라미터에 의해 식별되는 데 사용되는 연결입니다. 이러한 파라미터는 이제 더 이상 사용되지 않지만 여전히 지원됩니다. 리소스 `instance` 및 `managed-instance`가 `Name` 및 `InstanceId`와 함께 작업에 리소스로 추가되었습니다.

AWS Identity and Access Management(IAM) 정책 시행 동작은 지정된 리소스 유형에 따라 다릅니다. State Manager 작업을 위한 리소스는 전달된 요청에 따라서만 시행됩니다. State Manager는 사용자 계정에 있는 리소스의 속성에 대한 정밀 검사를 수행하지 않습니다. 요청 파라미터에 지정된 정책 리소스가 포함된 경우에만 요청이 정책 리소스에 대해 검증됩니다. 예를 들어 리소스 블록에 인스턴스를 지정하면 요청에서 `InstanceId` 파라미터를 사용하는 경우 정책이 시행됩니다. 계정의 각 리소스에 대한 `Targets` 파라미터는 해당 `InstanceId`에 대해 확인되지 않습니다.

다음은 혼란스러운 동작이 포함된 몇 가지 경우입니다.
+  [DescribeAssociation](https://docs.aws.amazon.com//systems-manager/latest/APIReference/API_DescribeActivations.html), [DeleteAssociation](https://docs.aws.amazon.com//systems-manager/latest/APIReference/API_DeleteAssociation.html) 및 [UpdateAssociation](https://docs.aws.amazon.com//systems-manager/latest/APIReference/API_UpdateAssociation.html)은 `instance`, `managed-instance` 및 `document` 리소스를 사용하여 더 이상 사용되지 않는 연결 참조 방법을 지정합니다. 여기에는 더 이상 사용되지 않는 `InstanceId` 파라미터로 생성된 모든 연결이 포함됩니다.
+ [CreateAssociation](https://docs.aws.amazon.com//systems-manager/latest/APIReference/API_CreateAssociation.html), [CreateAssociationBatch](https://docs.aws.amazon.com//systems-manager/latest/APIReference/API_CreateAssociationBatch.html) 및 [UpdateAssociation](https://docs.aws.amazon.com//systems-manager/latest/APIReference/API_UpdateAssociation.html)은 `instance` 및 `managed-instance` 리소스를 사용하여 더 이상 사용되지 않는 연결 참조 방법을 지정합니다. 여기에는 더 이상 사용되지 않는 `InstanceId` 파라미터로 생성된 모든 연결이 포함됩니다. `document` 리소스 유형은 더 이상 사용되지 않는 연결 참조 방법의 일부이며 연결의 실제 속성입니다. 즉, 문서 이름을 기반으로 `Create` 및 `Update` 작업 모두에 대해 `Allow` 또는 `Deny` 권한이 있는 IAM 정책을 구성할 수 있습니다.

Systems Manager에서 IAM 정책을 사용하는 방법에 대한 자세한 내용은 *Service Authorization Reference*의 [AWS Systems Manager의 I자격 증명 및 액세스 관리](security-iam.md) 또는 [Actions, resources, and condition keys for AWS Systems Manager](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awssystemsmanager.html)를 참조하세요.

# MOF 파일을 실행하는 연결 생성
<a name="systems-manager-state-manager-using-mof-file"></a>

MOF(Management Object Format) 파일을 실행하여 `AWS-ApplyDSCMofs` SSM 문서를 사용해 AWS Systems Manager의 도구인 State Manager에서 Windows Server 관리형 노드에 대해 원하는 상태를 적용할 수 있습니다. `AWS-ApplyDSCMofs` 문서에는 2가지 실행 모드가 있습니다. 첫 번째 모드에서는 관리형 노드가 지정된 MOF 파일에 정의된 원하는 상태인지 검사해 보고하도록 연결을 구성할 수 있습니다. 두 번째 모드에서는 MOF 파일에 정의된 리소스와 그 값을 기반으로 MOF 파일을 실행하고 노드의 구성을 변경할 수 있습니다. `AWS-ApplyDSCMofs` 문서를 사용하면 로컬 공유인 Amazon Simple Storage Service(Amazon S3) 또는 HTTPS 도메인을 사용하는 안전한 웹 사이트에서 MOF 구성 파일을 다운로드하고 실행할 수 있습니다.

State Manager는 각 연결 실행 중 개별 MOF 파일의 상태를 기록 및 보고합니다. State Manager는 또한 각 MOF 파일 실행의 출력도 규정 준수 이벤트로 보고하며, 이러한 내용은 [AWS Systems Manager 규정 준수](https://console.aws.amazon.com/systems-manager/compliance) 페이지에서 확인할 수 있습니다.

MOF 파일 실행은 PowerShell DSC(Windows PowerShell Desired State Configuration)에서 빌드됩니다. PowerShell DSC는 Windows 시스템 구성, 배포 및 관리에 사용되는 서술식 플랫폼입니다. PowerShell DSC를 사용해 관리자는 DSC 구성이라는 간단한 텍스트 문서의 형식으로 서버 구성 방식을 설명할 수 있습니다. PowerShell DSC 구성은 할 일이 명시된 특수화된 PowerShell 스크립트이지만 여기에는 할 일 수행 방식은 나와 있지 않습니다. 구성을 실행하면 MOF 파일이 생성됩니다. MOF 파일은 하나 이상의 서버에 적용해 해당 서버에 대해 원하는 구성을 얻을 수 있습니다. PowerShell DSC 리소스는 구성 적용의 실제 작업을 수행합니다. 자세한 내용은 [Windows PowerShell Desired State Configuration 개요](https://download.microsoft.com/download/4/3/1/43113F44-548B-4DEA-B471-0C2C8578FBF8/Quick_Reference_DSC_WS12R2.pdf)를 참조하세요.

**Topics**
+ [Amazon S3를 사용하여 아티팩트 저장](#systems-manager-state-manager-using-mof-file-S3-storage)
+ [MOF 파일에서 자격 증명 확인](#systems-manager-state-manager-using-mof-file-credentials)
+ [MOF 파일에서 토큰 사용](#systems-manager-state-manager-using-mof-file-tokens)
+ [MOF 파일을 실행하는 연결을 생성하기 위한 사전 조건](#systems-manager-state-manager-using-mof-file-prereqs)
+ [MOF 파일을 실행하는 연결 생성](#systems-manager-state-manager-using-mof-file-creating)
+ [MOF 파일을 실행하는 연결을 생성할 때 발생하는 문제 해결](#systems-manager-state-manager-using-mof-file-troubleshooting)
+ [DSC 리소스 규정 준수 세부 정보 보기](#systems-manager-state-manager-viewing-mof-file-compliance)

## Amazon S3를 사용하여 아티팩트 저장
<a name="systems-manager-state-manager-using-mof-file-S3-storage"></a>

Amazon S3를 사용하여 PowerShell 모듈, MOF 파일, 규정 준수 보고서 또는 상태 보고서를 저장하는 경우 AWS Systems Manager SSM Agent에서 사용하는 AWS Identity and Access Management(IAM) 역할에는 버킷에 대한 `GetObject` 및 `ListBucket` 권한이 있어야 합니다. 이러한 권한을 제공하지 않으면 시스템에서는 *액세스 거부됨* 오류가 반환됩니다. 다음은 Amazon S3에 아티팩트 저장에 대한 중요 정보입니다.
+ 버킷이 다른 AWS 계정에 있는 경우 해당 계정(또는 IAM 역할)에 `GetObject` 및 `ListBucket` 권한을 부여하는 버킷 리소스 정책을 생성합니다.
+ 사용자 정의 DSC 리소스를 사용하려는 경우 Amazon S3 버킷에서 이러한 리소스를 다운로드할 수 있습니다. 또한 PowerShell 갤러리에서 자동으로 설치할 수도 있습니다.
+ Amazon S3를 모듈 소스로 사용하는 경우 다음 대/소문자를 구분하는 *ModuleName*\$1*ModuleVersion*.zip 형식의 Zip 파일로 모듈을 업로드해야 합니다. 예: MyModule\$11.0.0.zip.
+ 모든 파일이 버킷 루트에 있어야 합니다. 폴더 구조는 지원되지 않습니다.

## MOF 파일에서 자격 증명 확인
<a name="systems-manager-state-manager-using-mof-file-credentials"></a>

자격 증명은 [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/) 또는 [AWS Systems Manager Parameter Store](systems-manager-parameter-store.md)를 사용하여 확인합니다. 그러면 자동 자격 증명 교체를 설정할 수 있습니다. 또한 덕분에 DSC가 MOF를 다시 배포하지 않고 서버에 자격 증명을 자동으로 전파할 수 있습니다.

구성에 AWS Secrets Manager 암호를 사용하려면 사용자 이름이 자격 증명을 포함한 암호의 SecretId 또는 SecretARN인 PSCredential 객체를 생성합니다. 암호에 대해 모든 값을 지정할 수 있습니다. 이 값은 무시됩니다. 다음은 한 예입니다.

```
Configuration MyConfig
{
   $ss = ConvertTo-SecureString -String 'a_string' -AsPlaintext -Force
   $credential = New-Object PSCredential('a_secret_or_ARN', $ss)

    Node localhost
    {
       File file_name
       {
           DestinationPath = 'C:\MyFile.txt'
           SourcePath = '\\FileServer\Share\MyFile.txt'
           Credential = $credential
       }
    }
}
```

구성 데이터의 PsAllowPlaintextPassword 설정을 사용하여 MOF를 컴파일합니다. 자격 증명에는 레이블만 포함되기 때문에 괜찮습니다.

Secrets Manager에서 노드가 IAM Managed 관리형 정책과 선택적으로 암호 리소스 정책(있는 경우)에 GetSecretValue 액세스를 가지고 있는지 확인합니다. DSC 작업을 수행하려면 암호가 다음과 같은 형식이어야 합니다.

```
{ 'Username': 'a_name', 'Password': 'a_password' }
```

암호에는 다른 속성(예: 교체에 사용되는 속성)이 있을 수 있지만 최소한 사용자 이름 및 암호 속성은 있어야 합니다.

두 개의 다른 사용자 및 암호가 있고 교체 AWS Lambda 함수가 이러한 사용자 및 암호 간에 전환하는 다중 사용자 교체 방법을 사용하는 것이 좋습니다. 이 방법을 사용하면 활성 계정을 여러 개 가질 수 있고, 교체 중 사용자를 잠글 위험이 사라집니다.

## MOF 파일에서 토큰 사용
<a name="systems-manager-state-manager-using-mof-file-tokens"></a>

토큰은 MOF 파일 컴파일 *후* 리소스 속성 값을 수정할 수 있는 기능을 제공합니다. 따라서 유사한 구성이 필요한 여러 서버에서 공통 MOF 파일을 다시 사용할 수 있습니다.

토큰 대체는 유형 `String`의 리소스 속성에 대해서만 작동합니다. 그러나 리소스에 중첩된 CIM 노드 속성이 있는 경우 해당 CIM 노드의 `String` 속성에서 토큰을 확인합니다. 숫자 또는 배열에는 토큰 대체를 사용할 수 없습니다.

예를 들어, xComputerManagement 리소스를 사용하고 DSC를 사용하여 컴퓨터의 이름을 바꾸려고 하는 시나리오에 대해 생각해 보세요. 일반적으로 해당 컴퓨터 전용 MOF 파일이 필요합니다. 그러나 토큰 지원을 통해 단일 MOF 파일을 생성해 모든 노드에 적용할 수 있습니다. MOF에 컴퓨터 이름을 하드 코딩하는 대신 `ComputerName` 속성에서 인스턴스 태그 유형 토큰을 사용할 수 있습니다. 이 값은 MOF 구문 분석 중 확인됩니다. 다음 예제를 참조하세요.

```
Configuration MyConfig
{
    xComputer Computer
    {
        ComputerName = '{tag:ComputerName}'
    }
}
```

그런 다음 Systems Manager 콘솔에서 관리형 노드에 태그를 설정하거나 Amazon EC2 콘솔에서 Amazon Elastic Compute Cloud(Amazon EC2) 태그를 설정합니다. 문서를 실행할 때 스크립트가 인스턴스 태그의 값에 대한 \$1tag:ComputerName\$1 토큰을 대체합니다.

또한 다음 예와 같이 여러 태그를 단일 속성으로 통합할 수도 있습니다.

```
Configuration MyConfig
{
    File MyFile
    {
        DestinationPath = '{env:TMP}\{tag:ComputerName}'
        Type = 'Directory'
    }
}
```

사용 가능한 다음과 같은 5가지 다른 유형의 토큰이 있습니다.
+ **tag**: Amazon EC2 또는 관리형 노드 태그입니다.
+ **tagb64**: tag와 동일하지만 시스템에서 값을 디코딩하는 데 base64를 사용합니다. 따라서 태그 값에 특수 문자를 사용할 수 있습니다.
+ **env**: 환경 변수를 확인합니다.
+ **ssm**: Parameter Store 값입니다. String 및 Secure String 유형만 지원됩니다.
+ **tagssm**: tag와 동일하지만 tag가 노드에 대해 설정되지 않은 경우 시스템에서는 이름이 동일한 Systems Manager 파라미터에서 값을 확인하려고 합니다. 이는 '기본 전역 값'이 필요하지만 단일 노드에서 이 값을 재정의하길 원하는 경우 유용합니다(예: 단일 시스템 배포).

다음은 `ssm` 토큰 유형을 사용하는 Parameter Store 예입니다.

```
File MyFile
{
    DestinationPath = "C:\ProgramData\ConnectionData.txt"
    Content = "{ssm:%servicePath%/ConnectionData}"
}
```

토큰은 MOF 파일을 일반적이고 재사용 가능하게 만들어 중복 코드를 줄이는 데 중요한 역할을 합니다. 서버별 MOF 파일을 피할 수 있는 경우 MOF 구축 서비스가 필요 없습니다. MOF 컴파일 시 빌드 서버에 다른 모듈 버전이 설치되므로 MOF 구축 서비스를 사용하면 비용이 증가하고, 프로비저닝 시간이 늘어나고, 그룹화된 노드 간에 구성 편차 가능성이 커집니다.

## MOF 파일을 실행하는 연결을 생성하기 위한 사전 조건
<a name="systems-manager-state-manager-using-mof-file-prereqs"></a>

MOF 파일을 실행하는 연결을 생성하기 전에 관리형 노드에 다음 사전 조건이 설치되어 있는지 확인합니다.
+ Windows PowerShell 버전 5.0 이상. 자세한 내용은 Microsoft.com에서 [Windows PowerShell System Requirements](https://docs.microsoft.com/en-us/powershell/scripting/install/windows-powershell-system-requirements?view=powershell-6)를 참조하세요.
+ [AWS Tools for Windows PowerShell](https://aws.amazon.com/powershell/) 버전 3.3.261.0 이상
+ SSM Agent 버전 2.2 이상

## MOF 파일을 실행하는 연결 생성
<a name="systems-manager-state-manager-using-mof-file-creating"></a>

**MOF 파일을 실행하는 연결을 생성하려면**

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

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

1. **State Manager**를 선택하고 **Create association(연결 생성)**을 선택합니다.

1. **Name(이름)** 필드에 이름을 지정합니다. 이는 선택 사항이며, 권장 사항은 아닙니다. 이 이름으로 연결 생성 시 연결의 용도를 파악할 수 있습니다. 공백은 이름에 사용할 수 없습니다.

1. [**문서(Document)**] 목록에서 **`AWS-ApplyDSCMofs`**를 선택합니다.

1. **파라미터** 섹션에서 필요한 선택적 입력 파라미터를 지정합니다.

   1. **Mofs To Apply(적용할 MOF)**: 연결 실행 시 실행할 MOF 파일을 하나 이상 지정합니다. 쉼표를 사용해 MOF 파일 목록을 구분합니다. Systems Manager는 MOF 파일 목록을 반복하면서 쉼표로 구분된 목록에 지정된 순서대로 실행합니다.
      + Amazon S3 버킷 이름입니다. 버킷 이름은 소문자여야 합니다. 다음 형식을 사용하여 이 정보를 지정합니다.

        ```
        s3:amzn-s3-demo-bucket:MOF_file_name.mof
        ```

        AWS 리전을 지정하려면 다음 형식을 사용합니다.

        ```
        s3:bucket_Region:amzn-s3-demo-bucket:MOF_file_name.mof
        ```
      + 안전한 웹 사이트 다음 형식을 사용하여 이 정보를 지정합니다.

        ```
        https://domain_name/MOF_file_name.mof
        ```

        다음 예를 참고하세요

        ```
        https://www.example.com/TestMOF.mof
        ```
      + 로컬 공유의 파일 시스템. 다음 형식을 사용하여 이 정보를 지정합니다.

        ```
        \server_name\shared_folder_name\MOF_file_name.mof
        ```

        다음 예를 참고하세요

        ```
        \StateManagerAssociationsBox\MOFs_folder\MyMof.mof
        ```

   1. [**서비스 경로(Service Path)**]: (옵션) 서비스 경로는 보고서 및 상태 정보를 작성하려는 Amazon S3 버킷 접두사이거나 Parameter Store 파라미터 기반 태그의 경로입니다. 파라미터 기반 태그를 확인할 때 시스템에서는 \$1ssm:%servicePath%/*parameter\$1name*을 사용하여 파라미터 이름에 servicePath 값을 삽입합니다. 예를 들어, 서비스 경로가 "WebServers/Production"인 경우 시스템에서는 이 파라미터를 WebServers/Production/*parameter\$1name*으로 확인합니다. 이는 동일한 계정에서 여러 환경을 실행하는 경우 유용합니다.

   1. [**보고서 버킷 이름(Report Bucket Name)**]: (옵션) 규정 준수 데이터를 쓰려는 Amazon S3 버킷의 이름을 입력합니다. 보고서는 이 버킷에 JSON 형식으로 저장됩니다.
**참고**  
버킷이 있는 리전으로 버킷 이름의 접두사를 지정할 수 있습니다. 예: us-west-2:MyMOFBucket. 특정 리전(us-east-1 제외)에서 Amazon S3 엔드포인트에 프록시를 사용하는 경우 리전으로 버킷 이름의 접두사를 지정합니다. 버킷 이름에 접두사가 지정되지 않은 경우 us-east-1 엔드포인트를 사용하여 자동으로 버킷 리전을 검색합니다.

   1. [**Mof 작업 모드(Mof Operation Mode)**]: **`AWS-ApplyDSCMofs`** 연결을 실행할 때 State Manager 동작을 선택합니다.
      + **적용**: 규정을 준수하지 않는 노드 구성을 수정합니다.
      + **ReportOnly**: 노드 구성은 수정하지 않지만 대신 모든 규정 준수 데이터를 로깅하고 규정을 준수하지 않는 노드를 보고합니다.

   1. [**상태 버킷 이름(Status Bucket Name)**]: (옵션) MOF 실행 상태 정보를 쓰려는 Amazon S3 버킷의 이름을 입력합니다. 이러한 상태 보고서는 노드의 최신 규정 준수 실행의 singleton 요약입니다. 즉, 이 보고서는 다음에 연결이 MOF 파일을 실행할 때 덮어씁니다.
**참고**  
버킷이 있는 리전으로 버킷 이름의 접두사를 지정할 수 있습니다. 예를 들면 `us-west-2:amzn-s3-demo-bucket`입니다. 특정 리전(us-east-1 제외)에서 Amazon S3 엔드포인트에 프록시를 사용하는 경우 리전으로 버킷 이름의 접두사를 지정합니다. 버킷 이름에 접두사가 지정되지 않은 경우 us-east-1 엔드포인트를 사용하여 자동으로 버킷 리전을 검색합니다.

   1. [**모듈 소스 버킷 이름(Module Source Bucket Name)**]: (옵션) PowerShell 모듈 파일이 포함된 Amazon S3 버킷의 이름을 입력합니다. [**없음(None)**]을 지정하는 경우 [**PS 갤러리 모듈 소스 허용(Allow PS Gallery Module Source)**] 옵션에 대해 [**True**]를 선택합니다.
**참고**  
버킷이 있는 리전으로 버킷 이름의 접두사를 지정할 수 있습니다. 예를 들면 `us-west-2:amzn-s3-demo-bucket`입니다. 특정 리전(us-east-1 제외)에서 Amazon S3 엔드포인트에 프록시를 사용하는 경우 리전으로 버킷 이름의 접두사를 지정합니다. 버킷 이름에 접두사가 지정되지 않은 경우 us-east-1 엔드포인트를 사용하여 자동으로 버킷 리전을 검색합니다.

   1. [**PS 갤러리 모듈 소스 허용(Allow PS Gallery Module Source)**]: (옵션) [https://www.powershellgallery.com/](https://www.powershellgallery.com/)에서 PowerShell 모듈을 다운로드하려면 **True**를 선택합니다. [**False**]를 선택하는 경우 이전 옵션인 **ModuleSourceBucketName**에 대해 소스를 지정합니다.

   1. **Proxy Uri(프록시 Uri)**: (선택 사항) 프록시 서버에서 MOF 파일을 다운로드하려면 이 옵션을 사용합니다.

   1. **Reboot Behavior(재부팅 동작)**: (선택 사항) MOF 파일을 실행하려면 재부팅해야 하는 경우 다음 재부팅 동작 중 하나를 지정합니다.
      + **AfterMof**: 모든 MOF 실행이 완료되면 노드를 재부팅합니다. 여러 MOF 실행 요청이 재부팅되더라도 시스템에서는 모든 MOF 실행이 재부팅을 완료할 때까지 대기합니다.
      + **즉시(Immediately)**: MOF 실행 시 요청할 때마다 노드를 재부팅합니다. 재부팅을 요청하는 MOF 파일을 여러 개 실행하는 경우 노드가 여러 번 재부팅됩니다.
      + **안 함(Never)**: MOF 실행이 명시적으로 재부팅을 요청하더라도 노드가 재부팅되지 않습니다.

   1. [**보고에 컴퓨터 이름 사용(Use Computer Name For Reporting)**]: (옵션) 규정 준수 정보를 보고할 때 컴퓨터의 이름을 사용하려면 이 옵션을 설정합니다. 기본값은 **false**로, 규정 준수 정보를 보고할 때 시스템에서 노드 ID를 사용함을 의미합니다.

   1. [**상세 정보 로깅 활성화(Enable Verbose Logging)**]: (옵션) 처음으로 MOF 파일을 배포하는 경우 상세 정보 로깅을 설정하는 것이 좋습니다.
**중요**  
허용되면 상세 정보 로깅은 표준 연결 실행 로깅보다 Amazon S3 버킷에 더 많은 데이터를 씁니다. 이로 인해 성능이 저하되고 Amazon S3에 대한 스토리지 비용이 높아질 수 있습니다. 스토리지 크기 문제를 완화하기 위해 Amazon S3 버킷에 대해 수명 주기 정책을 설정하는 것이 좋습니다. 자세한 내용은 *Amazon Simple Storage Service 사용 설명서*의 [S3 버킷에 대한 수명 주기 정책을 생성하려면 어떻게 해야 하나요?](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-lifecycle.html) 섹션을 참조하세요.

   1. [**Enable Debug Logging(디버그 로깅 설정)**]: (옵션) MOF 실패 문제를 해결하려면 디버그 로깅을 설정하는 것이 좋습니다. 또한 일반적인 사용에는 이 옵션을 비활성화하는 것이 좋습니다.
**중요**  
허용되면 디버그 로깅은 표준 연결 실행 로깅보다 Amazon S3 버킷에 더 많은 데이터를 씁니다. 이로 인해 성능이 저하되고 Amazon S3에 대한 스토리지 비용이 높아질 수 있습니다. 스토리지 크기 문제를 완화하기 위해 Amazon S3 버킷에 대해 수명 주기 정책을 설정하는 것이 좋습니다. 자세한 내용은 *Amazon Simple Storage Service 사용 설명서*의 [S3 버킷에 대한 수명 주기 정책을 생성하려면 어떻게 해야 하나요?](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-lifecycle.html) 섹션을 참조하세요.

   1. **규정 준수 유형**: (선택 사항) 규정 준수 정보를 보고할 때 사용할 규정 준수 유형을 지정합니다. 기본 규정 준수 유형은 **Custom:DSC**입니다. MOF 파일을 실행하는 연결을 여러 개 생성하는 경우 각 연결에 대해 규정 준수 유형을 다르게 지정해야 합니다. 그렇지 않은 경우 **Custom:DSC**를 사용하는 각각의 추가 연결이 기존 규정 준수 데이터를 덮어씁니다.

   1. **Pre Reboot Script(재부팅 전 스크립트)**: (선택 사항) 구성에 재부팅이 필요하다고 표시된 경우 실행할 스크립트를 지정합니다. 이 스크립트는 재부팅 전에 실행됩니다. 이 스크립트는 한 줄이어야 합니다. 세미콜론을 사용하여 추가 행을 구분합니다.

1. **대상** 섹션에서 **태그 지정** 또는 **수동으로 인스턴스 선택**을 선택합니다. 태그를 사용하여 리소스를 대상으로 지정하기로 한 경우 태그 키와 태그 값을 제공된 필드에 입력합니다. 태그 사용에 대한 자세한 내용은 [State Manager 연결에서의 대상 및 속도 제어 이해](systems-manager-state-manager-targets-and-rate-controls.md) 섹션을 참조하세요.

1. **일정 지정** 섹션에서 **On Schedule(일정이 있을 때)** 또는 **No schedule(일정이 없을 때)**을 선택합니다. **On Schedule(일정이 있을 때)**을 선택한 경우 제공된 버튼을 사용하여 연결에 대한 cron 또는 rate 일정을 생성합니다.

1. **고급 옵션** 섹션에서:
   + **규정 준수 심각도**에서 연결에 대한 심각도를 선택합니다. 규정 준수 보고는 여기서 지정한 심각도 수준과 함께 연결 상태가 준수인지 아니면 미준수인지를 나타냅니다. 자세한 내용은 [State Manager 연결 규정 준수 정보](compliance-about.md#compliance-about-association) 섹션을 참조하세요.

1. **속도 제어(Rate control)** 섹션에서 관리형 노드 플릿 간에 State Manager 연결을 실행하기 위한 옵션을 구성합니다. 이러한 옵션에 대한 자세한 내용은 [State Manager 연결에서의 대상 및 속도 제어 이해](systems-manager-state-manager-targets-and-rate-controls.md) 섹션을 참조하세요.

   **동시성** 섹션에서 옵션을 선택합니다.
   + **대상**을 선택하여 연결을 동시에 실행할 수 있는 대상 수(절대 개수)를 입력합니다.
   + **백분율**을 선택하여 연결을 동시에 실행할 수 있는 대상의 백분율을 입력합니다.

   **오류 임계값** 섹션에서 옵션을 선택합니다.
   + **오류**를 선택하여 State Manager에서 추가 대상에 대한 연결 실행을 중지하기 전에 허용되는 절대 오류 수를 입력합니다.
   + **백분율**을 선택하여 State Manager에서 추가 대상에 대한 연결 실행을 중지하기 전에 허용되는 오류 비율을 입력합니다.

1. (선택 사항) **출력 옵션**에서 명령 출력을 파일에 저장하려면 **S3 버킷에 쓰기 활성화** 옆의 상자를 선택합니다. 상자에 버킷 및 접두사(폴더) 이름을 입력합니다.
**참고**  
데이터를 S3 버킷에 쓰는 기능을 부여하는 S3 권한은 이 작업을 수행하는 IAM 사용자의 권한이 아닌 관리형 노드에 할당된 인스턴스 프로파일의 권한입니다. 자세한 내용은 [Systems Manager에 필요한 인스턴스 권한 구성](setup-instance-permissions.md)이나 [하이브리드 환경을 위한 IAM 서비스 역할 생성](hybrid-multicloud-service-role.md)을 참조하세요. 또한 지정된 S3 버킷이 다른 AWS 계정에 있는 경우 관리형 노드와 연결된 인스턴스 프로파일 또는 IAM 서비스 역할은 해당 버킷에 쓸 수 있는 권한이 있어야 합니다.

1. **연결 생성**을 선택합니다.

State Manager는 지정된 노드 또는 대상에 대해 연결을 생성하고 즉시 실행합니다. 최초 실행 후 연결은 정의한 일정에 따른 간격으로 다음 규칙에 따라 실행됩니다.
+ State Manager는 간격이 시작될 때 온라인 상태인 노드에서 연결을 실행하고 오프라인 노드를 건너뜁니다.
+ State Manager에서는 간격 중 구성된 모든 노드에 대해 연결을 실행하려고 합니다.
+ (예를 들어, 동시성 값이 한 번에 연결을 처리할 수 있는 노드 수를 제한했기 때문에) 간격 동안 연결이 실행되지 않은 경우 State Manager에서는 다음 간격 중 해당 연결을 실행하려고 합니다.
+ State Manager는 건너 뛴 모든 간격을 기록합니다. 이러한 기록은 **실행 내역** 탭에서 확인할 수 있습니다.

**참고**  
`AWS-ApplyDSCMofs`는 Systems Manager Command 문서입니다. 즉, AWS Systems Manager의 도구인 Run Command를 사용하여 이 문서를 실행할 수도 있습니다. 자세한 내용은 [AWS Systems Manager Run Command](run-command.md) 섹션을 참조하세요.

## MOF 파일을 실행하는 연결을 생성할 때 발생하는 문제 해결
<a name="systems-manager-state-manager-using-mof-file-troubleshooting"></a>

이 단원에는 MOF 파일을 실행하는 연결 생성과 관련된 문제를 해결하기 위한 정보가 포함되어 있습니다.

**향상된 로깅 설정**  
문제 해결의 첫 번째 단계로, 고급 로깅을 설정합니다. 보다 구체적으로 다음을 수행하세요.

1. Amazon S3 또는 Amazon CloudWatch Logs(CloudWatch)에 명령 출력을 쓰도록 연결이 구성되었는지 확인합니다.

1. **Enable Verbose Logging(상세 정보 로깅 활성화)** 파라미터를 True로 설정합니다.

1. **Enable Debug Logging(디버그 로깅 활성화)** 파라미터를 True로 설정합니다.

상세 정보 및 디버그 로깅이 설정되면 **Stdout** 출력 파일에 스크립트 실행에 대한 세부 정보가 포함됩니다. 이 출력 파일은 스크립트가 실패한 위치를 식별하는 데 유용할 수 있습니다. **Stderr** 출력 파일에는 스크립트 실행 중 발생한 오류가 포함됩니다.

**MOF 파일을 실행하는 연결을 생성할 때 발생하는 일반적인 문제**  
이 단원에는 MOF 파일을 실행하는 연결 생성 시 발생할 수 있는 일반적인 문제에 대한 정보와 이러한 문제 해결 단계가 나와 있습니다.

**내 MOF가 적용되지 않음**  
State Manager에서 노드에 연결을 적용하지 못하면 **Stderr** 출력 파일을 검토하는 것으로 시작합니다. 이 파일은 문제의 근본 원인을 파악하는 데 도움이 될 수 있습니다. 또한 다음을 확인합니다.
+ 노드에는 모든 MOF 관련 Amazon S3 버킷에 필요한 액세스 권한이 있습니다. 구체적으로 설명하면 다음과 같습니다.
  + **s3:GetObject 권한**: 프라이빗 Amazon S3 버킷의 MOF 파일과 Amazon S3 버킷의 사용자 정의 모듈에 필요합니다.
  + **s3:PutObject 권한**: Amazon S3 버킷에 규정 준수 보고서 및 규정 준수 상태를 쓰려면 필요합니다.
+ 태그를 사용하는 경우 노드에 필요한 IAM 정책이 있는지 확인합니다. 태그를 사용하려면 정책이 `ec2:DescribeInstances` 및 `ssm:ListTagsForResource` 작업을 허용하도록 하기 위해 인스턴스 IAM 역할이 필요합니다.
+ 노드에 예상한 태그가 있거나 SSM 파라미터가 할당되어 있는지 확인합니다.
+ 태그 또는 SSM 파라미터에 오탈자가 없는지 확인합니다.
+ MOF 파일 자체와 관련된 문제가 없는지 확인하기 위해 노드에서 MOF를 로컬로 적용해 보세요.

**내 MOF가 실패한 것 같지만 Systems Manager 실행에는 성공함**  
`AWS-ApplyDSCMofs` 문서가 성공적으로 실행되면 Systems Manager 실행 상태에 [**성공(Success)**]이라고 표시됩니다. 이 상태는 MOF 파일의 구성 요구 사항을 기준으로 한 노드의 규정 준수 상태를 반영하지 않습니다. 노드의 규정 준수 상태를 확인하려면 규정 준수 보고서를 확인합니다. JSON 보고서는 Amazon S3 보고서 버킷에서 볼 수 있습니다. 이 내용은 Run Command 및 State Manager 실행에 적용됩니다. 또한 State Manager의 경우 Systems Manager Compliance 페이지에서 규정 준수 세부 정보를 확인할 수 있습니다.

**Stderr 상태: 서비스 연결 시도 시 이름 확인 실패**  
이 오류는 스크립트가 원격 서비스에 연결할 수 없음을 나타냅니다. 이 스크립트는 Amazon S3에 연결하지 못할 가능성이 매우 큽니다. 대부분 이 문제는 스크립트가 문서 파라미터에 제공된 Amazon S3 버킷에 규정 준수 보고서 또는 규정 준수 상태를 쓰려고 할 때 발생합니다. 일반적으로 이 오류는 컴퓨팅 환경이 방화벽 또는 허용 목록을 포함한 투명한 프록시를 사용하는 경우 발생합니다. 이 문제를 해결하려면:
+ 모든 Amazon S3 버킷 파라미터에 대해 리전별 버킷 구문을 사용합니다. 예를 들어, **Mofs to Apply(적용할 Mof)** 파라미터의 형식은 다음과 같아야 합니다.

  s3:*bucket-region*:*amzn-s3-demo-bucket*:*mof-file-name*.mof.

  예: ` s3:us-west-2:amzn-s3-demo-bucket:my-mof.mof`

  보고서, 상태 및 모듈 소스 버킷 이름의 형식은 다음과 같아야 합니다.

  *bucket-region*:*amzn-s3-demo-bucket*. 단순 예시: `us-west-1:amzn-s3-demo-bucket;`
+ 리전별 구문으로 문제가 해결되지 않으면 대상 노드가 원하는 리전에서 Amazon S3에 액세스할 수 있는지 확인합니다. 이를 확인하려면 다음을 수행합니다.

  1. 적절한 Amazon S3 리전에서 Amazon S3의 엔드포인트 이름을 찾습니다. 자세한 내용은 **Amazon Web Services 일반 참조의 [Amazon S3 서비스 엔드포인트](https://docs.aws.amazon.com/general/latest/gr/s3.html#s3_region)를 참조하세요.

  1. 대상 노드에 로그온해 다음 ping 명령을 실행합니다.

     ```
     ping s3.s3-region.amazonaws.com
     ```

     ping에 실패하면 이는 Amazon S3이 다운되었거나, 방화벽/투명한 프록시가 Amazon S3 리전에 대한 액세스를 차단했거나, 노드가 인터넷에 액세스할 수 없는 것입니다.

## DSC 리소스 규정 준수 세부 정보 보기
<a name="systems-manager-state-manager-viewing-mof-file-compliance"></a>

Systems Manager는 `AWS-ApplyDSCMofs` 문서를 실행했을 때 지정한 Amazon S3 [**상태 버킷(Status Bucket)**]에서 DSC 리소스 실패에 대한 규정 준수 정보를 수집합니다. Amazon S3 버킷에서 DSC 리소스 실패에 대한 정보를 검색하는 데는 시간이 많이 걸릴 수 있습니다. 대신, Systems Manager [**Compliance**] 페이지에서 이 정보를 볼 수 있습니다.

**규정 준수 리소스 요약** 섹션에 실패한 리소스의 수가 표시됩니다. 다음 예에서 **ComplianceType**은 **Custom:DSC**이고 한 개의 리소스가 규정 미준수입니다.

**참고**  
Custom:DSC는 `AWS-ApplyDSCMofs` 문서에서 기본 [**ComplianceType**] 값입니다. 이 값은 사용자 지정 가능합니다.

![\[[Compliance] 페이지의 [Compliance 리소스 요약(Compliance resources summary)] 섹션에서 개수 보기.\]](http://docs.aws.amazon.com/ko_kr/systems-manager/latest/userguide/images/state-manager-mof-detailed-status-3.png)


[**리소스에 대한 세부 정보 개요(Details overview for resources)**] 섹션에는 규정 미준수 DSC 리소스가 있는 AWS 리소스에 대한 정보가 표시됩니다. 이 섹션에는 또한 MOF 이름, 스크립트 실행 단계, 및 세부 상태 정보를 볼 수 있는 **출력 보기** 링크(적용되는 경우)도 포함됩니다.

![\[MOF 실행 리소스 실패에 대한 규정 준수 세부 정보 보기\]](http://docs.aws.amazon.com/ko_kr/systems-manager/latest/userguide/images/state-manager-mof-detailed-status-1.png)


[**출력 보기(View output)**] 링크는 세부 상태의 마지막 4,000자를 표시합니다. Systems Manager는 첫 번째 요소로 예외를 시작한 다음 자세한 메시지를 다시 검사하고 4,000자 할당량에 도달할 때까지 가능한 한 많이 추가합니다. 이 프로세스는 예외가 발생되기 전에 출력된 긴 메시지(문제 해결을 위해 가장 관련성이 높은 메시지)를 표시합니다.

![\[MOF 리소스 규정 준수 문제에 대한 자세한 출력 보기\]](http://docs.aws.amazon.com/ko_kr/systems-manager/latest/userguide/images/state-manager-mof-detailed-status-2.png)


규정 준수 정보를 보는 방법에 대한 자세한 내용은 [AWS Systems Manager Compliance](systems-manager-compliance.md) 섹션을 참조하세요.

**규정 준수 보고에 영향을 미치는 상황**  
State Manager 연결이 실패한 경우에는 규정 준수 데이터가 보고되지 않습니다. 보다 구체적으로, MOF가 처리되지 못한다면 연결이 실패하기 때문에 Systems Manager가 어떤 규정 준수 항목도 보고하지 않습니다. 예를 들어, Systems Manager가 노드에 액세스할 권한이 없는 Amazon S3 버킷에서 MOF를 다운로드하려고 시도하면 연결이 실패하고 어떠한 규정 준수 데이터도 보고되지 않습니다.

두 번째 MOF의 리소스가 실패하면 Systems Manager가 규정 준수 데이터를 *보고합니다*. 예를 들어 MOF가 존재하지 않는 드라이브에서 파일을 생성하려고 하면 `AWS-ApplyDSCMofs` 문서가 완전히 처리될 수 있기 때문에(즉, 연결이 성공적으로 실행될 수 있기 때문에) Systems Manager가 규정 준수를 보고합니다.

# Ansible 플레이북을 실행하는 연결 생성
<a name="systems-manager-state-manager-ansible"></a>

`AWS-ApplyAnsiblePlaybooks` SSM 문서를 사용하여 Ansible 플레이북을 실행하는 State Manager 연결을 생성할 수 있습니다. State Manager는 AWS Systems Manager의 도구입니다. 이 문서는 플레이북 실행을 위해 다음과 같은 이점을 제공합니다.
+ 복잡한 플레이북 실행 지원
+ GitHub 및 Amazon Simple Storage Service(S3)에서 플레이북 다운로드 지원
+ 압축된 플레이북 구조 지원
+ 향상된 로깅
+ 플레이북이 번들로 제공될 때 실행할 플레이북 지정 가능

**참고**  
Systems Manager에는 Ansible 플레이북을 실행하는 State Manager 연결을 생성하는 데 사용할 수 있는 SSM 문서가 2개(`AWS-RunAnsiblePlaybook`, `AWS-ApplyAnsiblePlaybooks`)가 포함되어 있습니다. `AWS-RunAnsiblePlaybook` 문서는 더 이상 사용되지 않습니다. Systems Manager에서 레거시용으로 제공됩니다. `AWS-ApplyAnsiblePlaybooks` 문서에 여기서 설명한 기능 향상 부분이 있으므로 이 문서를 사용하는 것이 좋습니다.  
Ansible 플레이북을 실행하는 연결은 macOS에서 지원되지 않습니다.

**복잡한 플레이북 실행 지원**

`AWS-ApplyAnsiblePlaybooks` 문서는 지정된 주요 플레이북을 실행하기 전에 먼저 로컬 디렉터리에 전체 파일 구조를 복사하므로 번들로 제공되는 복잡한 플레이북을 지원합니다. 소스 플레이북은 zip 파일 또는 디렉터리 구조로 제공할 수 있습니다. Zip 파일이나 디렉터리는 GitHub 또는 Amazon S3에 저장할 수 있습니다.

**GitHub에서 플레이북 다운로드 지원**

`AWS-ApplyAnsiblePlaybooks` 문서는 `aws:downloadContent` 플러그인을 사용하여 플레이북 파일을 다운로드합니다. 파일은 GitHub에 한 개의 파일로 또는 결합된 플레이북 세트로 저장할 수 있습니다. GitHub에서 콘텐츠를 다운로드하려면 GitHub 리포지토리에 대한 정보를 JSON 형식으로 지정합니다. 다음 예를 참고하세요

```
{
   "owner":"TestUser",
   "repository":"GitHubTest",
   "path":"scripts/python/test-script",
   "getOptions":"branch:master",
   "tokenInfo":"{{ssm-secure:secure-string-token}}"
}
```

**Amazon S3에서 플레이북 다운로드 지원**

Amazon S3에서 Ansible 플레이북을 단일 .zip 파일 또는 디렉터리 구조로 저장하고 다운로드할 수도 있습니다. Amazon S3에서 콘텐츠를 다운로드하려면 파일에 대한 경로를 지정합니다. 다음은 두 가지 예입니다.

**예 1: 특정 플레이북 파일 다운로드**

```
{
   "path":"https://s3.amazonaws.com/amzn-s3-demo-bucket/playbook.yml"
}
```

**예 2: 디렉터리 콘텐츠 다운로드**

```
{
   "path":"https://s3.amazonaws.com/amzn-s3-demo-bucket/ansible/webservers/"
}
```

**중요**  
Amazon S3를 지정한 경우 관리형 노드의 AWS Identity and Access Management(IAM) 인스턴스 프로파일에 S3 버킷에 대한 권한이 포함되어야 합니다. 자세한 내용은 [Systems Manager에 필요한 인스턴스 권한 구성](setup-instance-permissions.md)을 참조하세요.

**압축된 플레이북 구조 지원**

`AWS-ApplyAnsiblePlaybooks` 문서를 사용하면 다운로드한 번들에서 압축된 .zip 파일을 실행할 수 있습니다. 문서는 압축된 파일이 다운로드한 파일에 .zip 형식으로 포함되어 있는지 점검합니다. .zip 파일이 있으면 문서는 자동으로 파일 압축을 푼 다음 지정된 Ansible 자동화를 실행합니다.

**향상된 로깅**

`AWS-ApplyAnsiblePlaybooks` 문서에는 다양한 로깅 수준을 지정하는 데 필요한 파라미터 옵션이 포함되어 있습니다. 세부 수준이 낮으면 -v를, 중간이면 -vvv를, 디버그 레벨 로깅 수준이면 -vvvv를 지정합니다. 이러한 옵션은 Ansible 세부 수준 옵션에 직접 매핑됩니다.

**플레이북이 번들로 제공될 때 실행할 플레이북 지정 가능**

`AWS-ApplyAnsiblePlaybooks` 문서에는 여러 개의 플레이북이 번들로 제공될 때 실행할 플레이북을 지정하는 데 필요한 파라미터가 포함되어 있습니다. 이 옵션을 사용하면 다양한 사용 사례를 지원하도록 플레이북을 유연하게 실행할 수 있습니다.

## 설치된 종속성 이해
<a name="systems-manager-state-manager-ansible-depedencies"></a>

**InstallDependencies** 파라미터에 **True**를 지정하면 Systems Manager는 노드에 다음 종속성이 설치되어 있는지 확인합니다.
+ **Ubuntu Server/Debian Server**: Apt-get(패키지 관리), Python 3, Ansible, Unzip
+ **Amazon Linux** 지원 버전: Ansible
+ **RHEL**: Python 3, Ansible, Unzip

이 종속성 중 하나 이상이 없다면 Systems Manager는 해당 종속성을 자동으로 설치합니다.

## Ansible 플레이북을 실행하는 연결 생성(콘솔)
<a name="systems-manager-state-manager-ansible-console"></a>

다음 절차에서는 Systems Manager 콘솔을 사용하여 `AWS-ApplyAnsiblePlaybooks` 문서로 Ansible 플레이북을 실행하는 State Manager 연결을 생성하는 방법을 설명합니다.

**Ansible 플레이북을 실행하는 연결을 생성하려면(콘솔)**

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

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

1. **State Manager**를 선택하고 **Create association(연결 생성)**을 선택합니다.

1. **이름**에 연결의 목적을 기억하는 데 도움이 되는 이름을 지정합니다.

1. [**문서(Document)**] 목록에서 **`AWS-ApplyAnsiblePlaybooks`**를 선택합니다.

1. **파라미터** 섹션의 **소스 유형**에서 **GitHub** 또는 **S3**를 선택합니다.

   **GitHub**

   **GitHub**를 선택하는 경우 다음 형식으로 리포지토리 정보를 입력합니다.

   ```
   {
      "owner":"user_name",
      "repository":"name",
      "path":"path_to_directory_or_playbook_to_download",
      "getOptions":"branch:branch_name",
      "tokenInfo":"{{(Optional)_token_information}}"
   }
   ```

   **S3**

   [**S3**]를 선택하는 경우 다음 형식으로 경로 정보를 입력합니다.

   ```
   {
      "path":"https://s3.amazonaws.com/path_to_directory_or_playbook_to_download"
   }
   ```

1. **종속성 설치**에서 옵션을 선택합니다.

1. (선택 사항) **Playbook File(플레이북 파일)**에 파일 이름을 입력합니다. Zip 파일에 플레이북이 포함된 경우 Zip 파일에 대한 상대 경로를 지정합니다.

1. (선택 사항) **추가 변수**에서 실행 시간 동안 State Manager에서 Ansible에 전송할 변수를 입력합니다.

1. (선택 사항) **확인**에서 옵션을 선택합니다.

1. (선택 사항) **상세 표시**에서 옵션을 선택합니다.

1. **대상**에서 옵션을 선택합니다. 태그 사용에 대한 자세한 내용은 [State Manager 연결에서의 대상 및 속도 제어 이해](systems-manager-state-manager-targets-and-rate-controls.md) 섹션을 참조하세요.

1. **일정 지정** 섹션에서 **On Schedule(일정이 있을 때)** 또는 **No schedule(일정이 없을 때)**을 선택합니다. **On Schedule(일정이 있을 때)**을 선택한 경우 제공된 버튼을 사용하여 연결에 대한 cron 또는 rate 일정을 생성합니다.

1. **고급 옵션** 섹션의 **규정 준수 심각도**에서 연결에 대한 심각도 수준을 선택합니다. 규정 준수 보고는 여기서 지정한 심각도 수준과 함께 연결 상태가 준수인지 아니면 미준수인지를 나타냅니다. 자세한 내용은 [State Manager 연결 규정 준수 정보](compliance-about.md#compliance-about-association) 섹션을 참조하세요.

1. **Rate control(속도 제어)** 섹션에서 관리형 노드 플릿 간에 State Manager 연결을 실행하기 위한 옵션을 구성합니다. 속도 제어 사용에 대한 자세한 내용은 [State Manager 연결에서의 대상 및 속도 제어 이해](systems-manager-state-manager-targets-and-rate-controls.md) 섹션을 참조하세요.

   **동시성** 섹션에서 옵션을 선택합니다.
   + **대상**을 선택하여 연결을 동시에 실행할 수 있는 대상 수(절대 개수)를 입력합니다.
   + **백분율**을 선택하여 연결을 동시에 실행할 수 있는 대상의 백분율을 입력합니다.

   **오류 임계값** 섹션에서 옵션을 선택합니다.
   + **오류**를 선택하여 State Manager에서 추가 대상에 대한 연결 실행을 중지하기 전에 허용되는 절대 오류 수를 입력합니다.
   + **백분율**을 선택하여 State Manager에서 추가 대상에 대한 연결 실행을 중지하기 전에 허용되는 오류 비율을 입력합니다.

1. (선택 사항) **출력 옵션**에서 명령 출력을 파일에 저장하려면 **S3 버킷에 쓰기 활성화** 옆의 상자를 선택합니다. 상자에 버킷 및 접두사(폴더) 이름을 입력합니다.
**참고**  
데이터를 S3 버킷에 쓰는 기능을 부여하는 S3 권한은 이 작업을 수행하는 IAM 사용자의 권한이 아닌 관리형 노드에 할당된 인스턴스 프로파일의 권한입니다. 자세한 내용은 [Systems Manager에 필요한 인스턴스 권한 구성](setup-instance-permissions.md)이나 [하이브리드 환경을 위한 IAM 서비스 역할 생성](hybrid-multicloud-service-role.md)을 참조하세요. 또한 지정된 S3 버킷이 다른 AWS 계정에 있는 경우 관리형 노드와 연결된 인스턴스 프로파일 또는 IAM 서비스 역할은 해당 버킷에 쓸 수 있는 권한이 있어야 합니다.

1. **연결 생성**을 선택합니다.

**참고**  
태그를 사용하여 하나 이상의 대상 노드에 대해 연결을 생성한 다음 노드에서 태그를 제거하면 해당 노드가 더 이상 연결을 실행하지 않습니다. 이러한 노드는 State Manager 문서에서 연결 해제됩니다.

## Ansible 플레이북을 실행하는 연결 생성(CLI)
<a name="systems-manager-state-manager-ansible-cli"></a>

다음 절차에서는 AWS Command Line Interface(AWS CLI)을 사용하여 `AWS-ApplyAnsiblePlaybooks` 문서로 Ansible 플레이북을 실행하는 State Manager 연결을 생성하는 방법을 설명합니다.

**Ansible 플레이북을 실행하는 연결을 생성하려면(CLI)**

1. 아직 하지 않은 경우 AWS Command Line Interface(AWS CLI)을 설치하고 구성합니다.

   자세한 내용은 [최신 버전의 AWS CLI 설치 또는 업데이트](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)를 참조하세요.

1. 다음 명령 중 하나를 실행하면 태그로 노드를 대상 지정하여 Ansible 플레이북을 실행하는 연결을 생성할 수 있습니다. 각 *example resource placeholder*를 사용자의 정보로 바꿉니다. Command (A)는 소스 유형으로 GitHub를 지정합니다. Command (B)는 소스 유형으로 Amazon S3를 지정합니다.

   **(A) GitHub 소스**

------
#### [ Linux & macOS ]

   ```
   aws ssm create-association --name "AWS-ApplyAnsiblePlaybooks" \
       --targets Key=tag:TagKey,Values=TagValue \
       --parameters '{"SourceType":["GitHub"],"SourceInfo":["{\"owner\":\"owner_name\", \"repository\": \"name\", \"getOptions\": \"branch:master\"}"],"InstallDependencies":["True_or_False"],"PlaybookFile":["file_name.yml"],"ExtraVariables":["key/value_pairs_separated_by_a_space"],"Check":["True_or_False"],"Verbose":["-v,-vv,-vvv, or -vvvv"],"TimeoutSeconds":["3600"]}' \
       --association-name "name" \
       --schedule-expression "cron_or_rate_expression"
   ```

------
#### [ Windows ]

   ```
   aws ssm create-association --name "AWS-ApplyAnsiblePlaybooks" ^
       --targets Key=tag:TagKey,Values=TagValue ^
       --parameters '{"SourceType":["GitHub"],"SourceInfo":["{\"owner\":\"owner_name\", \"repository\": \"name\", \"getOptions\": \"branch:master\"}"],"InstallDependencies":["True_or_False"],"PlaybookFile":["file_name.yml"],"ExtraVariables":["key/value_pairs_separated_by_a_space"],"Check":["True_or_False"],"Verbose":["-v,-vv,-vvv, or -vvvv"], "TimeoutSeconds":["3600"]}' ^
       --association-name "name" ^
       --schedule-expression "cron_or_rate_expression"
   ```

------

   다음 예를 참고하세요

   ```
   aws ssm create-association --name "AWS-ApplyAnsiblePlaybooks" \
       --targets "Key=tag:OS,Values=Linux" \
       --parameters '{"SourceType":["GitHub"],"SourceInfo":["{\"owner\":\"ansibleDocumentTest\", \"repository\": \"Ansible\", \"getOptions\": \"branch:master\"}"],"InstallDependencies":["True"],"PlaybookFile":["hello-world-playbook.yml"],"ExtraVariables":["SSM=True"],"Check":["False"],"Verbose":["-v"]}' \
       --association-name "AnsibleAssociation" \
       --schedule-expression "cron(0 2 ? * SUN *)"
   ```

   **(B) S3 소스**

------
#### [ Linux & macOS ]

   ```
   aws ssm create-association --name "AWS-ApplyAnsiblePlaybooks" \
       --targets Key=tag:TagKey,Values=TagValue \
       --parameters '{"SourceType":["S3"],"SourceInfo":["{\"path\":\"https://s3.amazonaws.com/path_to_Zip_file,_directory,_or_playbook_to_download\"}"],"InstallDependencies":["True_or_False"],"PlaybookFile":["file_name.yml"],"ExtraVariables":["key/value_pairs_separated_by_a_space"],"Check":["True_or_False"],"Verbose":["-v,-vv,-vvv, or -vvvv"]}' \
       --association-name "name" \
       --schedule-expression "cron_or_rate_expression"
   ```

------
#### [ Windows ]

   ```
   aws ssm create-association --name "AWS-ApplyAnsiblePlaybooks" ^
       --targets Key=tag:TagKey,Values=TagValue ^
       --parameters '{"SourceType":["S3"],"SourceInfo":["{\"path\":\"https://s3.amazonaws.com/path_to_Zip_file,_directory,_or_playbook_to_download\"}"],"InstallDependencies":["True_or_False"],"PlaybookFile":["file_name.yml"],"ExtraVariables":["key/value_pairs_separated_by_a_space"],"Check":["True_or_False"],"Verbose":["-v,-vv,-vvv, or -vvvv"]}' ^
       --association-name "name" ^
       --schedule-expression "cron_or_rate_expression"
   ```

------

   다음 예를 참고하세요

   ```
   aws ssm create-association --name "AWS-ApplyAnsiblePlaybooks" \
       --targets "Key=tag:OS,Values=Linux" \
       --parameters '{"SourceType":["S3"],"SourceInfo":["{\"path\":\"https://s3.amazonaws.com/amzn-s3-demo-bucket/playbook.yml\"}"],"InstallDependencies":["True"],"PlaybookFile":["playbook.yml"],"ExtraVariables":["SSM=True"],"Check":["False"],"Verbose":["-v"]}' \
       --association-name "AnsibleAssociation" \
       --schedule-expression "cron(0 2 ? * SUN *)"
   ```
**참고**  
State Manager 연결은 cron 및 rate 표현식 중 일부를 지원하지 않습니다. 연결에 대한 cron 및 rate 표현식을 생성하는 방법에 대한 자세한 내용은 [참조: Systems Manager용 Cron 및 Rate 표현식](reference-cron-and-rate-expressions.md) 섹션을 참조하세요.

   시스템은 해당 노드에 연결을 생성하고 그 상태를 즉시 적용하려고 합니다.

1. 다음 명령을 실행하여 방금 생성한 연결의 업데이트된 상태를 확인합니다.

   ```
   aws ssm describe-association --association-id "ID"
   ```

# Chef 레시피를 실행하는 연결 생성
<a name="systems-manager-state-manager-chef"></a>

Chef SSM 문서를 사용하여 AWS Systems Manager 레시피를 실행하는 State Manager 연결을 생성할 수 있습니다. State Manager는 `AWS-ApplyChefRecipes`의 도구입니다. `AWS-ApplyChefRecipes` SSM 문서를 사용하여 Linux 기반 Systems Manager 관리형 노드를 대상으로 지정할 수 있습니다. 이 문서는 Chef 레시피 실행을 위해 다음과 같은 이점을 제공합니다.
+ 여러 Chef 릴리스(Chef 11\$1Chef 18)를 지원합니다.
+ 대상 노드에 Chef 클라이언트 소프트웨어를 자동으로 설치합니다.
+ 선택적으로 대상 노드에 대해 [Systems Manager 규정 준수 점검](systems-manager-compliance.md)을 실행하고 규정 준수 점검 결과를 Amazon Simple Storage Service(Amazon S3) 버킷에 저장합니다.
+ 문서를 한 번 실행할 때 여러 쿡북과 레시피를 실행합니다.
+ 선택적으로 `why-run` 모드에서 레시피를 실행하여 변경하지 않고 대상 노드에서 변경되는 레시피를 표시합니다.
+ 선택적으로 사용자 지정 JSON 속성을 `chef-client` 실행에 적용합니다.
+ 사용자가 지정하는 위치에 저장된 소스 파일의 사용자 지정 JSON 속성을 선택적으로 적용합니다.

[Git](#state-manager-chef-git), [GitHub](#state-manager-chef-github), [HTTP](#state-manager-chef-http) 또는 [Amazon S3](#state-manager-chef-s3) 버킷을 `AWS-ApplyChefRecipes` 문서에서 사용자가 지정하는 Chef 쿡북 및 레시피의 다운로드 소스로 사용할 수 있습니다.

**참고**  
Chef 레시피를 실행하는 연결은 macOS에서 지원되지 않습니다.

## 시작하기
<a name="state-manager-chef-prereqs"></a>

`AWS-ApplyChefRecipes` 문서를 만들기 전에 Chef 쿡북과 쿡북 리포지토리를 준비합니다. 사용하려는 Chef 쿡북이 없는 경우 AWS에서 준비한 테스트 `HelloWorld` 쿡북을 사용하여 시작할 수 있습니다. `AWS-ApplyChefRecipes` 문서는 이미 기본적으로 이 쿡북을 가리키고 있습니다. 쿡북은 다음 디렉터리 구조와 유사하게 설정되어야 합니다. 다음 예에서 `jenkins` 및 `nginx`는 Chef 웹사이트의 [https://supermarket.chef.io/](https://supermarket.chef.io/)에서 사용할 수 있는 Chef 쿡북의 예입니다.

AWS에서 [https://supermarket.chef.io/](https://supermarket.chef.io/) 웹사이트의 쿡북을 공식적으로 지원할 수는 없지만 많은 사람들이 `AWS-ApplyChefRecipes` 문서를 사용합니다. 다음은 커뮤니티 쿡북을 테스트할 때 확인할 기준의 예입니다.
+ 쿡북은 대상으로 하는 Systems Manager 관리형 노드의 Linux 기반 운영 체제를 지원해야 합니다.
+ 쿡북은 사용자가 사용하는 Chef 클라이언트 버전(Chef 11\$1Chef 18)에 대해 유효해야 합니다.
+ 쿡북은 Chef Infra Client와 호환되며 Chef 서버가 필요하지 않습니다.

Systems Manager 문서(SSM 문서)가 실행될 때 실행 목록에 지정된 쿡북을 설치할 수 있도록 `Chef.io` 웹사이트에 연결할 수 있는지 확인합니다. 중첩된 `cookbooks` 폴더 사용은 지원되지만 필수는 아닙니다. 루트 수준 바로 아래에 쿡북을 저장할 수 있습니다.

```
<Top-level directory, or the top level of the archive file (ZIP or tgz or tar.gz)>
    └── cookbooks (optional level)
        ├── jenkins
        │   ├── metadata.rb
        │   └── recipes
        └── nginx
            ├── metadata.rb
            └── recipes
```

**중요**  
Chef 레시피를 실행하는 State Manager 연결을 생성하기 전에 **Chef 클라이언트 버전** 값을 `None`으로 설정하지 않는 한 문서 실행 시 Systems Manager 관리형 노드에 Chef 클라이언트 소프트웨어가 설치된다는 점에 유의하세요. 이 작업은 Chef의 설치 스크립트를 사용하여 사용자 대신 Chef 구성 요소를 설치합니다. `AWS-ApplyChefRecipes` 문서를 실행하기 전에 기업이 Chef 소프트웨어 사용에 적용되는 라이선스 조건을 포함하여 적용 가능한 법적 요구 사항을 준수할 수 있는지 확인합니다. 자세한 내용은 [Chef 웹사이트](https://www.chef.io/)를 참조하세요.

Systems Manager는 규정 준수 보고서를 Systems Manager 콘솔인 S3 버킷에 제공하거나, Systems Manager API 명령에 대한 응답에서 규정 준수 결과를 사용하도록 만들 수 있습니다. Systems Manager 규정 준수 보고서를 실행하려면 Systems Manager 관리형 노드에 연결된 인스턴스 프로파일에 S3 버킷에 대한 쓰기 권한이 있어야 합니다. 인스턴스 프로파일에는 Systems Manager `PutComplianceItem` API를 사용할 권한이 있어야 합니다. Systems Manager 규정 준수에 대한 자세한 내용은 [AWS Systems Manager Compliance](systems-manager-compliance.md) 섹션을 참조하세요.

### 실행 문서 로깅
<a name="state-manager-chef-logging"></a>

State Manager 연결을 사용하여 Systems Manager 문서(SSM 문서)를 실행할 때 문서 실행의 출력을 선택하도록 연결을 구성할 수 있으며 출력을 Amazon S3 또는 Amazon CloudWatch Logs(CloudWatch Logs)로 전송할 수 있습니다. 연결 실행이 완료될 때 문제 해결을 쉽게 하려면 연결이 Amazon S3 버킷 또는 CloudWatch Logs에 명령 출력을 쓰도록 구성되어 있는지 확인합니다. 자세한 내용은 [Systems Manager에서 연결 작업](state-manager-associations.md) 섹션을 참조하세요.

## 레시피 실행 시 대상에 JSON 속성 적용
<a name="apply-custom-json-attributes"></a>

연결 실행 중에 대상 노드에 적용할 Chef 클라이언트의 JSON 속성을 지정할 수 있습니다. 연결을 설정할 때 원시 JSON을 제공하거나 Amazon S3에 저장된 JSON 파일의 경로를 제공할 수 있습니다.

레시피가 실행되는 방식을 사용자 정의하려는 경우 레시피 자체를 수정할 필요 없이 JSON 속성을 사용합니다. 예를 들면 다음과 같습니다.
+ **소수의 속성 재정의**

  사용자 지정 JSON을 사용하면 사소한 차이를 수용하기 위해 레시피를 여러 버전으로 유지하지 않아도 됩니다.
+ **변수 값 제공**

  사용자 지정 JSON을 사용하여, 실행할 때마다 변경될 수 있는 값을 지정합니다. 예를 들어 Chef 쿡북이 결제를 허용하는 타사 애플리케이션을 구성하는 경우 사용자 지정 JSON을 사용하여 결제 엔드포인트 URL을 지정할 수 있습니다.

**원시 JSON에 속성 지정**

다음은 Chef 레시피의 사용자 지정 JSON 속성 지정에 사용할 수 있는 형식의 예제입니다.

```
{"filepath":"/tmp/example.txt", "content":"Hello, World!"}
```

**JSON 파일 경로 지정**  
다음은 Chef 레시피의 사용자 지정 JSON 속성 경로 지정에 사용할 수 있는 형식의 예제입니다.

```
{"sourceType":"s3", "sourceInfo":"someS3URL1"}, {"sourceType":"s3", "sourceInfo":"someS3URL2"}
```

## 쿡북 소스로 Git 사용
<a name="state-manager-chef-git"></a>

`AWS-ApplyChefRecipes` 문서는[aws:downloadContent](documents-command-ssm-plugin-reference.md#aws-downloadContent) 플러그인을 사용하여 Chef 쿡북을 다운로드합니다. Git에서 콘텐츠를 다운로드하려면 Git 리포지토리에 대한 정보를 다음 예제와 같이 JSON 형식으로 지정합니다. 각 *example-resource-placeholder*를 자신의 정보로 바꿉니다.

```
{
   "repository":"GitCookbookRepository",
   "privateSSHKey":"{{ssm-secure:ssh-key-secure-string-parameter}}",
   "skipHostKeyChecking":"false",
   "getOptions":"branch:refs/head/main",
   "username":"{{ssm-secure:username-secure-string-parameter}}",
   "password":"{{ssm-secure:password-secure-string-parameter}}"
}
```

## GitHub을 쿡북 소스로 사용
<a name="state-manager-chef-github"></a>

`AWS-ApplyChefRecipes` 문서는 [aws:downloadContent](documents-command-ssm-plugin-reference.md#aws-downloadContent) 플러그인을 사용하여 쿡북을 다운로드합니다. GitHub에서 콘텐츠를 다운로드하려면 GitHub 리포지토리에 대한 정보를 다음 예제와 같이 JSON 형식으로 지정합니다. 각 *example-resource-placeholder*를 자신의 정보로 바꿉니다.

```
{
   "owner":"TestUser",
   "repository":"GitHubCookbookRepository",
   "path":"cookbooks/HelloWorld",
   "getOptions":"branch:refs/head/main",
   "tokenInfo":"{{ssm-secure:token-secure-string-parameter}}"
}
```

## 쿡북 소스로 HTTP 사용
<a name="state-manager-chef-http"></a>

Chef 쿡북을 사용자 지정 HTTP 위치에 단일 `.zip` 또는 `tar.gz` 파일이나 디렉터리 구조로 저장할 수 있습니다. HTTP에서 콘텐츠를 다운로드하려면 파일 또는 디렉터리 경로를 다음 예제와 같이 JSON 형식으로 지정합니다. 각 *example-resource-placeholder*를 자신의 정보로 바꿉니다.

```
{
   "url":"https://my.website.com/chef-cookbooks/HelloWorld.zip",
   "allowInsecureDownload":"false",
   "authMethod":"Basic",
   "username":"{{ssm-secure:username-secure-string-parameter}}",
   "password":"{{ssm-secure:password-secure-string-parameter}}"
}
```

## Amazon S3를 쿡북 소스로 사용
<a name="state-manager-chef-s3"></a>

Amazon S3에서 Chef 쿡북을 단일 `.zip` 또는 `tar.gz` 파일이나 디렉터리 구조로 저장하고 다운로드할 수도 있습니다. Amazon S3에서 콘텐츠를 다운로드하려면 파일 경로를 다음 예제와 같이 JSON 형식으로 지정합니다. 각 *example-resource-placeholder*를 자신의 정보로 바꿉니다.

**예제 1: 특정 쿡북 다운로드**

```
{
   "path":"https://s3.amazonaws.com/chef-cookbooks/HelloWorld.zip"
}
```

**예 2: 디렉터리 콘텐츠 다운로드**

```
{
   "path":"https://s3.amazonaws.com/chef-cookbooks-test/HelloWorld"
}
```

**중요**  
Amazon S3를 지정하면 `AmazonS3ReadOnlyAccess` 정책을 사용하여 관리형 노드에 있는 AWS Identity and Access Management(IAM) 노드 프로파일을 구성해야 합니다. 자세한 내용은 [Systems Manager에 필요한 인스턴스 권한 구성](setup-instance-permissions.md)을 참조하세요.

## Chef 레시피를 실행하는 연결 생성(콘솔)
<a name="state-manager-chef-console"></a>

다음 절차에서는 Systems Manager 콘솔을 사용하여 `AWS-ApplyChefRecipes` 문서로 Chef 쿡북을 실행하는 State Manager 연결을 생성하는 방법을 설명합니다.

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

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

1. **State Manager**를 선택하고 **Create association(연결 생성)**을 선택합니다.

1. **이름**에 연결의 목적을 기억하는 데 도움이 되는 이름을 입력합니다.

1. [**문서(Document)**] 목록에서 **`AWS-ApplyChefRecipes`**를 선택합니다.

1. **파라미터**에서 **소수 유형**은 **Git**, **GitHub**, **HTTP** 또는 **S3** 중에서 선택합니다.

1. **소스 정보**에는 6단계에서 선택한 **소스 유형**에 적합한 형식을 사용하여 쿡북 소스 정보를 입력합니다. 자세한 내용은 다음 항목을 참조하세요.
   + [쿡북 소스로 Git 사용](#state-manager-chef-git)
   + [GitHub을 쿡북 소스로 사용](#state-manager-chef-github)
   + [쿡북 소스로 HTTP 사용](#state-manager-chef-http)
   + [Amazon S3를 쿡북 소스로 사용](#state-manager-chef-s3)

1. **Run list(실행 목록)**에서 다음과 같이 각 레시피를 쉼표로 구분하여 실행할 레시피를 나열합니다. 쉼표 뒤에 공백을 넣지 않습니다. 각 *example-resource-placeholder*를 자신의 정보로 바꿉니다.

   ```
   recipe[cookbook-name1::recipe-name],recipe[cookbook-name2::recipe-name]
   ```

1. (선택 사항) Chef 클라이언트를 통해 대상 노드에 전달하려는 사용자 지정 JSON 속성을 지정합니다.

   1. **JSON 속성 콘텐츠**에서 Chef 클라이언트를 통해 대상 노드에 전달하려는 모든 속성을 추가합니다.

   1. **JSON 속성 소스**에서 Chef 클라이언트를 통해 대상 노드에 전달하려는 모든 속성의 경로를 추가합니다.

   자세한 내용은 [레시피 실행 시 대상에 JSON 속성 적용](#apply-custom-json-attributes) 섹션을 참조하세요.

1. **Chef 클라이언트 버전**에서 Chef 버전을 지정합니다. 유효한 값은 `11`\$1`18` 또는 `None`입니다. `11`부터 `18`까지의 숫자를 지정하면 Systems Manager에서는 대상 노드에 올바른 Chef 클라이언트 버전을 설치합니다. `None`을 지정한 경우 Systems Manager는 문서의 레시피를 실행하기 전에 대상 노드에 Chef 클라이언트를 설치하지 않습니다.

1. (옵션) **Chef 클라이언트 인수**에서 사용 중인 Chef 버전에 대해 지원되는 추가 인수를 지정합니다. 지원되는 인수에 대한 자세한 내용을 보려면 Chef 클라이언트를 실행하는 노드에서 `chef-client -h`를 실행하세요.

1. (옵션) **Why-run**을 설정하여 대상 노드를 실제로 변경하지 않고 레시피를 실행할 경우 대상 노드에 적용되는 변경 사항을 표시합니다.

1. [**규정 준수 심각도(Compliance severity)**]에서 보고할 Systems Manager Compliance 결과의 심각도를 선택합니다. 규정 준수 보고는 지정한 심각도 수준과 함께 연결 상태가 규정을 준수하는지 여부를 나타냅니다. Compliance 보고서는 [**Compliance 보고서 버킷(Compliance report bucket)**] 파라미터 값(14단계)으로 지정하는 S3 버킷에 저장됩니다. Compliance에 대한 자세한 내용은 이 가이드의 [규정 준수에 대해 자세히 알아보기](compliance-about.md) 섹션을 참조하세요.

   규정 준수 검사는 Chef 레시피 및 노드 리소스에 지정된 구성 간의 드리프트를 측정합니다. 유효한 값은 `Critical`, `High`, `Medium`, `Low`, `Informational`, `Unspecified` 또는 `None`입니다. 규정 준수 보고를 건너뛰려면 `None`을 선택합니다.

1. **규정 준수 유형**에서 결과를 보고할 규정 준수 유형을 지정합니다. 유효한 값은 State Manager 연결의 경우 `Association` 또는 `Custom:`*custom\$1type*입니다. 기본값은 `Custom:Chef`입니다.

1. **Compliance 보고서 버킷**의 경우 리소스 구성 및 Compliance 결과를 포함하여 이 문서에서 수행한 모든 Chef에 대한 정보를 저장할 S3 버킷의 이름을 입력합니다.

1. **Rate control(속도 제어)**에서 관리형 노드 플릿 간에 State Manager 연결을 실행하기 위한 옵션을 구성합니다. 속도 제어 사용에 대한 자세한 내용은 [State Manager 연결에서의 대상 및 속도 제어 이해](systems-manager-state-manager-targets-and-rate-controls.md) 섹션을 참조하세요.

   **동시성**에서 옵션을 선택합니다.
   + **대상**을 선택하여 연결을 동시에 실행할 수 있는 대상 수(절대 개수)를 입력합니다.
   + **백분율**을 선택하여 연결을 동시에 실행할 수 있는 대상의 백분율을 입력합니다.

   **Error threshold(오류 임계값)**에서 옵션을 선택합니다.
   + **오류**를 선택하여 State Manager에서 추가 대상에 대한 연결 실행을 중지하기 전에 허용되는 절대 오류 수를 입력합니다.
   + **백분율**을 선택하여 State Manager에서 추가 대상에 대한 연결 실행을 중지하기 전에 허용되는 오류 비율을 입력합니다.

1. (선택 사항) **출력 옵션**에서 명령 출력을 파일에 저장하려면 **S3 버킷에 쓰기 활성화** 옆의 상자를 선택합니다. 상자에 버킷 및 접두사(폴더) 이름을 입력합니다.
**참고**  
데이터를 S3 버킷에 쓰는 기능을 부여하는 S3 권한은 이 작업을 수행하는 IAM 사용자의 권한이 아닌 관리형 노드에 할당된 인스턴스 프로파일의 권한입니다. 자세한 내용은 [Systems Manager에 필요한 인스턴스 권한 구성](setup-instance-permissions.md)이나 [하이브리드 환경을 위한 IAM 서비스 역할 생성](hybrid-multicloud-service-role.md)을 참조하세요. 또한 지정된 S3 버킷이 다른 AWS 계정에 있는 경우 관리형 노드와 연결된 인스턴스 프로파일 또는 IAM 서비스 역할은 해당 버킷에 쓸 수 있는 권한이 있어야 합니다.

1. **연결 생성**을 선택합니다.

## Chef 레시피를 실행하는 연결 생성(CLI)
<a name="state-manager-chef-cli"></a>

다음 절차에서는 AWS Command Line Interface(AWS CLI)를 사용하여 `AWS-ApplyChefRecipes` 문서로 Chef 쿡북을 실행하는 State Manager 연결을 생성하는 방법을 설명합니다.

1. 아직 하지 않은 경우 AWS Command Line Interface(AWS CLI)을 설치하고 구성합니다.

   자세한 내용은 [최신 버전의 AWS CLI 설치 또는 업데이트](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)를 참조하세요.

1. 다음과 같은 명령 중 하나를 실행하여 지정된 태그가 있는 대상 노드에서 Chef 쿡북을 실행하는 연결을 생성합니다. 쿡북 소스 유형 및 운영 체제에 적합한 명령을 사용합니다. 각 *example-resource-placeholder*를 자신의 정보로 바꿉니다.

   1. **Git 소스**

------
#### [ Linux & macOS ]

      ```
      aws ssm create-association --name "AWS-ApplyChefRecipes" \
          --targets Key=tag:TagKey,Values=TagValue \
          --parameters '{"SourceType":["Git"],"SourceInfo":["{\"repository\":\"repository-name\", \"getOptions\": \"branch:branch-name\", \"username\": \"{{ ssm-secure:username-secure-string-parameter }}\", \"password\": \"{{ ssm-secure:password-secure-string-parameter }}\"}"], "RunList":["{\"recipe[cookbook-name-1::recipe-name]\", \"recipe[cookbook-name-2::recipe-name]\"}"], "JsonAttributesContent": ["{custom-json-content}"], "JsonAttributesSources": "{\"sourceType\":\"s3\", \"sourceInfo\":\"s3-bucket-endpoint-1\"}, {\"sourceType\":\"s3\", \"sourceInfo\":\"s3-bucket-endpoint-2\"}", "ChefClientVersion": ["version-number"], "ChefClientArguments":["{chef-client-arguments}"], "WhyRun": boolean, "ComplianceSeverity": ["severity-value"], "ComplianceType": ["Custom:Chef"], "ComplianceReportBucket": ["s3-bucket-name"]}' \
          --association-name "name" \
          --schedule-expression "cron-or-rate-expression"
      ```

------
#### [ Windows ]

      ```
      aws ssm create-association --name "AWS-ApplyChefRecipes" ^
          --targets Key=tag:TagKey,Values=TagValue ^
          --parameters '{"SourceType":["Git"],"SourceInfo":["{\"repository\":\"repository-name\", \"getOptions\": \"branch:branch-name\", \"username\": \"{{ ssm-secure:username-secure-string-parameter }}\", \"password\": \"{{ ssm-secure:password-secure-string-parameter }}\"}"], "RunList":["{\"recipe[cookbook-name-1::recipe-name]\", \"recipe[cookbook-name-2::recipe-name]\"}"], "JsonAttributesContent": ["{custom-json}"], "JsonAttributesSources": "{\"sourceType\":\"s3\", \"sourceInfo\":\"s3-bucket-endpoint-1\"}, {\"sourceType\":\"s3\", \"sourceInfo\":\"s3-bucket-endpoint-2\"}", "ChefClientVersion": ["version-number"], "ChefClientArguments":["{chef-client-arguments}"], "WhyRun": boolean, "ComplianceSeverity": ["severity-value"], "ComplianceType": ["Custom:Chef"], "ComplianceReportBucket": ["s3-bucket-name"]}' ^
          --association-name "name" ^
          --schedule-expression "cron-or-rate-expression"
      ```

------

   1. **GitHub 소스**

------
#### [ Linux & macOS ]

      ```
      aws ssm create-association --name "AWS-ApplyChefRecipes" \
          --targets Key=tag:TagKey,Values=TagValue \
          --parameters '{"SourceType":["GitHub"],"SourceInfo":["{\"owner\":\"owner-name\", \"repository\": \"name\", \"path\": \"path-to-directory-or-cookbook-to-download\", \"getOptions\": \"branch:branch-name\"}"], "RunList":["{\"recipe[cookbook-name-1::recipe-name]\", \"recipe[cookbook-name-2::recipe-name]\"}"], "JsonAttributesContent": ["{custom-json}"], "ChefClientVersion": ["version-number"], "ChefClientArguments":["{chef-client-arguments}"], "WhyRun": boolean, "ComplianceSeverity": ["severity-value"], "ComplianceType": ["Custom:Chef"], "ComplianceReportBucket": ["s3-bucket-name"]}' \
          --association-name "name" \
          --schedule-expression "cron-or-rate-expression"
      ```

------
#### [ Windows ]

      ```
      aws ssm create-association --name "AWS-ApplyChefRecipes" ^
          --targets Key=tag:TagKey,Values=TagValue \
          --parameters '{"SourceType":["GitHub"],"SourceInfo":["{\"owner\":\"owner-name\", \"repository\": \"name\", \"path\": \"path-to-directory-or-cookbook-to-download\", \"getOptions\": \"branch:branch-name\"}"], "RunList":["{\"recipe[cookbook-name-1::recipe-name]\", \"recipe[cookbook-name-2::recipe-name]\"}"], "JsonAttributesContent": ["{custom-json}"], "ChefClientVersion": ["version-number"], "ChefClientArguments":["{chef-client-arguments}"], "WhyRun": boolean, "ComplianceSeverity": ["severity-value"], "ComplianceType": ["Custom:Chef"], "ComplianceReportBucket": ["s3-bucket-name"]}' ^
          --association-name "name" ^
          --schedule-expression "cron-or-rate-expression"
      ```

------

      다음 예를 참고하세요

------
#### [ Linux & macOS ]

      ```
      aws ssm create-association --name "AWS-ApplyChefRecipes" \
          --targets Key=tag:OS,Values=Linux \
          --parameters '{"SourceType":["GitHub"],"SourceInfo":["{\"owner\":\"ChefRecipeTest\", \"repository\": \"ChefCookbooks\", \"path\": \"cookbooks/HelloWorld\", \"getOptions\": \"branch:master\"}"], "RunList":["{\"recipe[HelloWorld::HelloWorldRecipe]\", \"recipe[HelloWorld::InstallApp]\"}"], "JsonAttributesContent": ["{\"state\": \"visible\",\"colors\": {\"foreground\": \"light-blue\",\"background\": \"dark-gray\"}}"], "ChefClientVersion": ["14"], "ChefClientArguments":["{--fips}"], "WhyRun": false, "ComplianceSeverity": ["Medium"], "ComplianceType": ["Custom:Chef"], "ComplianceReportBucket": ["ChefComplianceResultsBucket"]}' \
          --association-name "MyChefAssociation" \
          --schedule-expression "cron(0 2 ? * SUN *)"
      ```

------
#### [ Windows ]

      ```
      aws ssm create-association --name "AWS-ApplyChefRecipes" ^
          --targets Key=tag:OS,Values=Linux ^
          --parameters '{"SourceType":["GitHub"],"SourceInfo":["{\"owner\":\"ChefRecipeTest\", \"repository\": \"ChefCookbooks\", \"path\": \"cookbooks/HelloWorld\", \"getOptions\": \"branch:master\"}"], "RunList":["{\"recipe[HelloWorld::HelloWorldRecipe]\", \"recipe[HelloWorld::InstallApp]\"}"], "JsonAttributesContent": ["{\"state\": \"visible\",\"colors\": {\"foreground\": \"light-blue\",\"background\": \"dark-gray\"}}"], "ChefClientVersion": ["14"], "ChefClientArguments":["{--fips}"], "WhyRun": false, "ComplianceSeverity": ["Medium"], "ComplianceType": ["Custom:Chef"], "ComplianceReportBucket": ["ChefComplianceResultsBucket"]}' ^
          --association-name "MyChefAssociation" ^
          --schedule-expression "cron(0 2 ? * SUN *)"
      ```

------

   1. **HTTP 소스**

------
#### [ Linux & macOS ]

      ```
      aws ssm create-association --name "AWS-ApplyChefRecipes" \
          --targets Key=tag:TagKey,Values=TagValue \
          --parameters '{"SourceType":["HTTP"],"SourceInfo":["{\"url\":\"url-to-zip-file|directory|cookbook\", \"authMethod\": \"auth-method\", \"username\": \"{{ ssm-secure:username-secure-string-parameter }}\", \"password\": \"{{ ssm-secure:password-secure-string-parameter }}\"}"], "RunList":["{\"recipe[cookbook-name-1::recipe-name]\", \"recipe[cookbook-name-2::recipe-name]\"}"], "JsonAttributesContent": ["{custom-json-content}"], "JsonAttributesSources": "{\"sourceType\":\"s3\", \"sourceInfo\":\"s3-bucket-endpoint-1\"}, {\"sourceType\":\"s3\", \"sourceInfo\":\"s3-bucket-endpoint-2\"}", "ChefClientVersion": ["version-number"], "ChefClientArguments":["{chef-client-arguments}"], "WhyRun": boolean, "ComplianceSeverity": ["severity-value"], "ComplianceType": ["Custom:Chef"], "ComplianceReportBucket": ["s3-bucket-name"]}' \
          --association-name "name" \
          --schedule-expression "cron-or-rate-expression"
      ```

------
#### [ Windows ]

      ```
      aws ssm create-association --name "AWS-ApplyChefRecipes" ^
          --targets Key=tag:TagKey,Values=TagValue ^
          --parameters '{"SourceType":["HTTP"],"SourceInfo":["{\"url\":\"url-to-zip-file|directory|cookbook\", \"authMethod\": \"auth-method\", \"username\": \"{{ ssm-secure:username-secure-string-parameter }}\", \"password\": \"{{ ssm-secure:password-secure-string-parameter }}\"}"], "RunList":["{\"recipe[cookbook-name-1::recipe-name]\", \"recipe[cookbook-name-2::recipe-name]\"}"], "JsonAttributesContent": ["{custom-json-content}"], "JsonAttributesSources": "{\"sourceType\":\"s3\", \"sourceInfo\":\"s3-bucket-endpoint-1\"}, {\"sourceType\":\"s3\", \"sourceInfo\":\"s3-bucket-endpoint-2\"}", "ChefClientVersion": ["version-number"], "ChefClientArguments":["{chef-client-arguments}"], "WhyRun": boolean, "ComplianceSeverity": ["severity-value"], "ComplianceType": ["Custom:Chef"], "ComplianceReportBucket": ["s3-bucket-name"]}' \
          --association-name "name" ^
          --schedule-expression "cron-or-rate-expression"
      ```

------

   1. **Amazon S3 소스**

------
#### [ Linux & macOS ]

      ```
      aws ssm create-association --name "AWS-ApplyChefRecipes" \
          --targets Key=tag:TagKey,Values=TagValue \
          --parameters '{"SourceType":["S3"],"SourceInfo":["{\"path\":\"https://s3.amazonaws.com/path_to_Zip_file,_directory,_or_cookbook_to_download\"}"], "RunList":["{\"recipe[cookbook_name1::recipe_name]\", \"recipe[cookbook_name2::recipe_name]\"}"], "JsonAttributesContent": ["{Custom_JSON}"], "ChefClientVersion": ["version_number"], "ChefClientArguments":["{chef_client_arguments}"], "WhyRun": true_or_false, "ComplianceSeverity": ["severity_value"], "ComplianceType": ["Custom:Chef"], "ComplianceReportBucket": ["amzn-s3-demo-bucket"]}' \
          --association-name "name" \
          --schedule-expression "cron_or_rate_expression"
      ```

------
#### [ Windows ]

      ```
      aws ssm create-association --name "AWS-ApplyChefRecipes" ^
          --targets Key=tag:TagKey,Values=TagValue ^
          --parameters '{"SourceType":["S3"],"SourceInfo":["{\"path\":\"https://s3.amazonaws.com/path_to_Zip_file,_directory,_or_cookbook_to_download\"}"], "RunList":["{\"recipe[cookbook_name1::recipe_name]\", \"recipe[cookbook_name2::recipe_name]\"}"], "JsonAttributesContent": ["{Custom_JSON}"], "ChefClientVersion": ["version_number"], "ChefClientArguments":["{chef_client_arguments}"], "WhyRun": true_or_false, "ComplianceSeverity": ["severity_value"], "ComplianceType": ["Custom:Chef"], "ComplianceReportBucket": ["amzn-s3-demo-bucket"]}' ^
          --association-name "name" ^
          --schedule-expression "cron_or_rate_expression"
      ```

------

      다음 예를 참고하세요

------
#### [ Linux & macOS ]

      ```
      aws ssm create-association --name "AWS-ApplyChefRecipes" \
          --targets "Key=tag:OS,Values= Linux" \
          --parameters '{"SourceType":["S3"],"SourceInfo":["{\"path\":\"https://s3.amazonaws.com/amzn-s3-demo-bucket/HelloWorld\"}"], "RunList":["{\"recipe[HelloWorld::HelloWorldRecipe]\", \"recipe[HelloWorld::InstallApp]\"}"], "JsonAttributesContent": ["{\"state\": \"visible\",\"colors\": {\"foreground\": \"light-blue\",\"background\": \"dark-gray\"}}"], "ChefClientVersion": ["14"], "ChefClientArguments":["{--fips}"], "WhyRun": false, "ComplianceSeverity": ["Medium"], "ComplianceType": ["Custom:Chef"], "ComplianceReportBucket": ["ChefComplianceResultsBucket"]}' \
          --association-name "name" \
          --schedule-expression "cron(0 2 ? * SUN *)"
      ```

------
#### [ Windows ]

      ```
      aws ssm create-association --name "AWS-ApplyChefRecipes" ^
          --targets "Key=tag:OS,Values= Linux" ^
          --parameters '{"SourceType":["S3"],"SourceInfo":["{\"path\":\"https://s3.amazonaws.com/amzn-s3-demo-bucket/HelloWorld\"}"], "RunList":["{\"recipe[HelloWorld::HelloWorldRecipe]\", \"recipe[HelloWorld::InstallApp]\"}"], "JsonAttributesContent": ["{\"state\": \"visible\",\"colors\": {\"foreground\": \"light-blue\",\"background\": \"dark-gray\"}}"], "ChefClientVersion": ["14"], "ChefClientArguments":["{--fips}"], "WhyRun": false, "ComplianceSeverity": ["Medium"], "ComplianceType": ["Custom:Chef"], "ComplianceReportBucket": ["ChefComplianceResultsBucket"]}' ^
          --association-name "name" ^
          --schedule-expression "cron(0 2 ? * SUN *)"
      ```

------

      시스템에서 연결이 생성되며, 지정된 cron 또는 rate 표현식이 이를 방해하지 않는 한 시스템에서는 대상 노드에서 연결을 실행합니다.
**참고**  
State Manager 연결은 cron 및 rate 표현식 중 일부를 지원하지 않습니다. 연결에 대한 cron 및 rate 표현식을 생성하는 방법에 대한 자세한 내용은 [참조: Systems Manager용 Cron 및 Rate 표현식](reference-cron-and-rate-expressions.md) 섹션을 참조하세요.

1. 다음 명령을 실행하여 방금 생성한 연결의 상태를 봅니다.

   ```
   aws ssm describe-association --association-id "ID"
   ```

## Chef 리소스 규정 준수 세부 정보 보기
<a name="state-manager-chef-compliance"></a>

Systems Manager는 `AWS-ApplyChefRecipes` 문서를 실행했을 때 지정한 Amazon S3 **Compliance 보고서 버킷** 값에서 Chef 관리형 리소스에 대한 규정 준수 정보를 수집합니다. S3 버킷에서 Chef 리소스 실패에 대한 정보를 검색하는 데는 시간이 많이 걸릴 수 있습니다. 대신, Systems Manager [**Compliance**] 페이지에서 이 정보를 볼 수 있습니다.

Systems Manager Compliance 검사는 가장 최근의 Chef 실행에서 생성되거나 확인된 관리형 노드의 리소스에 대한 정보를 수집합니다. 리소스에는 파일, 디렉터리, `systemd` 서비스, `yum` 패키지, 템플릿 파일, `gem` 패키지 및 종속 쿡북 등이 포함될 수 있습니다.

**규정 준수 리소스 요약** 섹션에 실패한 리소스의 수가 표시됩니다. 다음 예에서 **ComplianceType**은 **Custom:Chef**이고 한 개의 리소스가 규정 미준수입니다.

**참고**  
`Custom:Chef`는 `AWS-ApplyChefRecipes` 문서의 기본 **ComplianceType** 값입니다. 이 값은 사용자 지정 가능합니다.

![\[[Compliance] 페이지의 [Compliance 리소스 요약(Compliance resources summary)] 섹션에서 개수 보기.\]](http://docs.aws.amazon.com/ko_kr/systems-manager/latest/userguide/images/state-manager-chef-compliance-summary.png)


[**리소스에 대한 세부 정보 개요(Details overview for resources)**] 섹션에 규정 미준수 AWS 리소스에 대한 정보가 표시됩니다. 이 섹션에는 규정 준수가 실행된 Chef 리소스 유형, 문제의 심각도, 규정 준수 상태 및 추가 정보(해당하는 경우)에 대한 링크도 포함됩니다.

![\[Chef 관리형 리소스 실패에 대한 규정 준수 세부 정보 보기\]](http://docs.aws.amazon.com/ko_kr/systems-manager/latest/userguide/images/state-manager-chef-compliance-details.png)


[**출력 보기(View output)**]는 세부 상태의 마지막 4,000자를 표시합니다. Systems Manager는 예외를 첫 번째 요소로 시작하여 자세한 메시지를 찾아 4,000자 할당량에 도달할 때까지 표시합니다. 이 프로세스는 예외가 발생되기 전에 출력된 긴 메시지(문제 해결을 위해 가장 관련성이 높은 메시지)를 표시합니다.

규정 준수 정보를 보는 방법에 대한 자세한 내용은 [AWS Systems Manager Compliance](systems-manager-compliance.md) 섹션을 참조하세요.

**중요**  
State Manager 연결이 실패한 경우에는 규정 준수 데이터가 보고되지 않습니다. 예를 들어, Systems Manager가 노드에 액세스할 권한이 없는 S3 버킷에서 Chef 쿡북을 다운로드하려고 하면 연결이 실패하고 Systems Manager가 어떠한 규정 준수 데이터도 보고되지 않습니다.

# 연습: AWS CLI를 사용하여 SSM Agent를 자동으로 업데이트
<a name="state-manager-update-ssm-agent-cli"></a>

다음 절차는 AWS Command Line Interface를 사용하여 State Manager 연결을 생성하는 과정을 안내합니다. 연결하면 지정한 일정에 따라 SSM Agent가 자동으로 업데이트됩니다. SSM Agent에 대한 자세한 내용은 [SSM Agent 작업](ssm-agent.md) 섹션을 참조하세요. 콘솔을 사용하여 SSM Agent의 업데이트 일정을 사용자 지정하려면 [SSM Agent 자동 업데이트](ssm-agent-automatic-updates.md#ssm-agent-automatic-updates-console) 섹션을 참조하세요.

SSM Agent 업데이트에 대해 알림을 수신하려면 GitHub에서 [SSM Agent 릴리스 정보](https://github.com/aws/amazon-ssm-agent/blob/master/RELEASENOTES.md) 페이지를 구독합니다.

**시작하기 전 준비 사항**  
다음 절차를 완료하기 전에 Systems Manager에 대해 구성된 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스(Linux, macOS 또는 Windows Server용)가 1개 이상 실행되고 있는지 확인합니다. 자세한 내용은 [AWS Systems Manager에 대한 관리형 노드 설정](systems-manager-setting-up-nodes.md) 섹션을 참조하세요.

AWS CLI 또는 AWS Tools for Windows PowerShell 사용을 통해 연결을 생성한 경우 다음 예제에 표시된 것과 같이 `--Targets` 파라미터를 사용하여 인스턴스를 대상으로 지정합니다. `--InstanceID` 파라미터를 사용하지 마세요. `--InstanceID` 파라미터는 레거시 파라미터입니다.

**SSM Agent를 자동으로 업데이트하기 위해 연결을 생성하려면**

1. 아직 하지 않은 경우 AWS Command Line Interface(AWS CLI)을 설치하고 구성합니다.

   자세한 내용은 [최신 버전의 AWS CLI 설치 또는 업데이트](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)를 참조하세요.

1. 다음 명령을 실행하면 Amazon Elastic Compute Cloud(Amazon EC2) 태그로 인스턴스를 대상으로 지정하여 연결을 생성합니다. 각 *example resource placeholder*를 사용자의 정보로 바꿉니다. `Schedule` 파라미터는 매주 일요일 오전 2시(UTC)에 연결을 실행하는 일정을 설정합니다.

   State Manager 연결은 cron 및 rate 표현식 중 일부를 지원하지 않습니다. 연결에 대한 cron 및 rate 표현식을 생성하는 방법에 대한 자세한 내용은 [참조: Systems Manager용 Cron 및 Rate 표현식](reference-cron-and-rate-expressions.md) 섹션을 참조하세요.

------
#### [ Linux & macOS ]

   ```
   aws ssm create-association \
   --targets Key=tag:tag_key,Values=tag_value \
   --name AWS-UpdateSSMAgent \
   --schedule-expression "cron(0 2 ? * SUN *)"
   ```

------
#### [ Windows ]

   ```
   aws ssm create-association ^
   --targets Key=tag:tag_key,Values=tag_value ^
   --name AWS-UpdateSSMAgent ^
   --schedule-expression "cron(0 2 ? * SUN *)"
   ```

------

   쉼표로 구분된 목록으로 인스턴스 ID를 지정하여 여러 인스턴스를 대상으로 지정할 수도 있습니다.

------
#### [ Linux & macOS ]

   ```
   aws ssm create-association \
   --targets Key=instanceids,Values=instance_ID,instance_ID,instance_ID \
   --name AWS-UpdateSSMAgent \
   --schedule-expression "cron(0 2 ? * SUN *)"
   ```

------
#### [ Windows ]

   ```
   aws ssm create-association ^
   --targets Key=instanceids,Values=instance_ID,instance_ID,instance_ID ^
   --name AWS-UpdateSSMAgent ^
   --schedule-expression "cron(0 2 ? * SUN *)"
   ```

------

   업데이트하려는 SSM Agent의 버전을 지정할 수 있습니다.

------
#### [ Linux & macOS ]

   ```
   aws ssm create-association \
   --targets Key=instanceids,Values=instance_ID,instance_ID,instance_ID \
   --name AWS-UpdateSSMAgent \
   --schedule-expression "cron(0 2 ? * SUN *)" \
   --parameters version=ssm_agent_version_number
   ```

------
#### [ Windows ]

   ```
   aws ssm create-association ^
   --targets Key=instanceids,Values=instance_ID,instance_ID,instance_ID ^
   --name AWS-UpdateSSMAgent ^
   --schedule-expression "cron(0 2 ? * SUN *)" ^
   --parameters version=ssm_agent_version_number
   ```

------

   시스템은 다음과 같은 정보를 반환합니다.

   ```
   {
       "AssociationDescription": {
           "ScheduleExpression": "cron(0 2 ? * SUN *)",
           "Name": "AWS-UpdateSSMAgent",
           "Overview": {
               "Status": "Pending",
               "DetailedStatus": "Creating"
           },
           "AssociationId": "123..............",
           "DocumentVersion": "$DEFAULT",
           "LastUpdateAssociationDate": 1504034257.98,
           "Date": 1504034257.98,
           "AssociationVersion": "1",
           "Targets": [
               {
                   "Values": [
                       "TagValue"
                   ],
                   "Key": "tag:TagKey"
               }
           ]
       }
   }
   ```

   시스템은 해당 인스턴스에 연결 생성을 시도하고 생성 후 상태를 적용합니다. 연결 상태는 `Pending`으로 표시됩니다.

1. 다음 명령을 실행하여 생성한 연결의 업데이트된 상태를 확인합니다.

   ```
   aws ssm list-associations
   ```

   인스턴스에서 최신 버전의 SSM Agent를 실행하고 있지 *않은* 경우 상태가 `Failed`로 표시됩니다. 최신 버전의 SSM Agent가 발행되면 이 연결을 통해 새 에이전트가 자동으로 설치되고 상태가 `Success`로 표시됩니다.

# 연습: Windows Server용 EC2 인스턴스에서 PV 드라이버 자동 업데이트
<a name="state-manager-update-pv-drivers"></a>

Amazon Windows Server Amazon Machine Images(AMIs)는 가상화 하드웨어에 대한 액세스를 허용하는 드라이버 집합을 포함하고 있습니다. 이러한 드라이버는 Amazon Elastic Compute Cloud(Amazon EC2)에서 인스턴스 스토어 및 Amazon Elastic Block Store(Amazon EBS) 볼륨을 디바이스에 매핑하는 데 사용됩니다. Windows Server용 EC2 인스턴스의 안정성과 성능을 개선하려면 최신 드라이버를 설치하는 것이 좋습니다. PV 드라이버에 대한 자세한 내용은 [AWS PV 드라이버](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/xen-drivers-overview.html#xen-driver-awspv)를 참조하세요.

다음 시연에서는 드라이버를 사용할 수 있는 경우 새 AWS PV 드라이버를 자동으로 다운로드하여 설치하도록 State Manager 연결을 구성하는 방법을 보여줍니다. State Manager는 AWS Systems Manager의 도구입니다.

**시작하기 전 준비 사항**  
다음 절차를 완료하기 전에 Systems Manager에 대해 구성된 Windows Server용 Amazon EC2 인스턴스가 1개 이상 실행되고 있는지 확인합니다. 자세한 내용은 [AWS Systems Manager에 대한 관리형 노드 설정](systems-manager-setting-up-nodes.md) 섹션을 참조하세요.

**PV 드라이버를 자동으로 업데이트하는 State Manager 연결을 생성하려면**

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

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

1. **연결 생성**을 선택합니다.

1. **이름** 필드에 연결에 대한 설명이 포함된 이름을 입력합니다.

1. [**문서(Document)**] 목록에서 `AWS-ConfigureAWSPackage`를 선택합니다.

1. **파라미터** 섹션에서 다음을 수행합니다.
   + **작업**에서 **설치**를 선택합니다.
   + [**설치 유형(Installation type)**]에서 [**제거 및 다시 설치(Uninstall and reinstall)**]를 선택합니다.
**참고**  
이 패키지에는 현재 위치 업그레이드가 지원되지 않습니다. 제거한 후 다시 설치해야 합니다.
   + **이름**에 **AWSPVDriver**를 입력합니다.

     **버전** 및 **추가 인수**에는 아무 것도 입력할 필요가 없습니다.

1. **Targets**(대상) 섹션에서, 태그를 지정하거나, 수동으로 인스턴스나 엣지 디바이스를 선택하거나, 리소스 그룹을 지정하여 이 작업을 실행할 관리형 노드를 식별합니다.
**작은 정보**  
예상한 관리형 노드가 목록에 없으면 [관리형 노드 가용성 문제 해결](fleet-manager-troubleshooting-managed-nodes.md)에서 문제 해결 팁을 참조하세요.
**참고**  
태그를 사용하여 인스턴스 대상을 지정하고 Linux 인스턴스에 매핑되는 태그를 지정할 경우 Windows Server 인스턴스에서는 연결이 성공하지만 Linux 인스턴스에서는 실패합니다. 전체 연결 상태는 **실패**로 표시됩니다.

1. **일정 지정** 영역에서 구성한 일정에 따라 연결을 실행할지 아니면 한 번만 실행할지 선택합니다. 업데이트된 PV 드라이버는 1년에 몇 번 릴리스되므로 원하는 경우 연결을 한 달에 한 번 실행하도록 예약할 수 있습니다.

1. **고급 옵션**의 **규정 준수 심각도**에서 연결의 심각도 수준을 선택합니다. 규정 준수 보고는 여기서 지정한 심각도 수준과 함께 연결 상태가 준수인지 아니면 미준수인지를 나타냅니다. 자세한 내용은 [State Manager 연결 규정 준수 정보](compliance-about.md#compliance-about-association) 섹션을 참조하세요.

1. **Rate control**(속도 제어)에서
   + **Concurrency**(동시성)에서 명령을 동시에 실행할 관리형 노드의 백분율 또는 개수를 지정합니다.
**참고**  
관리형 노드에 적용할 태그를 지정하거나, AWS 리소스 그룹을 지정하여 대상을 선택하였지만 대상으로 지정할 관리형 노드 수를 잘 모를 경우에는 백분율을 지정하여 동시에 문서를 실행할 수 있는 대상 수를 제한합니다.
   + **Error threshold**(오류 임계값)에서, 명령이 노드의 개수 또는 백분율에서 실패한 후 다른 관리형 노드에서 해당 명령의 실행을 중지할 시간을 지정합니다. 예를 들어 세 오류를 지정하면 네 번째 오류를 받았을 때 Systems Manager가 명령 전송을 중지합니다. 여전히 명령을 처리 중인 관리형 노드도 오류를 전송할 수 있습니다.

1. (선택 사항) **출력 옵션**에서 명령 출력을 파일에 저장하려면 **S3 버킷에 쓰기 활성화** 옆의 상자를 선택합니다. 상자에 버킷 및 접두사(폴더) 이름을 입력합니다.
**참고**  
데이터를 S3 버킷에 쓰는 기능을 부여하는 S3 권한은 이 작업을 수행하는 IAM 사용자의 권한이 아닌 관리형 노드에 할당된 인스턴스 프로파일의 권한입니다. 자세한 내용은 [Systems Manager에 필요한 인스턴스 권한 구성](setup-instance-permissions.md)이나 [하이브리드 환경을 위한 IAM 서비스 역할 생성](hybrid-multicloud-service-role.md)을 참조하세요. 또한 지정된 S3 버킷이 다른 AWS 계정에 있는 경우 관리형 노드와 연결된 인스턴스 프로파일 또는 IAM 서비스 역할은 해당 버킷에 쓸 수 있는 권한이 있어야 합니다.

1. (선택 사항) **CloudWatch 경보** 섹션에서 모니터링을 위해 연결에 적용할 CloudWatch 경보를 **경보 이름**으로 선택합니다.
**참고**  
이 단계에 대한 다음 정보를 참조하세요.  
알람 목록에는 최대 100개의 알람이 표시됩니다. 목록에 해당 경보가 표시되지 않으면 AWS Command Line Interface를 사용하여 연결을 생성합니다. 자세한 내용은 [연결 생성(명령줄)](state-manager-associations-creating.md#create-state-manager-association-commandline) 섹션을 참조하세요.
CloudWatch 경보를 명령에 연결하려면 연결을 생성하는 IAM 보안 주체에 `iam:createServiceLinkedRole` 작업에 대한 권한이 있어야 합니다. CloudWatch 경보에 대한 자세한 내용은 [Amazon CloudWatch 경보 사용](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html)을 참조하세요.
경보가 활성화되면 보류 중인 명령 호출 또는 자동화가 실행되지 않습니다.

1. [**연결 생성(Create association)**], [**닫기(Close)**]를 차례로 선택합니다. 시스템은 해당 인스턴스에 연결을 생성하고 그 상태를 즉시 적용하려고 합니다.

   1개 이상의 Windows Server용 Amazon EC2 인스턴스에 대해 연결을 생성한 경우 상태가 [**성공(Success)**]으로 변경됩니다. Systems Manager에 대해 인스턴스를 구성하지 않았거나 실수로 Linux 인스턴스를 대상으로 지정한 경우 상태가 [**실패(Failed)**]로 표시됩니다.

   상태가 [**실패(Failed)**]인 경우 연결 ID와 [**리소스(Resources)**] 탭을 차례로 선택하고 Windows Server용 EC2 인스턴스에서 연결이 성공적으로 생성되었는지 확인합니다. Windows Server용 EC2 인스턴스의 상태가 [**실패(Failed)**]로 표시될 경우 SSM Agent가 인스턴스에서 실행 중이고 Systems Manager에 대한 AWS Identity and Access Management(IAM) 역할로 인스턴스가 구성되었는지 확인합니다. 자세한 내용은 [조직을 위한 Systems Manager 통합 콘솔 설정](systems-manager-setting-up-organizations.md) 섹션을 참조하세요.