AMIs 업데이트 - AWS Systems Manager

AMIs 업데이트

다음 자습서에서는 최신 패치를 포함하도록 Amazon Machine Image(AMIs)를 업데이트하는 방법을 설명합니다.

Linux AMI(AWS CLI) 업데이트

이 AWS Systems Manager Automation 시연은 AWS Command Line Interface(AWS CLI)와 Systems Manager AWS-UpdateLinuxAmi 실행서를 사용하여 지정한 최신 패키지 버전으로 Linux Amazon Machine Image(AMI)를 자동으로 패치하는 방법을 보여줍니다. Automation은 AWS Systems Manager의 기능입니다. AWS-UpdateLinuxAmi 실행서는 사이트에 특정한 추가 패키지와 구성의 설치도 자동화합니다. 이 시연을 통해 Ubuntu Server, CentOS, RHEL, SLES 또는 Amazon Linux AMIs를 포함하여 다양한 Linux 배포를 업데이트할 수 있습니다. 지원되는 Linux 버전의 전체 목록은 Patch Manager 필수 조건 섹션을 참조하세요.

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

  • Amazon Linux, Red Hat Enterprise Linux, Ubuntu Server, SLES 또는 Cent OS Amazon Machine Image(AMI)에서 모든 배포 패키지와 Amazon 소프트웨어를 업그레이드합니다. 이는 기본 실행서 동작입니다.

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

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

시작하기 전 준비 사항

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

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

파라미터 유형 설명

SourceAmiId

String

(필수) 소스 AMI ID입니다. AWS Systems Manager Parameter Store public 파라미터를 사용하여 Linux용 Amazon EC2 AMI의 최신 ID를 자동으로 참조할 수 있습니다. 자세한 내용은 Query for the latest Amazon Linux AMI IDs using AWS Systems Manager Parameter Store를 참조하세요.

IamInstanceProfileName

String

(필수) Systems Manager에 필요한 인스턴스 권한 구성에서 생성한 IAM 인스턴스 프로파일 역할의 이름입니다. 인스턴스 프로파일 역할은 인스턴스에 대해 명령 실행 또는 서비스 시작 및 중지와 같은 작업을 수행할 권한을 자동화 서비스에 부여합니다. 실행서에서는 이 인스턴스 프로파일 역할의 이름만 사용합니다.

AutomationAssumeRole

String

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

TargetAmiName

String

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

InstanceType

String

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

PreUpdateScript

String

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

PostUpdateScript

String

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

IncludePackages

String

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

ExcludePackages

String

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

자동화 단계

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

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

이 단계에서는 Amazon Elastic Compute Cloud(Amazon EC2) 사용자 데이터와 IAM 인스턴스 프로파일 역할을 사용하여 인스턴스를 시작합니다. 이때 사용자 데이터는 운영 체제에 따라 적절한 SSM Agent를 설치합니다. SSM Agent를 설치하면 Run Command, State Manager 및 Inventory와 같은 Systems Manager 기능을 사용할 수 있습니다.

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

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

  • Amazon Simple Storage Service(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를 출력으로 반환합니다.

참고

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

VPC not defined 400

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

Automation을 이용해 패치된 AMI를 생성하려면
  1. 아직 하지 않은 경우 AWS Command Line Interface(AWS CLI)를 설치하고 구성합니다.

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

  2. 다음 명령을 실행하여 AWS-UpdateLinuxAmi 실행서를 실행합니다. 각 example resource placeholder를 사용자의 정보로 바꿉니다.

    aws ssm start-automation-execution \ --document-name "AWS-UpdateLinuxAmi" \ --parameters \ SourceAmiId=AMI ID, \ IamInstanceProfileName=IAM instance profile, \ AutomationAssumeRole='arn:aws:iam::{{global:ACCOUNT_ID}}:role/AutomationServiceRole'

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

    { "AutomationExecutionId": "automation execution ID" }
  3. AWS CLI를 사용하여 자동화를 보려면 다음 명령을 실행합니다.

    aws ssm describe-automation-executions
  4. 자동화 진행 상황에 대한 세부 정보를 보려면 다음 명령을 실행합니다. 자동화 실행 ID를 자신의 정보를 바꿉니다.

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

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

    참고

    콘솔에서 자동화 상태를 모니터링할 수도 있습니다. 목록에서 방금 실행한 자동화를 선택한 후 [단계(Steps)] 탭을 선택합니다. 이 탭은 자동화 작업의 상태를 보여줍니다.

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

참고

자동화 중 실패한 단계가 있으면 [Automation 실행(Automation Executions)] 페이지에 실패에 대한 정보가 나열됩니다. 자동화는 모든 태스크를 성공적으로 완료한 후 임시 인스턴스를 종료하도록 디자인되었습니다. 단계가 실패하면 시스템이 인스턴스를 종료하지 않을 수 있습니다. 따라서 단계가 실패하면 임시 인스턴스를 수동으로 종료합니다.