연습: Linux AMI에 패치 적용(AWS CLI) - AWS Systems Manager

연습: Linux AMI에 패치 적용(AWS CLI)

이 Systems Manager 자동화 실습 과정은 AWS CLI와 Systems Manager AWS-UpdateLinuxAmi 문서를 사용하여 지정한 최신 패키지 버전으로 Linux AMI에 패치를 자동으로 적용하는 방법을 보여줍니다. AWS-UpdateLinuxAmi 문서는 사이트에 특정한 추가 패키지와 구성의 설치도 자동화합니다. 이 실습 과정을 통해 Ubuntu, CentOS, RHEL, SLES 또는 Amazon Linux AMI를 포함하여 다양한 Linux 배포를 업데이트할 수 있습니다. 지원되는 Linux 버전의 전체 목록은 패치 관리자 사전 조건 단원을 참조하십시오.

AWS-UpdateLinuxAmi 문서를 사용하면 JSON 또는 YAML로 워크플로를 만들지 않고도 이미지 유지 관리 작업을 자동화할 수 있습니다. 다음과 같은 유형의 작업을 수행하는 데 AWS-UpdateLinuxAmi 문서를 사용할 수 있습니다.

  • Amazon Linux, Red Hat, Ubuntu, SLES 또는 Cent OS Amazon 머신 이미지(AMI)에서 모든 배포 패키지와 Amazon 소프트웨어를 업그레이드합니다. 이것은 이 문서의 기본 동작입니다.

  • 기존 이미지에 SSM 에이전트를 설치하여 Systems Manager 기능을 활성화합니다. 예를 들면 Run Command를 사용하여 원격 명령을 실행하거나 인벤토리를 사용하여 소프트웨어 인벤토리를 수집할 수 있습니다.

  • 추가 소프트웨어 패키지를 설치합니다.

시작하기 전에

자동화 문서로 작업을 시작하기 전에 역할을 구성하고, 선택적으로 자동화를 위한 CloudWatch Events를 구성합니다. 자세한 정보는 Automation 시작하기 단원을 참조하십시오. 또한 이 연습에서는 AWS Identity and Access Management(IAM) 인스턴스 프로파일의 이름을 지정해야 합니다. IAM 인스턴스 프로파일의 생성에 대한 자세한 내용은 Systems Manager에 대한 IAM 인스턴스 프로파일 생성 단원을 참조하십시오.

AWS-UpdateLinuxAmi 문서는 다음 입력 파라미터를 수락합니다.

파라미터 유형 설명

SourceAmiId

문자열

(필수) 소스 AMI ID입니다. Systems Manager 파라미터 스토어 퍼블릭 파라미터를 사용하여 Linux용 EC2 AMI의 최신 ID를 자동으로 참조할 수 있습니다. 자세한 내용은 AWS Systems Manager Parameter Store를 사용하여 최신 Amazon Linux AMI ID 쿼리를 참조하십시오.

IamInstanceProfileName

문자열

(필수) Systems Manager에 대한 IAM 인스턴스 프로파일 생성에서 만든 IAM 인스턴스 프로파일 역할의 이름입니다. 인스턴스 프로파일 역할은 인스턴스에 대해 명령 실행 또는 서비스 시작 및 중지와 같은 작업을 수행할 권한을 자동화 서비스에 부여합니다. 자동화 문서에서는 이 인스턴스 프로파일 역할의 이름만 사용합니다. Amazon 리소스 이름(ARN)을 지정하면 자동화가 실행되지 않습니다.

AutomationAssumeRole

문자열

(필수) Automation 시작하기에서 만든 IAM 서비스 역할의 이름입니다. 서비스 역할(assume role)은 IAM 역할을 수임하여 사용자 대신 작업을 수행할 권한을 자동화 서비스에 부여합니다. 예를 들어, 서비스 역할은 자동화 문서에서 aws:createImage 작업을 실행할 때 자동화 서비스가 새로운 AMI를 생성할 수 있도록 합니다. 이 파라미터의 경우, 전체 ARN을 지정해야 합니다.

TargetAmiName

문자열

(선택 사항) 새로 만든 AMI의 이름입니다. 기본 이름은 원본 AMI ID, 생성 시간 및 날짜가 포함된 시스템 생성 문자열입니다.

InstanceType

문자열

(선택 사항) 작업 영역의 호스트로 시작할 인스턴스의 유형입니다. 인스턴스 유형은 리전마다 다릅니다. 기본 형식은 t2.micro입니다.

PreUpdateScript

문자열

