如何将 Amazon EC2 实例/用户数据导入到我的计算机上的服务环境中?

如何将 Amazon EC2 实例/用户数据导入到我的计算机上的服务环境中?

我使用的是 Ubuntu 14.04 和 16.10;所以我的 init 系统可以是 upstart 也可以是 systemd。

如何在 Amazon EC2 中设置环境变量Stack Overflow 上展示了如何使用 获取实例 ID curl,然后使用 获取实例标签aws ec2 describe-tags,然后将它们作为环境变量导入到交互式 shell 或 shell 脚本中。答案之一还显示了如何运行这些数据jq

这一切都很好,但我不需要在 shell 脚本或交互式 shell 中设置变量。拥有一个像这些答案中那样的 shell 脚本source对我来说没有好处,因为在我需要设置这些东西的地方没有涉及 shell。

我需要将它们设置在从 systemd 或 upstart 启动的守护进程的环境中。特别是在 systemd 情况下,服务单元文件不是 shell 脚本根本不。要设置环境变量,请将类似内容放入Environment=单元文件中。

那么如何创建链中的最后一个链接呢?借助 Stack Overflow 上的内容,我可以读取数据并从中生成类似环境的字符串。 (我实际上正在读var=val实例元数据和用户数据但原理是一样的——我提取一些东西curl,然后进行jq其他后期处理来制作它。)var=val

如何打造链条中的最后一环,并将这些字符串放入 upstart 和 systemd 运行的特定服务的环境中?

答案1

如果您可以以以下形式获取文件中的字符串环境变量赋值,例如

SOME_NAME=some_value

那么你也许可以使用EnvironmentFile=单元文件中的设置。更多详细信息,请参见man systemd.exec.

您始终可以使用脚本替换要启动的服务,该脚本首先使用环境变量设置获取文件,然后exec获取原始服务。这也应该适用于暴发户。

例如:

#!/bin/sh
. /some/where/environment-variable-settings-file
exec original-service "$@"

相关内容