

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

# GitHub에서 스크립트 실행
<a name="integration-remote-scripts"></a>

이 주제에서는 사전 정의된 Systems Manager 문서(SSM 문서) `AWS-RunRemoteScript`를 사용해 GitHub에서 Ansible Playbooks, Python, Ruby, PowerShell 스크립트를 비롯한 스크립트를 다운로드하는 방법을 설명합니다. 이 SSM 문서를 사용하면 더 이상 수동으로 스크립트를 Amazon Elastic Compute Cloud(Amazon EC2)로 포팅하거나 SSM 문서에 래핑할 필요가 없습니다. AWS Systems Manager과 GitHub의 통합은 코드형 인프라를 지원하여, 노드 관리에 소요되는 시간을 단축하고 플릿에서 구성을 표준화합니다.

또한 원격 위치에서 스크립트 또는 다른 SSM 문서를 다운로드할 수 있는 사용자 정의 SSM 문서를 생성할 수도 있습니다. 자세한 내용은 [복합 문서 생성](documents-creating-content.md#documents-creating-composite) 섹션을 참조하세요.

여러 스크립트가 포함된 디렉터리를 다운로드할 수도 있습니다. 디렉터리에서 기본 스크립트를 실행할 때 Systems Manager는 디렉터리에 포함된 참조되는 스크립트도 모두 실행합니다.

다음은 GitHub로부터 스크립트 실행에 대한 중요 세부 정보입니다.
+ Systems Manager는 스크립트가 노드에서 실행 가능한지 확인하지 않습니다. 스크립트를 다운로드하여 실행하기 전에 노드에 필요한 소프트웨어가 설치되어 있는지 확인합니다. 아니면 AWS Systems Manager의 도구인 Run Command 또는 State Manager를 사용하여 소프트웨어를 설치한 다음, 스크립트를 다운로드해 실행하는 복합 문서를 생성할 수 있습니다.
+ 사용자는 모든 GitHub 요구 사항이 충족되도록 해야 합니다. 여기에는 필요에 따라 액세스 토큰을 새로 고치는 절차가 포함됩니다. 인증 또는 미인증된 요청의 수를 초과하지 않도록 해야 합니다. 자세한 내용은 GitHub 설명서를 참조하세요.
+ GitHub Enterprise 리포지토리는 지원되지 않습니다.

**Topics**
+ [GitHub에서 Ansible Playbooks 실행](integration-github-ansible.md)
+ [GitHub에서 Python 스크립트 실행](integration-github-python.md)

# GitHub에서 Ansible Playbooks 실행
<a name="integration-github-ansible"></a>

이 섹션에는 콘솔 또는 AWS Command Line Interface(AWS CLI)을 사용해 GitHub에서 Ansible Playbooks를 실행할 수 있는 절차가 포함되어 있습니다.

**시작하기 전 준비 사항**  
프라이빗 GitHub 리포지토리에 저장된 스크립트를 실행하려는 경우 GitHub 보안 액세스 토큰에 대한 AWS Systems Manager `SecureString` 파라미터를 생성합니다. 수동으로 SSH를 통해 토큰을 전달해서는 프라이빗 GitHub 리포지토리에 저장된 스크립트에 액세스할 수 없습니다. 액세스 토큰은 Systems Manager `SecureString` 파라미터로 전달되어야 합니다. `SecureString` 파라미터 생성에 대한 자세한 내용은 [Systems Manager에서 Parameter Store 파라미터 생성](sysman-paramstore-su-create.md) 섹션을 참조하세요.

## GitHub(콘솔)에서 Ansible Playbook 실행
<a name="integration-github-ansible-console"></a>

**GitHub에서 Ansible Playbook 실행**

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

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

1. **Run command**(실행 명령)를 선택합니다.

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

1. **명령 파라미터**에서 다음을 수행합니다.
   + **소스 유형**에서 **GitHub**를 선택합니다.
   + [**소스 정보(Source Info)**] 상자에 소스에 액세스하는 데 필요한 정보를 다음 형식으로 입력합니다.

     ```
     {
       "owner": "owner_name",
       "repository": "repository_name", 
       "getOptions": "branch:branch_name",
       "path": "path_to_scripts_or_directory",
       "tokenInfo": "{{ssm-secure:SecureString_parameter_name}}" 
     }
     ```

     이 예제는 `webserver.yml`이라는 파일을 다운로드합니다.

     ```
     {
         "owner": "TestUser1",
         "repository": "GitHubPrivateTest",
         "getOptions": "branch:myBranch",
         "path": "scripts/webserver.yml",
         "tokenInfo": "{{ssm-secure:mySecureStringParameter}}"
     }
     ```
**참고**  
`"branch"`는 SSM 문서가 `master`가 아닌 분기에 저장된 경우에만 필요합니다.  
리포지토리의 특정 *커밋*에 있는 스크립트 버전을 사용하려면 `branch`대신 `getOptions`에서 `commitID`를 사용합니다. 예:  
`"getOptions": "commitID:bbc1ddb94...b76d3bEXAMPLE",`
   + [**명령줄(Command Line)**] 필드에 스크립트 실행을 위한 파라미터를 입력합니다. 다음 예를 참고하세요

     **ansible-playbook -i “localhost,” --check -c local webserver.yml**
   + (옵션) **작업 디렉터리(Working Directory)** 필드에 스크립트를 다운로드하여 실행하려는 노드에 있는 디렉터리의 이름을 입력합니다.
   + (선택 사항) **Execution Timeout(실행 제한 시간)**에서 스크립트 명령 실행이 실패할 때까지 시스템이 기다리는 시간(단위: 초)을 지정합니다.

1. **대상** 섹션에서, 태그를 지정하거나, 수동으로 인스턴스나 엣지 디바이스를 선택하거나, 리소스 그룹을 지정하여 이 작업을 실행할 관리형 노드를 식별합니다.
**작은 정보**  
예상한 관리형 노드가 목록에 없으면 [관리형 노드 가용성 문제 해결](fleet-manager-troubleshooting-managed-nodes.md)에서 문제 해결 팁을 참조하세요.

1. **Other parameters**(다른 파라미터):
   + **Comment**(설명)에 명령에 대한 정보를 입력합니다.
   + **제한 시간(초)**에서 전체 명령 실행이 실패할 때까지 시스템이 기다리는 시간을 초 단위로 지정합니다.

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

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

1. **SNS notifications**(SNS 알림) 섹션에서, 명령 실행 상태에 대한 알림이 전송되도록 하려면 **Enable SNS notifications**(SNS 알림 활성화) 확인란을 선택합니다.

   Run Command에 대한 Amazon SNS 알림 구성에 대한 자세한 내용은 [Amazon SNS 알림을 사용하여 Systems Manager 상태 변경 모니터링](monitoring-sns-notifications.md) 섹션을 참조하세요.

1. **Run**(실행)을 선택합니다.

## AWS CLI를 사용하여 GitHub에서 Ansible Playbook 실행
<a name="integration-github-ansible-cli"></a>

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

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

1. 다음 명령을 실행하여 GitHub에서 스크립트를 다운로드하고 실행합니다.

   ```
   aws ssm send-command \
       --document-name "AWS-RunRemoteScript" \
       --instance-ids "instance-IDs"\
       --parameters '{"sourceType":["GitHub"],"sourceInfo":["{\"owner\":\"owner_name\", \"repository\": \"repository_name\", \"path\": \"path_to_file_or_directory\", \"tokenInfo\":\"{{ssm-secure:name_of_your_SecureString_parameter}}\" }"],"commandLine":["commands_to_run"]}'
   ```

   다음은 로컬 Linux 시스템에서 실행하는 명령의 예입니다.

   ```
   aws ssm send-command \    
       --document-name "AWS-RunRemoteScript" \
       --instance-ids "i-02573cafcfEXAMPLE" \
       --parameters '{"sourceType":["GitHub"],"sourceInfo":["{\"owner\":\"TestUser1\", \"repository\": \"GitHubPrivateTest\", \"path\": \"scripts/webserver.yml\", \"tokenInfo\":\"{{ssm-secure:mySecureStringParameter}}\" }"],"commandLine":["ansible-playbook -i “localhost,” --check -c local webserver.yml"]}'
   ```

# GitHub에서 Python 스크립트 실행
<a name="integration-github-python"></a>

이 섹션에는 AWS Systems Manager 콘솔 또는 AWS Command Line Interface(AWS CLI)를 사용해 GitHub에서 Python 스크립트를 실행할 수 있는 절차가 포함되어 있습니다.

## GitHub에서 Python 스크립트 실행(콘솔)
<a name="integration-github-python-console"></a>

**GitHub에서 Python 스크립트 실행**

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

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

1. **Run command**(실행 명령)를 선택합니다.

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

1. **명령 파라미터**에서 다음을 수행합니다.
   + **소스 유형**에서 **GitHub**를 선택합니다.
   + [**소스 정보(Source Info)**] 상자에 소스에 액세스하는 데 필요한 정보를 다음 형식으로 입력합니다.

     ```
     {
         "owner": "owner_name",
         "repository": "repository_name",
         "getOptions": "branch:branch_name",
         "path": "path_to_document",
         "tokenInfo": "{{ssm-secure:SecureString_parameter_name}}"
     }
     ```

     다음 예에서는 *complex-script*라는 스크립트의 디렉터리를 다운로드합니다.

     ```
     {
         "owner": "TestUser1",
         "repository": "SSMTestDocsRepo",
         "getOptions": "branch:myBranch",
         "path": "scripts/python/complex-script",
         "tokenInfo": "{{ssm-secure:myAccessTokenParam}}"
     }
     ```
**참고**  
`"branch"`는 스크립트가 `master`가 아닌 분기에 저장된 경우에만 필요합니다.  
리포지토리의 특정 *커밋*에 있는 스크립트 버전을 사용하려면 `branch`대신 `getOptions`에서 `commitID`를 사용합니다. 예:  
`"getOptions": "commitID:bbc1ddb94...b76d3bEXAMPLE",`
   + [**명령줄(Command Line)**]에 스크립트 실행을 위한 파라미터를 입력합니다. 다음 예를 참고하세요

     ```
     mainFile.py argument-1 argument-2
     ```

     이 예에서는 `mainFile.py`를 실행합니다. 그러면 이 파일이 `complex-script` 디렉터리의 다른 스크립트를 실행할 수 있습니다.
   + (옵션) **작업 디렉터리(Working Directory)**에 스크립트를 다운로드하여 실행하려는 노드 상의 디렉터리의 이름을 입력합니다.
   + (선택 사항) **Execution Timeout(실행 제한 시간)**에서 스크립트 명령 실행이 실패할 때까지 시스템이 기다리는 시간(초)을 지정합니다.

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

1. **Other parameters**(다른 파라미터):
   + **Comment**(설명)에 명령에 대한 정보를 입력합니다.
   + **제한 시간(초)**에서 전체 명령 실행이 실패할 때까지 시스템이 기다리는 시간을 초 단위로 지정합니다.

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

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

1. **SNS notifications**(SNS 알림) 섹션에서, 명령 실행 상태에 대한 알림이 전송되도록 하려면 **Enable SNS notifications**(SNS 알림 활성화) 확인란을 선택합니다.

   Run Command에 대한 Amazon SNS 알림 구성에 대한 자세한 내용은 [Amazon SNS 알림을 사용하여 Systems Manager 상태 변경 모니터링](monitoring-sns-notifications.md) 섹션을 참조하세요.

1. **Run**(실행)을 선택합니다.

## AWS CLI를 사용하여 GitHub에서 Python 스크립트 실행
<a name="integration-github-python-cli"></a>

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

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

1. 다음 명령을 실행하여 GitHub에서 스크립트를 다운로드하고 실행합니다.

   ```
   aws ssm send-command --document-name "AWS-RunRemoteScript" --instance-ids "instance-IDs" --parameters '{"sourceType":["GitHub"],"sourceInfo":["{\"owner\":\"owner_name\", \"repository\":\"repository_name\", \"path\": \"path_to_script_or_directory"}"],"commandLine":["commands_to_run"]}'
   ```

   다음 예를 참고하세요

   ```
   aws ssm send-command --document-name "AWS-RunRemoteScript" --instance-ids "i-02573cafcfEXAMPLE" --parameters '{"sourceType":["GitHub"],"sourceInfo":["{\"owner\":\"TestUser1\", \"repository\":\"GitHubTestPublic\", \"path\": \"scripts/python/complex-script\"}"],"commandLine":["mainFile.py argument-1 argument-2 "]}'
   ```

   이 예에서는 `complex-script`라는 스크립트의 디렉터리를 다운로드합니다. `commandLine` 항목은 `mainFile.py`를 실행합니다. 그러면 이 파일이 `complex-script` 디렉터리의 다른 스크립트를 실행할 수 있습니다.