안내: 플레이북을 실행하는 연결 만들기 Ansible - AWS Systems Manager

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

안내: 플레이북을 실행하는 연결 만들기 Ansible

SSM 문서를 사용하여 Ansible 플레이북을 실행하는 State Manager 연결을 생성할 수 있습니다AWS-ApplyAnsiblePlaybooks. State Manager의 기능입니다. AWS Systems Manager이 문서는 플레이북 실행을 위해 다음과 같은 이점을 제공합니다.

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

  • GitHub및 아마존 심플 스토리지 서비스 (Amazon S3) 에서 플레이북 다운로드 지원

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

  • 향상된 로깅

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

참고

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

Ansible플레이북을 실행하는 연결은 에서 지원되지 않습니다. macOS

복잡한 플레이북 실행 지원

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

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/doc-example-bucket/playbook.yml" }

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

{ "path":"https://s3.amazonaws.com/doc-example-bucket/ansible/webservers/" }
중요

Amazon S3를 지정하는 경우 관리형 노드의 AWS Identity and Access Management (IAM) 인스턴스 프로필을 AmazonS3ReadOnlyAccess 정책으로 구성해야 합니다. 자세한 내용은 Systems Manager에 대한 인스턴스 권한 구성을 참조하세요.

압축된 플레이북 구조 지원

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

향상된 로깅

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

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

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

설치된 종속성

InstallDependencies매개 변수에 True를 지정하는 경우 Systems Manager는 노드에 다음과 같은 종속성이 설치되어 있는지 확인합니다.

  • Ubuntu Server/Debian Server: apt-get (패키지 관리), 파이썬 3, 압축 해제 Ansible

  • 아마존 리눅스: Ansible

  • RHEL: 파이썬 3Ansible, 압축 해제

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

Ansible플레이북을 실행하는 연결 만들기 (콘솔)

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

Ansible플레이북을 실행하는 연결을 만들려면 (콘솔)
  1. https://console.aws.amazon.com/systems-manager/ 에서 AWS Systems Manager 콘솔을 엽니다.

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

    -또는-

    AWS Systems Manager 홈 페이지가 먼저 열리면 메뉴 아이콘 ( 
    The menu icon
  ) 을 선택하여 탐색 창을 연 다음 선택하십시오 State Manager.

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

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

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

  6. 매개변수 섹션에서 소스 유형에 대해 둘 중 하나 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" }
  7. 종속성 설치에서 옵션을 선택합니다.

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

  9. (선택 사항) 추가 변수에는 런타임 Ansible 시 State Manager 전송할 변수를 입력합니다.

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

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

  12. 대상에서 옵션을 선택합니다. 태그 사용에 대한 자세한 내용은 State Manager 연결에서의 대상 및 속도 제어 정보 섹션을 참조하세요.

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

  14. 고급 옵션 섹션의 규정 준수 심각도에서 연결에 대한 심각도 수준을 선택합니다. 규정 준수 보고는 여기서 지정한 심각도 수준과 함께 연결 상태가 준수인지 아니면 미준수인지를 나타냅니다. 자세한 설명은 State Manager 연결 규정 준수 정보 섹션을 참조하세요.

  15. Rate control(속도 제어) 섹션에서 관리형 노드 플릿 간에 State Manager 연결을 실행하기 위한 옵션을 구성합니다. 속도 제어 사용에 대한 자세한 내용은 State Manager 연결에서의 대상 및 속도 제어 정보 섹션을 참조하세요.

    동시성 섹션에서 옵션을 선택합니다.

    • 대상을 선택하여 연결을 동시에 실행할 수 있는 대상 수(절대 개수)를 입력합니다.

    • 백분율을 선택하여 연결을 동시에 실행할 수 있는 대상의 백분율을 입력합니다.

    오류 임계값 섹션에서 옵션을 선택합니다.

    • 오류를 선택하여 State Manager에서 추가 대상에 대한 연결 실행을 중지하기 전에 허용되는 절대 오류 수를 입력합니다.

    • 백분율을 선택하여 State Manager에서 추가 대상에 대한 연결 실행을 중지하기 전에 허용되는 오류 비율을 입력합니다.

  16. (선택 사항) 출력 옵션에서 명령 출력을 파일에 저장하려면 S3 버킷에 쓰기 활성화 옆의 상자를 선택합니다. 상자에 버킷 및 접두사(폴더) 이름을 입력합니다.

    참고

    데이터를 S3 버킷에 쓰는 기능을 부여하는 S3 권한은 이 작업을 수행하는 IAM 사용자의 권한이 아닌 관리형 노드에 할당된 인스턴스 프로파일의 권한입니다. 자세한 내용은 Systems Manager에 대한 인스턴스 권한 구성 또는 하이브리드 환경을 위한 IAM 서비스 역할 생성을 참조하세요. 또한 지정된 S3 버킷이 다른 AWS 계정버킷에 있는 경우 관리형 노드와 연결된 인스턴스 프로필 또는 IAM 서비스 역할에 해당 버킷에 쓰는 데 필요한 권한이 있는지 확인하십시오.

  17. 연결 생성을 선택합니다.

참고

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

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

다음 절차는 문서를 사용하여 Ansible 플레이북을 실행하는 State Manager 연결을 만들기 위해 AWS Command Line Interface (AWS CLI) 를 사용하는 방법을 설명합니다. AWS-ApplyAnsiblePlaybooks

Ansible플레이북 (CLI) 을 실행하는 연결을 만들려면
  1. 아직 설치하지 않았다면 AWS Command Line Interface (AWS CLI) 를 설치하고 구성하세요.

    자세한 내용은 최신 버전의 AWS CLI설치 또는 업데이트를 참조하세요.

  2. 다음 명령 중 하나를 실행하여 태그를 사용하여 노드를 타겟팅하여 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/DOC-EXAMPLE-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 표현식 섹션을 참조하세요.

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

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

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