オンプレミス(閉域)環境のSSM Agent インストール失敗対処
概要
- オンプレミスとAWS 環境を接続するハイブリッド構成を対象とします。AWS Systems Manager のハイブリッドアクティベーションを使用することで、AWS のEC2 インスタンスと非 EC2 の両方を管理できます。
- マネージドノード(オンプレミスのサーバー)にSSM Agent をインストールする際に、オンプレミスが閉域の環境でありインターネットへ接続することができない場合、SSM Agent インストールが失敗することがあります。対処方法を記載します。
一般的な導入手順
- 以下の記事を参照ください。オンプレミスのサーバーを AWS Systems Manager で管理するため、一般的な手順として、オンプレミスのLinuxマシンやWindowsマシンにSSM Agent をインストールする手順を詳しく記載しています。
- ただし、上記手順は、オンプレミス環境がインターネットへ接続可の状況で検証した結果になります。もしオンプレミスがインターネットへ接続することができない場合、さらに注意事項が必要になります。次に注意事項を4つ記載します。
オンプレミス環境でSSM Agent インストール失敗を解決する
AWS 環境にVPC Endpoint を作成する
- オンプレミスがインターネットへ接続することができない場合、AWSサービスのエンドポイント (ssm.ap-northeast-1.amazonaws.com) に接続ができません。インターネットへ接続せずAWSサービスを利用できるように、AWS 環境にVPC Endpoint を作成する必要があります。
- SSM Agent やその他に利用するCloudWatch Agent などのサービス用の VPC Endpoint を作成します。SSM Agent を利用するには、以下3つのVPC Endpoint が必要です。
- com.amazonaws.ap-northeast-1.ec2messages
- com.amazonaws.ap-northeast-1.ssmmessages
- com.amazonaws.ap-northeast-1.ssm
- 以下Amazon Web Services ブログからの引用です。
(引用: https://aws.amazon.com/jp/blogs/news/operation-of-a-hybrid-environment/)
Route 53 Resolver & オンプレミス環境にDNSフォワーダーを設定する
- VPC Endpoint の作成だけでは、オンプレミス環境から名前解決ができません。オンプレミス環境からVPC Endpoint の名前解決用に、Route 53 Resolverのinbound endpoint を作成します。オンプレミス環境のサーバが参照する DNS サーバに対して、Route 53 Resolver inbound endpoint にフォワードするにようDNSフォワーダーを設定します。
- 念のため、オンプレミス環境のサーバーから、VPC Endpoint の名前解決ができることを確認しましょう。
- 以下Amazon Web Services ブログからの引用です。
(引用: https://aws.amazon.com/jp/blogs/news/operation-of-a-hybrid-environment/)
アクティベーションの有効期限切れを確認する
- SSM Agent のインストールログに、以下のエラーがある場合、ハイブリッドアクティベーションが有効期限切れになっています。アクティベーションID の再発行が必要になります。
- ERROR Registration failed due to error registering the instance with AWS SSM. ActivationExpired
SSM Agent のインストール手順を見直す
- ここまでに紹介した以下2つのアクションを行ってもSSM Agent のインストールに失敗する場合、インストール手順を見直す必要があると考えます。
- AWS 環境にVPC Endpoint を作成する
- Route 53 Resolver & オンプレミス環境にDNSフォワーダーを設定する
- Windows マシンの場合、インストーラーを “ssm-setup-cli.exe" から"AmazonSSMAgentSetup.exe" へ変更し、ログファイルを出力しています。エラーが改善されない場合は、コマンドの出力結果およびログファイルを調査します。
[System.Net.ServicePointManager]::SecurityProtocol = 'TLS12'
$code = "activation-code"
$id = "activation-id"
$region = "ap-northeast-1"
$dir = $env:TEMP + "\ssm"
New-Item -ItemType directory -Path $dir -Force
cd $dir
(New-Object System.Net.WebClient).DownloadFile("https://amazon-ssm-$region.s3.$region.amazonaws.com/latest/windows_amd64/AmazonSSMAgentSetup.exe", $dir + "\AmazonSSMAgentSetup.exe")
Start-Process .\AmazonSSMAgentSetup.exe -ArgumentList @("/q", "/log", "install.log", "CODE=$code", "ID=$id", "REGION=$region") -Wait
Get-Content ($env:ProgramData + "\Amazon\SSM\InstanceData\registration")
Get-Service -Name "AmazonSSMAgent"
参考資料
AWS Systems Managerユーザーガイド: ハイブリッド Linux ノードで SSM Agent をインストールする方法