0

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実行ファイルへのパスが含まれており、私はまだ混乱しています...

答えて

1

まあ、それが見えます。私はPATHにはまだbashという実行ファイルがあり、それによってrebootコマンドが実行されるのに必要なパスがあるとは思っていましたが、テンプレートからenvプロパティを削除してすべて正常にビルドできました。 rebootコマンドを期待通りに動作させるにはまだ問題がありました。コマンドを呼び出すとすぐに実行されないようです。たとえば、次のコードでは、の再起動の前に、数字1-10 が出力されます。

echo 1 
echo 2 
echo 3 
echo 4 
echo 5 
reboot 
echo 6 
echo 7 
echo 8 
echo 9 
echo 10 

ので、インスタンスは明らかに失敗するcfn-initをcauseing、後でCloudFormation::Initのconfigsから他のコマンドを実行しているの真ん中にいる間に再起動しようとするだろう。これに対する私の解決策は、他のすべての設定後に手動でrebootと呼ばれるcommandsブロックでconfigsを実行することでした。短い話ですが、ここには作業テンプレートのスニペットがあります:

other-config: 
    ... 

# This config comes after the other b/c it manually calls 'reboot' 
dns-hostname: 
    commands: 
    dns-hostname: 
     command: !Sub | 
     publicDns=${PublicDns} 
     old=$(hostname) 
     sed "s|HOSTNAME=localhost.localdomain|HOSTNAME=$publicDns|" --in-place /etc/sysconfig/network 
     echo HOSTNAME changed from \"$old\" to \"$publicDns\" 
     reboot 
     ignoreErrors: true 
# Any other configs that call reboot can follow 
関連する問題