我试图用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
它的工作原理.所以这一定是我要做的事情是禁止的.
这是/var/log/cloud-init-output.log
使用-e -x 的输出
+ 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
Ziffusion.. 10
EC2上的用户数据脚本在启动后在其自己的进程中执行.环境变量在该进程中设置,并在进程退出时消失.您将不会在其他进程中看到环境变量,即登录shell或其他程序.
您将不得不设计一种方法将这些环境变量放入需要查看它们的程序中.
你在哪里需要这些变量?在"/startup.sh staging 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.
EC2上的用户数据脚本在启动后在其自己的进程中执行.环境变量在该进程中设置,并在进程退出时消失.您将不会在其他进程中看到环境变量,即登录shell或其他程序.
您将不得不设计一种方法将这些环境变量放入需要查看它们的程序中.
你在哪里需要这些变量?在"/startup.sh staging 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.
为EC2实例定义环境变量的一种更可配置的方法是使用EC2参数存储.这种方法可以更轻松地管理大量EC2实例的不同参数,这些参数都使用AWS KMS和纯文本加密.它还允许在EC2实例级别的最小变化时更改参数值.步骤如下.
在EC2 Systems Manager参数存储中定义字符串参数(使用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策略等的更多详细信息,请参阅以下文章.
使用EC2参数存储保护应用程序秘密
通过AWS'EC2参数存储管理简单的秘密
我发现这是使用用户数据为所有用户设置环境变量的一种非常简单的方法.它允许我配置应用程序,以便相同的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设置为环境变量.