User_data は、最初の起動時にのみ実行されます。あなたのイメージはカスタムのものなので、すでに一度開始されているので、user_data は無効になっていると思います。
Windows の場合、Ec2 Services Properties のボックスをチェックすることで実行できます。カスタム イメージ作成の最後に自動化する方法を検討中です。
Linux の場合もメカニズムは同じで、カスタム イメージで user_data を再度有効にする必要があると思います。
#cloud-boothook
スクリプトを user_data
から変更するため、機能させる 各起動時に実行される cloud-boothook メカニズムへのメカニズム。
編集:
PowerShell を使用して Windows で起動を再アクティブ化するコードは次のとおりです:
$configFile = "C:\\Program Files\\Amazon\\Ec2ConfigService\\Settings\\Config.xml"
[xml] $xdoc = get-content $configFile
$xdoc.SelectNodes("//Plugin") |?{ $_.Name -eq "Ec2HandleUserData"} |%{ $_.State = "Enabled" }
$xdoc.SelectNodes("//Plugin") |?{ $_.Name -eq "Ec2SetComputerName"} |%{ $_.State = "Enabled" }
$xdoc.OuterXml | Out-File -Encoding UTF8 $configFile
$configFile = "C:\\Program Files\\Amazon\\Ec2ConfigService\\Settings\\BundleConfig.xml"
[xml] $xdoc = get-content $configFile
$xdoc.SelectNodes("//Property") |?{ $_.Name -eq "AutoSysprep"} |%{ $_.Value = "Yes" }
$xdoc.OuterXml | Out-File -Encoding UTF8 $configFile
(Linux に焦点を当てた質問は知っていますが、他の人にも役立つ可能性があります ...)
テストしたところ、/var/lib/cloud
にいくつかのブートストラップ データがありました。 そのディレクトリをクリアした後、ユーザー データ スクリプトは正常に機能しました。
rm -rf /var/lib/cloud/*
Ubuntu 16.04 hvm AMI でも同じ問題に直面しました。この問題を AWS サポートに報告しましたが、問題に影響する正確な理由/バグを見つけることができませんでした.
しかし、まだあなたを助けるかもしれないものがあります.
<ブロック引用>AMI を取得する前に、/var/lib/cloud ディレクトリを (毎回) 削除します。次に、イメージの作成中に再起動しないように設定します。
これらがまだ機能しない場合は、ユーザーデータを手動で強制的に実行することで、さらにテストできます。また、tailf /var/log/cloud-init-output.log
cloud-init ステータス。ユーザーデータを実行するには、modules:final のようなもので終わる必要があります。 modules:config に貼り付けるべきではありません。
sudo rm -rf /var/lib/cloud/*
sudo cloud-init init
sudo cloud-init modules -m final
上記のコマンドが CentOS で機能するかどうかはよくわかりません。 Ubuntu でテストしました。
私の場合、/var/lib/cloud ディレクトリの削除も試みましたが、シナリオではユーザー データの実行に失敗しました。しかし、私はそれに対して別の解決策を考え出しました。上記のコマンドでスクリプトを作成し、システムの起動中にそのスクリプトを実行するようにしました。
それを実現するために、/etc/rc.local に以下の行を追加しました。
sudo bash /home/ubuntu/force-user-data.sh || exit 1
しかし、ここにキャッチがあります。これは、ブートごとにスクリプトを実行するため、#cloud-boothook のように、ブートごとにユーザー データが実行されます。最後に force-user-data.sh 自体を削除するだけで微調整できます。したがって、force-user-data.sh は次のようになります
#!/bin/bash
sudo rm -rf /var/lib/cloud/*
sudo cloud-init init
sudo cloud-init modules -m final
sudo rm -f /home/ubuntu/force-user-data.sh
exit 0
ユーザーデータを実行できない理由を明らかにしてくれる人がいれば幸いです。