cfn-init
コマンドからEC2インスタンスを再起動できません。私はインスタンスのCloudFormation::Init
メタデータに次の設定キーを持っています。CloudFormation :: Initコマンドからリブートする
dns-hostname:
commands:
dns-hostname:
env: { publicDns: !Ref PublicDns }
command: |
old=$(hostname)
sed "s|HOSTNAME=localhost.localdomain|HOSTNAME=$publicDns|" --in-place /etc/sysconfig/network
echo HOSTNAME changed from \"$old\" to \"$publicDns\"
reboot
ignoreErrors: true
すべてのコマンドは、インスタンスのホスト名を指定されたパブリックDNS名に変更することを想定しています。この変更を有効にするには再起動が必要です。cfn-init
はこれを知らないので、最後の行にreboot
への実際の呼び出しを含める必要があります。残念ながら、ビルドが(/var/log/cfn-init.log
から)次のログメッセージで失敗します。
2017-04-16 12:16:00,301 [DEBUG] Running command dns-hostname
2017-04-16 12:16:00,301 [DEBUG] Running test for command dns-hostname
2017-04-16 12:16:00,309 [DEBUG] Test command output: HOSTNAME will be changed to "bastion.example.com"
2017-04-16 12:16:00,309 [DEBUG] Test for command dns-hostname passed
2017-04-16 12:16:00,321 [ERROR] Command dns-hostname (old=$(hostname)
sed "s|HOSTNAME=localhost.localdomain|HOSTNAME=$publicDns|" --in-place /etc/sysconfig/network
echo HOSTNAME changed from \"$old\" to \"$publicDns\"
reboot
) failed
2017-04-16 12:16:00,321 [DEBUG] Command dns-hostname output: HOSTNAME changed from "ip-10-0-128-4" to "bastion.example.com"
/bin/sh: line 3: reboot: command not found
2017-04-16 12:16:00,321 [INFO] ignoreErrors set to true, continuing build
、実際のホスト名の変更は、reboot
にだけ呼び出しを失敗していません。 reboot
の代わりにshutdown -r
を使用しようとすると、同じエラーメッセージが表示され、絶対パス(sbin/reboot
)を使用しようとすると、作成がタイムアウトするだけです。これらの非常に基本的なコマンドはどのように見つからないのですか?私はここで何か簡単なものを逃している?どんな助けもありがとう!
EDITは:this postによると、共通のコマンドが利用できない場合、それはめちゃくちゃPATH
に起因する可能性があります。実際には、CloudFormation::Init docsは、env
プロパティを使用すると現在の環境が上書きされ、潜在的にはPATH
が含まれていると言います。しかし、テンプレート内にコマンド内のecho $PATH
という行を追加したところ、 "usr/local/bin:/bin:/usr/bin
"という結果が得られました。 env
プロパティが問題だったようなので、私のPATH
はまだbash
実行ファイルへのパスが含まれており、私はまだ混乱しています...