我正在尝试设置EC2s用户数据的环境variables,但没有我似乎工作
这里是我尝试的用户数据脚本
#!/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
他们都绝对没有,如果我login并发出命令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上的用户数据脚本在启动后在其自己的进程中执行 。 环境变量在该进程中被设置,并在进程退出时消失。 你不会看到其他进程的环境变量,例如登录shell或其他程序。
你将不得不设法让这些环境变量进入任何程序需要看到他们。
你需要哪些变量可用? 在“/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设置为环境变量。
在用户数据脚本中完成这些事情后,进程退出。 所以,不管你输出的环境变量是不是在下一个过程中。 一种方法是将输出放入.bashrc文件,以便在下一次会话中也可以使用。
echo "export HOST_URL=checkEmai-LoadBala-ICHJ82KG5C7P-23235232.us-east-1.elb.amazonaws.com" >> ~/.bashrc
您可以在/etc/profile.d/yourscript.sh
添加另一个shell脚本,它将包含您要添加的一组环境变量。
该脚本将在每次启动时运行,并且您的变量将可供所有用户使用。
#!/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
上面的代码创建一个shell脚本来为aws默认区域设置环境变量并将其复制到profile.d
。
为EC2实例定义环境变量的一种更可配置的方法是使用EC2参数存储 。 这种方法可以更轻松地管理大量EC2实例的不同参数,这些参数都使用AWS KMS以及纯文本进行加密。 它也将允许更改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策略等的更多详细信息,请参阅以下文章。