インスタンスを再起動または起動するときに、既存の Amazon Elastic Compute Cloud (Amazon EC2) Windows インスタンスでカスタムスクリプトを実行したいと考えています。
簡単な説明
EC2 インスタンスの起動または再起動時にコマンドを実行するには、インスタンスの再起動または起動時に実行するユーザーデータスクリプトを設定します。
お使いのオペレーティングシステム (OS) に基づいて、構成では次のエージェントを使用してユーザーデータを処理します。
- Windows Server 2012 R2 以前では EC2Config を使用します。
- Windows Server 2016 と 2019 では EC2Launch を使用します。
- Windows Server 2022 と 2025 では EC2Launch v2 を使用します。
注: Amazon EC2 コンソールでインスタンスのユーザーデータを更新するには、インスタンスを停止する必要があります。ただし、EC2Launch v2 では、YAML スクリプトを使用して、停止と起動を行なわずにインスタンスを更新できます。
解決策
(EC2Launch v2 のみ) YAML スクリプトを使用して、停止と起動を行なわずにインスタンスを更新する
Remote Desktop Protocol (RDP) を使用して Windows インスタンスに接続します。
再起動のたびにスクリプトを実行するには、agent-config.yml ファイルを更新します。executeScript タスクを stage: postReady に追加し、frequency を always に設定します。
YAML ファイルの例:
version: "1.0"
config:
- stage: boot
tasks:
- task: extendRootPartition
- stage: preReady
tasks:
- task: activateWindows
inputs:
activation:
type: amazon
- task: setDnsSuffix
inputs:
suffixes:
- $REGION.ec2-utilities.amazonaws.com
- task: setAdminAccount
inputs:
password:
type: random
- task: setWallpaper
inputs:
attributes:
- hostName
- instanceId
- privateIpAddress
- publicIpAddress
- ipv6Address
- instanceSize
- availabilityZone
- architecture
path: C:\Windows\Web\Wallpaper\Windows\img0.jpg
- stage: postReady
tasks:
- task: startSsm
- task: executeScript
inputs:
- frequency: always
type: powershell
runAs: localSystem
content: |-
New-Item -Path 'C:\PowerShellTest.txt' -ItemType File
次回のインスタンスの再起動時にのみスクリプトを実行するには、C:\ProgramData\Amazon\EC2Launch\state を開き、.run-once ファイルを削除します。agent-config.yml ファイルを更新して executeScript タスクを stage: postReady に追加し、frequency を once に設定します。
重要: .run-once ファイルを削除すると、再起動時にインスタンスのローカル管理者パスワードが変更されます。キーペアなしでインスタンスを起動した場合、またはキーペアを紛失した場合、再起動時にインスタンスにアクセスできなくなる可能性があります。
コマンド構文の詳細については、「YAML 設定スクリプトの構文」を参照してください。
インスタンスを停止して起動するように設定する
注: インスタンスを停止または起動する際、インスタンスのパブリック IP アドレスは変更されます。外部トラフィックをインスタンスにルーティングするには、パブリック IP アドレスではなく Elastic IP アドレスを使用することをお勧めします。Amazon Route 53 を使用している場合は、パブリック IP アドレスが変更された際、Route 53 の DNS レコードを更新する必要が生じる場合があります。停止と起動はインスタンスの再起動とは異なります。詳細については、「EC2 インスタンスの停止および開始の動作」を参照してください。
インスタンスを停止して起動する前に、次の手順を実行します。
インスタンスのユーザーデータを更新する
コマンドをスクリプトとしてインスタンスのユーザーデータに追加します。再起動のたびに実行するようにスクリプトを構成する方法については、「その後の再起動または起動時にスクリプトを実行する」を参照してください。
注: EC2Launch v2 を起動または再起動するたびにスクリプトを実行するには、executeScript タスクまたは XML スクリプトとして YAML スクリプトを追加します。YAML の場合は、frequency を always に設定し、XML スクリプトの場合は、<persist>true</persist> タグを追加します。すべてのエージェントについて、コマンドがコマンドプロンプトで実行されるか Windows PowerShell で実行されるかを定義するタグでユーザーデータを囲みます。コマンド構文の詳細については、「Windows PowerShell スクリプトの構文」を参照してください。
問題をトラブルシューティングする
問題のトラブルシューティングを行うには、EC2Config、EC2Launch、または EC2Launch v2 のログファイルで標準出力と標準エラーストリームを確認してください。
ログファイルを見つけるには、次の場所を確認してください。
- EC2Config については、C:\Program Files\Amazon\Ec2ConfigService\Logs\Ec2Config.log を確認してください。
- EC2Launch については、C:\ProgramData\Amazon\EC2-Windows\Launch\Log\UserdataExecution.log を確認してください。
- EC2Launch v2 については、C:\ProgramData\Amazon\EC2Launch\log\agent.log を確認してください。
関連情報
起動時に新しい EC2 Windows インスタンスでコマンドを実行する方法を教えてください。