コマンド実行時の再起動の処理 - 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 はエラーが発生します。

べき等スクリプトの作成

マネージドノードを再起動するスクリプトを開発するときは、スクリプトをべき等にし、再起動後もスクリプトの実行が継続されるようにします。べき等なスクリプトは状態を管理し、アクションが実行されたかどうかを検証します。これにより、1 回のみ実行するように意図されているステップが複数回実行されなくなります。

ここでは、マネージドノードを複数回再起動するべき等なスクリプトの例をご紹介します。

$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 }