EC2スポットインスタンスのタグをいくつか埋めたいと思いますが、スポットリクエストでは直接実行できないため、ユーザーデータスクリプトを使用して行います。地域を静的に指定するとすべてがうまくいくが、普遍的なアプローチではない。インスタンスのユーザーデータから現在の領域を検出しようとすると、領域変数は常に空です。私は、次の方法でそれを実行します。EC2インスタンス領域にユーザーデータスクリプトが設定されていません
#!/bin/bash
region=$(ec2-metadata -z | awk '{print $2}' | sed 's/[a-z]$//')
aws ec2 create-tags \
--region $region \
--resources `wget -q -O - http://169.254.169.254/latest/meta-data/instance-id` \
--tags Key=sometag,Value=somevalue Key=sometag,Value=somevalue
私は
/bin/sleep 30
を取り込む地域までの遅延を作ってみましたが、これは何の結果がありませんでした。
ただし、起動後にこのスクリプトを手動で実行すると、タグが正常に追加されます。何が起こっている?
aws-cliのすべてがプロファイルからデフォルト領域を取得しないのはなぜですか?私はaws configure
がインスタンス内で正しく構成されていますが、--region
節がなければ、その領域が指定されていないというエラーがスローされます。
シェルスクリプトのパスを完全修飾することは、常に良い習慣です。手動で実行すると環境はおそらく '$ PATH'を含めてかなり異なっているので、' region = $(/ usr/bin/ec2-metadata ... '(あるいはそれがシステム上のどこにあっても) –