(선택 사항) 업데이트가 적용되기 전에 실행할 스크립트의 URL. 기본값(\"none\")은 스크립트를 실행하지 않는 것입니다.

PostUpdateScript

문자열

(선택 사항) 패키지 업데이트가 적용된 후에 실행할 스크립트의 URL. 기본값(\"none\")은 스크립트를 실행하지 않는 것입니다.

IncludePackages

문자열

(선택 사항) 이름 지정된 패키지만 업데이트합니다. 기본적으로(\"all\"), 사용 가능한 업데이트는 모두 적용합니다.

ExcludePackages

문자열

(선택 사항) 어떤 조건에서나 업데이트를 보류할 패키지의 이름입니다. 기본적으로(\"none\"), 어떤 패키지도 제외되지 않습니다.

자동화 단계

AWS-UpdateLinuxAmi 문서에는 기본적으로 다음과 같은 자동화 단계가 포함됩니다.

1단계: launchInstance(aws:runInstances 작업)

이 단계에서는 Amazon EC2 사용자 데이터와 IAM 인스턴스 프로파일 역할을 사용하여 인스턴스를 시작합니다. 이때 사용자 데이터는 운영 체제에 따라 적절한 SSM 에이전트를 설치합니다. SSM 에이전트를 설치하면 Run Command, 상태 관리자, 인벤토리와 같은 Systems Manager 기능을 사용할 수 있습니다.

2단계: updateOSSoftware(aws:runCommand 작업)

이 단계에서는 시작된 인스턴스에서 다음 명령을 실행합니다.

  • Amazon S3에서 업데이트 스크립트를 다운로드합니다.

  • 선택 사항인 업데이트 전 스크립트를 실행합니다.

  • 배포 패키지와 Amazon 소프트웨어를 업데이트합니다.

  • 선택 사항인 업데이트 후 스크립트를 실행합니다.

사용자가 나중에 볼 수 있도록 /tmp 폴더에 실행 로그가 저장됩니다.

특정한 패키지 세트를 업그레이드하려면 IncludePackages 파라미터를 사용하여 목록을 입력하면 됩니다. 목록이 입력되면 시스템에서 해당하는 패키지와 그 종속 항목만 업데이트하려고 시도합니다. 다른 업데이트는 수행하지 않습니다. 기본적으로, 포함 패키지를 지정하지 않으면 이 프로그램은 사용 가능한 패키지를 모두 업데이트합니다.

특정한 패키지 세트를 업그레이드에서 제외하려면 ExcludePackages 파라미터에 목록을 입력하면 됩니다. 목록이 입력되면 다른 어떤 옵션을 지정했든 간에 이러한 패키지는 현재 버전으로 유지됩니다. 기본적으로, 제외 패키지를 지정하지 않으면 어떤 패키지도 제외되지 않습니다.

3단계: stopInstance(aws:changeInstanceState 작업)

이 단계에서는 업데이트된 인스턴스를 중지합니다.

4단계: createImage(aws:createImage 작업)

이 단계에서는 원본 ID 및 생성 시간과 링크할 수 있는 설명 이름으로 새 AMI를 만듭니다. 예를 들면 "EC2 자동화가 {{global:DATE_TIME}}에 {{SourceAmiId}}에서 생성한 AMI"와 같습니다. 여기서 DATE_TIME 및 SourceID는 자동화의 변수를 나타냅니다.

5단계: terminateInstance(aws:changeInstanceState 작업)

이 단계에서는 실행 중인 인스턴스를 종료하여 실행 작업을 정리합니다.

출력

실행 결과 새 AMI ID가 출력으로 반환됩니다.

참고

기본적으로 자동화가 AWS-UpdateLinuxAmi 문서를 실행하면 시스템이 기본 VPC에 임시 인스턴스를 생성합니다(172.30.0.0/16). 기본 VPC를 삭제했다면 다음 오류 메시지를 받게 됩니다.

VPC not defined 400

이 문제를 해결하려면 AWS-UpdateLinuxAmi 문서의 사본을 만들고 서브넷 ID를 지정해야 합니다. 자세한 내용은 VPC not defined 400 단원을 참조하십시오.

자동화를 이용해 패치가 적용된 AMI를 생성하려면

  1. 아직 하지 않은 경우 AWS CLI를 설치하고 구성합니다.

    자세한 정보는 AWS 명령줄 도구 설치 또는 업그레이드 단원을 참조하십시오.

  2. 다음 명령을 실행하여 AWS-UpdateLinuxAmi 문서를 실행하고 자동화 워크플로를 실행합니다. 파라미터 섹션에서 AMI 소스 ID, EC2 인스턴스 프로파일 역할, Automation 서비스 역할을 지정합니다.

    aws ssm start-automation-execution \ --document-name "AWS-UpdateLinuxAmi" \ --parameters \ SourceAmiId=ami-0080e4c5bc078760e, \ IamInstanceProfileName=ManagedInstanceRole, \ AutomationAssumeRole='arn:aws:iam::{{global:ACCOUNT_ID}}:role/AutomationServiceRole'"

    이 명령으로 실행 ID가 반환됩니다. 클립보드에 이 ID를 복사합니다. 이 ID를 사용하여 워크플로의 상태를 확인합니다.

    { "AutomationExecutionId": "ID" }
  3. AWS CLI를 사용하여 워크플로 실행을 보려면 다음 명령을 실행합니다.

    aws ssm describe-automation-executions
  4. 실행 진행 상황에 대한 세부 정보를 보려면 다음 명령을 실행합니다.

    aws ssm get-automation-execution --automation-execution-id ID

    업데이트 프로세스가 완료될 때까지 30분 이상 걸릴 수 있습니다.

    참고

    콘솔에서 워크플로의 상태를 모니터링할 수도 있습니다. 실행 목록에서 방금 실행한 항목을 선택한 후 단계 탭을 선택합니다. 이 탭은 워크플로 작업의 상태를 보여줍니다.

워크플로가 종료된 후 업데이트된 AMI에서 테스트 인스턴스를 시작하여 변경을 확인합니다.

참고

워크플로 중 실패한 단계가 있으면 자동화 실행 페이지에 장에 대한 정보가 나열됩니다. 워크플로는 모든 작업을 성공적으로 완료한 후 임시 인스턴스를 종료하도록 설정되어 있습니다. 단계가 실패하면 시스템이 인스턴스를 종료하지 않을 수 있습니다. 따라서 단계가 실패하면 임시 인스턴스를 수동으로 종료합니다.