web-dev-qa-db-ja.com

ユーザーデータを介してEC2インスタンスに環境変数を設定する方法

環境変数を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
13
Gleeb

EC2インスタンスの環境変数を定義するより構成可能なアプローチの1つは、 Systems Manager Parameter Store を使用することです。このアプローチにより、 AWS KMS を使用して暗号化されたテキストとプレーンテキストの両方で、多数のEC2インスタンスのさまざまなパラメーターを管理しやすくなります。また、EC2インスタンスレベルの最小限の変更でパラメーター値を変更できます。手順は次のとおりです。

  • EC2 Systems Manager Parameter Storeで文字列パラメーター(KMSで暗号化または非暗号化)を定義します。
  • EC2が想定するIAMロールで、パラメーターストアにアクセスするために必要なアクセス許可を付与します。
  • EC2 System ManagerのAWS CLIコマンドを使用して、パラメーターを読み取り、 Get-Parameter または Get-Parameters AWS CLIコマンドと-を使用して、ユーザーデータセクションの環境変数にエクスポートします コマンド出力の制御 必要に応じて。

例: Get-Parameter コマンドを使用してdb_connection_stringパラメーター(暗号化されていない)を取得します。

export DB_CONNECTION =$(aws --region=us-east-2 ssm get-parameter --name "db_connection" --query 'Value')

注:AWS KMSキーの設定、暗号化された文字列の定義、IAMポリシーの管理などの詳細については、次の記事を参照してください。

10
Ashan

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をここに貼り付けます。

10
Ziffusion

これは、ユーザーデータを使用してすべてのユーザーに環境変数を設定する非常に簡単な方法であることがわかりました。同じ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が環境変数として設定されます。

6
hamx0r

追加する環境変数のセットを含む別のシェルスクリプトを/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にコピーします。

3

ユーザーデータスクリプトで作業を行った後、プロセスは終了します。したがって、エクスポートする環境変数は、次のプロセスでは存在しません。 1つの方法は、エクスポートを.bashrcファイルに入れて、次のセッションでも使用できるようにすることです。

    echo "export Host_URL=checkEmai-LoadBala-ICHJ82KG5C7P-23235232.us-east-1.elb.amazonaws.com" >> ~/.bashrc
1
harsh.tibrewal