環境変数をEC2sユーザーデータで設定しようとしていますが、何も機能していないようです
ここに私が試したユーザーデータスクリプトがあります
#!/bin/bash echo "export Host_URL=checkEmai-LoadBala-ICHJ82KG5C7P-23235232.us-east-1.elb.amazonaws.com" >> /env.sh source /env.sh
そしてもう一つ:
#!/bin/bash echo "#!/bin/bash" >> /env.sh echo "export Host_URL=checkEmai-LoadBala-ICHJ82KG5C7P-67323523.us-east-1.elb.amazonaws.com" >> /env.sh chmod +x /env.sh /env.sh
どちらも絶対に何もしません。ログインしてコマンドsource /env.sh
または/env.sh
を発行すると動作します。だからこれは私がやろうとしていることを禁じられているものでなければならない。
以下は-e -xを使用した/var/log/cloud-init-output.log
からの出力です。
+ echo 'export Host_URL=checkEmai-LoadBala-ICHJ82KG5C7P-2141709021.us-east-1.elb.amazonaws.com' + source /env.sh ++ export Host_URL=checkEmai-LoadBala-ICHJ82KG5C7P-2141709022.us-east-1.elb.amazonaws.com ++ Host_URL=checkEmai-LoadBala-ICHJ82KG5C7P-2141709022.us-east-1.elb.amazonaws.com
それでも、echo $Host_URL
は空です
要求どおり、完全なUserDataスクリプト
#!/bin/bash set -e -x echo "export Host_URL=checkEmai-LoadBala-ICHJ82KG5C7P-2141709021.us-east-1.elb.amazonaws.com" >> /env.sh source /env.sh /startup.sh staging 2649
EC2インスタンスの環境変数を定義するより構成可能なアプローチの1つは、 Systems Manager Parameter Store を使用することです。このアプローチにより、 AWS KMS を使用して暗号化されたテキストとプレーンテキストの両方で、多数のEC2インスタンスのさまざまなパラメーターを管理しやすくなります。また、EC2インスタンスレベルの最小限の変更でパラメーター値を変更できます。手順は次のとおりです。
例: Get-Parameter コマンドを使用してdb_connection_stringパラメーター(暗号化されていない)を取得します。
export DB_CONNECTION =$(aws --region=us-east-2 ssm get-parameter --name "db_connection" --query 'Value')
注:AWS KMSキーの設定、暗号化された文字列の定義、IAMポリシーの管理などの詳細については、次の記事を参照してください。
EC2のユーザーデータスクリプトは、起動後独自のプロセス内で実行されます。環境変数はそのプロセスで設定され、プロセスが終了すると消えます。他のプロセス、つまりログインシェルまたはその他のプログラムでは、環境変数は表示されません。
これらの環境変数を取得するために必要なプログラムにこれらの環境変数を取得する方法を考案する必要があります。
これらの変数をどこで使用可能にする必要がありますか? 「/startup.shステージング2649」で?
編集
これを試して:
#!/bin/bash
set -e -x
export Host_URL="checkEmai-LoadBala-ICHJ82KG5C7P-2141709021.us-east-1.elb.amazonaws.com"
/startup.sh staging 2649
次に、「/ startup.sh」を編集し、次の行を一番上に配置します。
echo $Host_URL > /tmp/var
インスタンスを起動し、/ tmp/varをここに貼り付けます。
これは、ユーザーデータを使用してすべてのユーザーに環境変数を設定する非常に簡単な方法であることがわかりました。同じAMIが複数のシナリオで動作できるようにアプリケーションを構成できます。
#!/bin/bash
echo export DB_CONNECTION="some DB connection" >> /etc/profile
echo export DB_USERNAME="my user" >> /etc/profile
echo export DB_PASSWORD="my password" >> /etc/profile
これで、すべてのユーザーのDB_CONNECTION、DB_USERNAME、およびDB_PASSWORDが環境変数として設定されます。
追加する環境変数のセットを含む別のシェルスクリプトを/etc/profile.d/yourscript.sh
に追加できます。
このスクリプトはブートアップごとに実行され、変数はすべてのユーザーが利用できます。
#!/bin/sh
echo 'export AWS_DEFAULT_REGION=ap-southeast-2' > ~/myconfiguration.sh
chmod +x ~/myconfiguration.sh
Sudo cp ~/myconfiguration.sh /etc/profile.d/myconfiguration.sh
上記のコードは、AWSデフォルトリージョンの環境変数を設定するシェルスクリプトを作成し、それをprofile.d
にコピーします。
ユーザーデータスクリプトで作業を行った後、プロセスは終了します。したがって、エクスポートする環境変数は、次のプロセスでは存在しません。 1つの方法は、エクスポートを.bashrcファイルに入れて、次のセッションでも使用できるようにすることです。
echo "export Host_URL=checkEmai-LoadBala-ICHJ82KG5C7P-23235232.us-east-1.elb.amazonaws.com" >> ~/.bashrc