State Manager 연결을 사용하여 자동화 예약 - AWS Systems Manager

State Manager 연결을 사용하여 자동화 예약

실행서와 State Manager 연결을 생성하여 자동화를 시작할 수 있습니다. State Manager는 AWS Systems Manager의 기능입니다. 실행서와의 State Manager 연결을 생성하면 여러 유형의 AWS 리소스를 대상으로 지정할 수 있습니다. 예를 들어 다음과 같이 AWS 리소스에 원하는 상태를 적용하는 연결을 생성할 수 있습니다.

  • 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를 패치합니다.

AWS Systems Manager 콘솔과 AWS Command Line Interface(AWS CLI)에서 다음 절차를 사용하여 자동화를 실행하는 State Manager 연결을 생성합니다.

시작하기 전 준비 사항

State Manager를 사용하여 자동화를 실행하기 전에 다음과 같은 중요 세부 정보를 알고 있어야 합니다.

  • 실행서를 사용하는 연결을 생성하기 전에 AWS Systems Manager의 기능인 Automation에 대해 구성된 권한이 있는지 확인합니다. 자세한 내용은 Automation 설정 단원을 참조하십시오.

  • 실행서를 사용하는 State Manager 연결은 AWS 계정에서 동시에 실행되는 최대 자동화 수에 영향을 미칩니다. 최대 100개의 자동화를 동시에 실행할 수 있습니다. 자세한 내용은 Amazon Web Services 일반 참조의 Systems Manager 서비스 할당량을 참조하세요.

  • 자동화를 실행하는 경우 State Manager는 AWS CloudTrail에서 자동화에 의해 시작된 API 작업을 기록하지 않습니다.

  • Systems Manager는 자동으로 서비스 연결 역할을 생성하여 State Manager에 Systems Manager Automation API 작업을 호출할 권한을 부여합니다. 원할 경우, AWS CLI 또는 AWS Tools for PowerShell에서 다음 명령을 실행하여 서비스 연결 역할을 직접 생성할 수 있습니다.

    Linux & macOS
    aws iam create-service-linked-role \ --aws-service-name ssm.amazonaws.com
    Windows
    aws iam create-service-linked-role ^ --aws-service-name ssm.amazonaws.com
    PowerShell
    New-IAMServiceLinkedRole ` -AWSServiceName ssm.amazonaws.com

    서비스 연결 역할에 대한 자세한 내용은 Systems Manager에 서비스 연결 역할 사용 섹션을 참조하세요.

자동화를 실행하는 연결 생성(콘솔)

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

자동화를 실행하는 State Manager 연결을 생성하려면
  1. AWS Systems Manager 콘솔(https://console.aws.amazon.com/systems-manager/)을 엽니다.

  2. 탐색 창에서 State Manager를 선택한 후 연결 생성을 선택합니다.

  3. 이름(Name) 필드에 이름을 지정합니다. 이는 선택 사항이며, 권장 사항은 아닙니다.

  4. [문서(Document)] 목록에서 실행서를 선택합니다. 검색 창에서 [문서 유형 : 같음 : Automation(Document type : Equal : Automation)]를 필터링합니다. 추가 실행서를 보려면 검색 창의 오른쪽에 있는 번호를 사용합니다.

    참고

    실행서 이름을 선택하여 실행서에 대한 정보를 볼 수 있습니다.

  5. 대상의 리소스 ID를 지정하여 하나 이상의 대상에 대해 자동화를 실행하려면 Simple execution(단순 실행)을 선택합니다. 태그 또는 AWS Resource Groups와 같은 대상 지정 옵션을 지정하여 AWS 리소스 플릿에서 자동화를 실행하려면 [속도 제어(Rate control)]를 선택합니다. 또한 동시성 및 오류 임계값을 지정하여 리소스에 대한 자동화 작업을 제어할 수도 있습니다.

    [속도 제어(Rate control)]를 선택하면 [대상(Targets)] 섹션이 표시됩니다.

  6. 대상 섹션에서 리소스를 대상으로 지정할 방법을 선택합니다.

    1. (필수) 파라미터 목록에서 파라미터 하나를 선택합니다. [파라미터(Parameter)] 목록의 항목은 이 절차의 시작 부분에서 선택한 실행서의 파라미터로 결정됩니다. 파라미터를 선택하면 자동화가 실행되는 리소스 유형을 정의할 수 있습니다.

    2. (필수) 대상 목록에서 리소스를 대상으로 지정할 방법을 선택합니다.

      • 리소스 그룹: Resource Group(리소스 그룹) 목록에서 그룹의 이름을 선택합니다. 실행서에서 AWS Resource Groups를 대상으로 지정에 대한 자세한 내용은 AWS Resource Groups을 대상으로 지정 섹션을 참조하세요.

      • 태그: 제공된 필드에 태그 키 및 (선택적으로) 태그 값을 입력합니다. 추가를 선택합니다. 실행서에서 태그를 대상으로 지정에 대한 자세한 내용은 태그를 대상으로 지정 섹션을 참조하세요.

      • 파라미터 값: 입력 파라미터 섹션에 값을 입력합니다. 여러 값을 지정할 경우 Systems Manager는 지정된 각 값에 대해 하위 자동화를 실행합니다.

        예를 들어 실행서에 InstanceID 파라미터가 포함되어 있다고 가정해 보겠습니다. 자동화 실행 시 InstanceID 파라미터의 값을 대상으로 지정할 경우 Systems Manager는 지정한 각 인스턴스 ID 값마다 하위 자동화를 하나 실행합니다. 이 자동화가 각각의 지정된 인스턴스 실행을 완료하거나 실행에 실패하면 상위 자동화가 완료된 것입니다. 최대 50개 파라미터 값을 대상으로 지정할 수 있습니다. 실행서에서 파라미터 값을 대상으로 지정에 대한 자세한 내용은 파라미터 값을 대상으로 지정 섹션을 참조하세요.

  7. 입력 파라미터 섹션에서 필요한 입력 파라미터를 지정합니다.

    태그나 리소스 그룹을 사용하여 리소스를 대상으로 지정하기로 한 경우 [입력 파라미터(Input parameters)] 섹션에서 옵션 중 일부는 선택하지 않아도 될 것입니다. 예를 들어 AWS-RestartEC2Instance 실행서를 선택했으며 태그를 사용하여 인스턴스를 대상으로 지정하기로 한 경우 [입력 파라미터(Input parameters)] 섹션에서 인스턴스 ID를 지정하거나 선택할 필요가 없습니다. 자동화는 지정된 태그를 사용하여 다시 시작할 인스턴스를 정확히 찾아낼 수 있습니다.

    중요

    AutomationAssumeRole 필드에 역할 ARN을 지정해야 합니다. State Manager은(는) 수임 역할을 사용하여 사용자 대신 실행서에 지정된 AWS 서비스을(를) 호출하고 Automation 연결을 실행합니다.

  8. 연결을 주기적으로 실행하려면 일정 지정 섹션에서 On Schedule(일정에 따라)을 선택합니다. 이 옵션을 선택할 경우 제공된 옵션을 사용하여 Cron 또는 Rate 표현식으로 일정을 생성합니다. State Manager용 Cron 및 Rate 표현식에 대한 자세한 내용은 연결에 대한 Cron 및 Rate 표현식 섹션을 참조하세요.

    참고

    Rate 표현식은 실행서를 사용하는 State Manager 연결에 대해 선호되는 예약 메커니즘입니다. Rate 표현식을 사용하면 동시에 실행되는 자동화가 최대 수에 도달하는 경우 연결 실행 유연성이 더 큽니다. 속도 일정에서는 Systems Manager가 동시 자동화가 최대 수에 도달하여 조절되었다는 알림을 수신한 잠시 후에 자동화를 재시도할 수 있습니다.

    연결을 한 번만 실행하려면 No schedule(일정 없음)을 선택합니다.

  9. (선택 사항) 속도 제어(Rate Control) 섹션에서 동시성(Concurrency)오류 임계값(Error threshold) 옵션을 선택하여 AWS 리소스에 대한 자동화 배포를 제어합니다.

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

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

      • [백분율(percentage)]을 선택하여 자동화를 동시에 실행할 수 있는 대상의 백분율을 입력합니다.

    2. Error threshold(오류 임계값) 섹션에서 옵션을 선택합니다.

      • [오류(errors)]를 선택하여 Automation을 통한 다른 리소스로의 자동화 전송이 중지될 때까지 허용되는 오류 수(절대 개수)를 입력합니다.

      • [백분율(percentage)]을 선택하여 Automation을 통한 다른 리소스로의 자동화 전송이 중지될 때까지 허용되는 백분율을 입력합니다.

    자동화에서 대상 및 속도 제어 사용에 대한 자세한 내용은 대규모로 자동화 실행 섹션을 참조하세요.

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

    중요

    연결을 생성하면 즉시 지정된 대상에 대해 연결이 실행됩니다. 그런 다음 cron 또는 rate 표현식을 기반으로 연결이 실행됩니다. [일정 없음(No schedule)]을 선택한 경우 연결이 다시 실행되지 않습니다.

자동화를 실행하는 연결 생성(명령줄)

다음 절차에서는 AWS CLI(Linux 또는 Windows) 또는 AWS Tools for PowerShell을 사용하여 자동화를 실행하는 State Manager 연결을 생성하는 방법을 설명합니다.

시작하기 전 준비 사항

다음 절차를 완료하기 전에 먼저 Runbook을 실행하는 데 필요한 권한이 포함된 IAM 서비스 역할을 생성하고 AWS Systems Manager의 기능인 Automation에 대해 신뢰 관계를 구성했는지 확인하십시오. 자세한 내용은 작업 1: Automation을 위한 서비스 역할 생성 단원을 참조하십시오.

자동화를 실행하는 연결을 생성하려면
  1. 아직 하지 않은 경우 AWS CLI 또는 AWS Tools for PowerShell을 설치하고 구성합니다.

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

  2. 다음 명령을 실행하여 문서 목록을 확인합니다.

    Linux & macOS
    aws ssm list-documents
    Windows
    aws ssm list-documents
    PowerShell
    Get-SSMDocumentList

    연결에 사용할 실행서의 이름을 기록해 둡니다.

  3. 다음 명령을 실행하여 런북에 대한 세부 정보를 봅니다. 다음 명령에서 실행서 이름을 자신의 정보로 바꿉니다.

    Linux & macOS
    aws ssm describe-document \ --name runbook name

    --automation-target-parameter-name 옵션에 사용할 파라미터 이름(예: InstanceId)에 유의하십시오. 이 파라미터는 자동화가 실행되는 리소스 유형을 결정합니다.

    Windows
    aws ssm describe-document ^ --name runbook name

    --automation-target-parameter-name 옵션에 사용할 파라미터 이름(예: InstanceId)에 유의하십시오. 이 파라미터는 자동화가 실행되는 리소스 유형을 결정합니다.

    PowerShell
    Get-SSMDocumentDescription ` -Name runbook name

    AutomationTargetParameterName 옵션에 사용할 파라미터 이름(예: InstanceId)에 유의하십시오. 이 파라미터는 자동화가 실행되는 리소스 유형을 결정합니다.

  4. State Manager 연결을 사용하여 자동화를 실행하는 명령 생성 각 example resource placeholder를 사용자의 정보로 바꿉니다.

    태그를 사용하여 대상 지정

    Linux & macOS
    aws ssm create-association \ --association-name association name \ --targets Key=tag:key name,Values=value \ --name runbook name \ --parameters AutomationAssumeRole=arn:aws:iam::123456789012:role/RunbookAssumeRole \ --automation-target-parameter-name target parameter \ --schedule "cron or rate expression"
    참고

    AWS CLI를 사용하여 연결을 생성한 경우 --targets 파라미터를 사용하여 연결에 대한 인스턴스를 대상으로 지정합니다. --instance-id 파라미터를 사용하지 마십시오. --instance-id 파라미터는 레거시 파라미터입니다.

    Windows
    aws ssm create-association ^ --association-name association name ^ --targets Key=tag:key name,Values=value ^ --name runbook name ^ --parameters AutomationAssumeRole=arn:aws:iam::123456789012:role/RunbookAssumeRole ^ --automation-target-parameter-name target parameter ^ --schedule "cron or rate expression"
    참고

    AWS CLI를 사용하여 연결을 생성한 경우 --targets 파라미터를 사용하여 연결에 대한 인스턴스를 대상으로 지정합니다. --instance-id 파라미터를 사용하지 마십시오. --instance-id 파라미터는 레거시 파라미터입니다.

    PowerShell
    $Targets = New-Object Amazon.SimpleSystemsManagement.Model.Target $Targets.Key = "tag:key name" $Targets.Values = "value" New-SSMAssociation ` -AssociationName "association name" ` -Target $Targets ` -Name "runbook name" ` -Parameters @{ "AutomationAssumeRole"="arn:aws:iam::123456789012:role/RunbookAssumeRole" } ` -AutomationTargetParameterName "target parameter" ` -ScheduleExpression "cron or rate expression"
    참고

    AWS Tools for PowerShell를 사용하여 연결을 생성한 경우 Target 파라미터를 사용하여 연결에 대한 인스턴스를 대상으로 지정합니다. InstanceId 파라미터를 사용하지 마십시오. InstanceId 파라미터는 레거시 파라미터입니다.

    파라미터 값을 사용하여 대상 지정

    Linux & macOS
    aws ssm create-association \ --association-name association name \ --targets Key=ParameterValues,Values=value,value 2,value 3 \ --name runbook name \ --parameters AutomationAssumeRole=arn:aws:iam::123456789012:role/RunbookAssumeRole \ --automation-target-parameter-name target parameter \ --schedule "cron or rate expression"
    Windows
    aws ssm create-association ^ --association-name association name ^ --targets Key=ParameterValues,Values=value,value 2,value 3 ^ --name runbook name ^ --parameters AutomationAssumeRole=arn:aws:iam::123456789012:role/RunbookAssumeRole ^ --automation-target-parameter-name target parameter ^ --schedule "cron or rate expression"
    PowerShell
    $Targets = New-Object Amazon.SimpleSystemsManagement.Model.Target $Targets.Key = "ParameterValues" $Targets.Values = "value","value 2","value 3" New-SSMAssociation ` -AssociationName "association name" ` -Target $Targets ` -Name "runbook name" ` -Parameters @{ "AutomationAssumeRole"="arn:aws:iam::123456789012:role/RunbookAssumeRole"} ` -AutomationTargetParameterName "target parameter" ` -ScheduleExpression "cron or rate expression"

    AWS Resource Groups을 사용하여 대상 지정

    Linux & macOS
    aws ssm create-association \ --association-name association name \ --targets Key=ResourceGroup,Values=resource group name \ --name runbook name \ --parameters AutomationAssumeRole=arn:aws:iam::123456789012:role/RunbookAssumeRole \ --automation-target-parameter-name target parameter \ --schedule "cron or rate expression"
    Windows
    aws ssm create-association ^ --association-name association name ^ --targets Key=ResourceGroup,Values=resource group name ^ --name runbook name ^ --parameters AutomationAssumeRole=arn:aws:iam::123456789012:role/RunbookAssumeRole ^ --automation-target-parameter-name target parameter ^ --schedule "cron or rate expression"
    PowerShell
    $Targets = New-Object Amazon.SimpleSystemsManagement.Model.Target $Targets.Key = "ResourceGroup" $Targets.Values = "resource group name" New-SSMAssociation ` -AssociationName "association name" ` -Target $Targets ` -Name "runbook name" ` -Parameters @{ "AutomationAssumeRole"="arn:aws:iam::123456789012:role/RunbookAssumeRole"} ` -AutomationTargetParameterName "target parameter" ` -ScheduleExpression "cron or rate expression"

    여러 계정 및 리전을 대상으로 지정

    Linux & macOS
    aws ssm create-association \ --association-name association name \ --targets Key=ResourceGroup,Values=resource group name \ --name runbook name \ --parameters AutomationAssumeRole=arn:aws:iam::123456789012:role/RunbookAssumeRole \ --automation-target-parameter-name target parameter \ --schedule "cron or rate expression" \ --target-locations Accounts=111122223333,444455556666,444455556666,Regions=region,region
    Windows
    aws ssm create-association ^ --association-name association name ^ --targets Key=ResourceGroup,Values=resource group name ^ --name runbook name ^ --parameters AutomationAssumeRole=arn:aws:iam::123456789012:role/RunbookAssumeRole ^ --automation-target-parameter-name target parameter ^ --schedule "cron or rate expression" ^ --target-locations Accounts=111122223333,444455556666,444455556666,Regions=region,region
    PowerShell
    $Targets = New-Object Amazon.SimpleSystemsManagement.Model.Target $Targets.Key = "ResourceGroup" $Targets.Values = "resource group name" New-SSMAssociation ` -AssociationName "association name" ` -Target $Targets ` -Name "runbook name" ` -Parameters @{ "AutomationAssumeRole"="arn:aws:iam::123456789012:role/RunbookAssumeRole"} ` -AutomationTargetParameterName "target parameter" ` -ScheduleExpression "cron or rate expression" ` -TargetLocations @{ "Accounts"=["111122223333,444455556666,444455556666"], "Regions"=["region,region"]

    이 명령은 다음과 비슷한 새 연결의 세부 정보를 반환합니다.

    Linux & macOS
    {
    "AssociationDescription": {
        "ScheduleExpression": "cron(0 7 ? * MON *)",
        "Name": "AWS-StartEC2Instance",
        "Parameters": {
            "AutomationAssumeRole": [
                "arn:aws:iam::123456789012:role/RunbookAssumeRole"
            ]
        },
        "Overview": {
            "Status": "Pending",
            "DetailedStatus": "Creating"
        },
        "AssociationId": "1450b4b7-bea2-4e4b-b340-01234EXAMPLE",
        "DocumentVersion": "$DEFAULT",
        "AutomationTargetParameterName": "InstanceId",
        "LastUpdateAssociationDate": 1564686638.498,
        "Date": 1564686638.498,
        "AssociationVersion": "1",
        "AssociationName": "CLI",
        "Targets": [
            {
                "Values": [
                    "DEV"
                ],
                "Key": "tag:ENV"
            }
        ]
    }
    }
    
    Windows
    {
    "AssociationDescription": {
        "ScheduleExpression": "cron(0 7 ? * MON *)",
        "Name": "AWS-StartEC2Instance",
        "Parameters": {
            "AutomationAssumeRole": [
                "arn:aws:iam::123456789012:role/RunbookAssumeRole"
            ]
        },
        "Overview": {
            "Status": "Pending",
            "DetailedStatus": "Creating"
        },
        "AssociationId": "1450b4b7-bea2-4e4b-b340-01234EXAMPLE",
        "DocumentVersion": "$DEFAULT",
        "AutomationTargetParameterName": "InstanceId",
        "LastUpdateAssociationDate": 1564686638.498,
        "Date": 1564686638.498,
        "AssociationVersion": "1",
        "AssociationName": "CLI",
        "Targets": [
            {
                "Values": [
                    "DEV"
                ],
                "Key": "tag:ENV"
            }
        ]
    }
    }
    
    PowerShell
    Name                  : AWS-StartEC2Instance
    InstanceId            : 
    Date                  : 8/1/2019 7:31:38 PM
    Status.Name           : 
    Status.Date           : 
    Status.Message        : 
    Status.AdditionalInfo : 
참고

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

State Manager 연결에 의해 실행되는 자동화의 문제 해결

Systems Manager Automation은 리전별로 계정당 동시 자동화 100개 및 대기 중인 자동화 1,000개 제한을 시행합니다. 실행서를 사용하는 State Manager 연결에서 실패(Failed) 상태와 AutomationExecutionLimitExceeded 세부 상태를 표시할 경우 자동화가 한도에 도달한 것입니다. 결과적으로 자동화가 제한됩니다. 이 문제를 해결하려면 다음과 같이 실행합니다.

  • 연결에 다른 rate 또는 cron 표현식을 사용합니다. 예를 들어 연결이 30분마다 실행하도록 지정된 경우 1시간 또는 2시간마다 실행하도록 표현식을 변경합니다.

  • 보류 중(Pending) 상태인 기존 자동화를 삭제합니다. 이러한 자동화를 삭제하면 현재 대기열을 삭제하는 것입니다.