AWS CodeDeploy で Windows Amazon マシンイメージ (AMI) インスタンスを起動しようとしています。しかし、インスタンスを起動しようとすると、AWS CodeDeploy エージェントのログファイルに「CodeDeploy Instance Agent Service: error during start or run: Net::OpenTimeout - execution expired - C:/Windows/TEMP/ocrFxxx.tmp/lib/ruby/2.3.0/net/http.rb:880:in 'initialize'.」というエラーが表示されます。 このエラーの解決方法を教えてください。
簡単な説明
AWS が提供する Windows Server 2016 AMI インスタンスでは、メタデータまたは AWS Key Management Service (AWS KMS) ルートは初回起動時に静的に設定されます。このようなインスタンスからカスタム AMI を作成する場合、これらのルートは OS 設定の一部としてキャプチャされます。AMI から起動する新しいインスタンスは、サブネットの配置に関係なく、同じルートを保持します。
これらの静的ルートは、以下のいずれかに該当しない限り、カスタム AMI から起動するときに更新されません。
- カスタム AMI に Sysprep を使用しています。
- Amazon Elastic Compute Cloud (Amazon EC2) の起動初期化タスクは、AMI を作成する前にスケジュールされていました。
このような AMI から別の Amazon Virtual Private Cloud (Amazon VPC)、サブネット、または CIDR ブロックに EC2 インスタンスを起動すると、次のことが起こります。
- 設定されたルートが無効になります。
- インスタンスは、インスタンスのアクティベーションに必要なメタデータサービスまたは AWS KMS サーバーにアクセスできません。
解決方法
1. Windows でカスタム AMI を作成します。
2. ステップ 1 で作成したカスタム AMI を使用して、新しいインスタンスを起動します。
重要: Sysprep を使用している場合は、新しいインスタンスの起動後に Sysprep を使用します。
3. 起動した Windows インスタンスに接続します。
4. 管理者として Windows PowerShell にログインします。
5. PowerShell で、C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts に移動します。その後、次のように入力します。
.\InitializeInstance.ps1 -Schedule
6. Enter キーを押します。
7. ステップ 3 で作成したインスタンスをシャットダウンします。次に、シャットダウンしたインスタンスから新しいインスタンスを作成します。
8. 新しい AMI を使用して CodeDeploy でインスタンスを起動します。