如何通过用户数据在EC2实例上设置环境variables

我正在尝试设置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实例级别的最小变化的参数值。 步骤如下。

  • 在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参数存储进行简单的秘密管理