명령 실행 시 재부팅 처리 - AWS Systems Manager

명령 실행 시 재부팅 처리

AWS Systems Manager의 기능인 Run Command을 사용하여 관리형 노드를 재부팅하는 스크립트를 실행할 수 있으며, 스크립트에 엑시트 코드를 지정하는 것이 좋습니다. 다른 방식으로 스크립트에서 노드를 재부팅하려고 시도할 경우, 재부팅이 스크립트의 마지막 단계라 하더라도 스크립트 실행 상태가 올바로 업데이트되지 않을 수 있습니다. Windows 관리형 노드의 경우 스크립트에서 exit 3010을 지정합니다. Linux 및 macOS 관리형 노드의 경우 exit 194를 지정합니다. 종료 코드는 AWS Systems Manager 에이전트(SSM Agent)에 관리형 노드를 재부팅하라고 지시한 다음 재부팅이 완료되면 스크립트를 재시작합니다. 재부팅을 시작하기 전에 SSM Agent는 클라우드 내 Systems Manager 서비스에 서버를 재부팅하는 동안 통신이 중단됨을 알립니다.

참고

재부팅 스크립트는 aws:runDocument 플러그 인의 일부일 수 없습니다. 문서에 재부팅 스크립트가 포함되어 있고 다른 문서가 aws:runDocument 플러그 인을 통해 해당 문서를 실행하려고 할 경우 SSM Agent에 오류가 발생합니다.

idempotent 스크립트 생성

관리형 노드를 재부팅하는 스크립트를 개발할 때는 재부팅 후 떠난 곳에서 스크립트 실행을 계속하도록 idempotent 스크립트를 만듭니다. idempotent 스크립트는 상태를 관리하며 작업 수행 여부를 검증합니다. 이렇게 하면 한 번만 실행되도록 되어 있는 단계가 여러 번 실행되는 것을 방지할 수 있습니다.

다음은 관리형 노드를 여러 번 재부팅하는 idempotent 스크립트의 대략적인 예입니다.

$name = Get current computer name If ($name –ne $desiredName) { Rename computer exit 3010 } $domain = Get current domain name If ($domain –ne $desiredDomain) { Join domain exit 3010 } If (desired package not installed) { Install package exit 3010 }

예시

다음 스크립트 샘플은 종료 코드를 사용하여 관리형 노드를 재시작합니다. Linux 예제에서는 Amazon Linux에 패키지 업데이트를 설치한 다음 노드를 다시 시작합니다. Windows Server 예시에서는 노드에 Telnet-Client를 설치한 다음 노드를 다시 시작합니다.

Amazon Linux
#!/bin/bash yum -y update needs-restarting -r if [ $? -eq 1 ] then exit 194 else exit 0 fi
Windows
$telnet = Get-WindowsFeature -Name Telnet-Client if (-not $telnet.Installed) { # Install Telnet and then send a reboot request to SSM Agent. Install-WindowsFeature -Name "Telnet-Client" exit 3010 }