使用 boto 将环境变量添加到 ec2 实例

Sla*_*off 2 python environment-variables amazon-ec2 boto amazon-web-services

非常简单的问题,但我找不到任何人解决这个问题,或者确实提到这个问题。基本上,我希望通过在启动远程 ec2 盒子时将环境变量与该盒子关联起来,向远程 ec2 盒子添加少量信息。

我已经看到一些关于 的概念的提及tags,但我正在寻找可以在实例内天真地检查和访问的东西,并且尚不清楚是否tags提供该功能。

理想情况下,在实例化实例后,任何外部方也无法访问添加这些环境变量的接口。

我意识到我可以通过设置一个安全数据库来实现类似的效果,但这似乎过于复杂,只是尝试向实例添加一些元数据。

不是在寻找讲义,但任何有关这方面的文档的链接将不胜感激。我目前正在使用boto(下面的代码),所以适合boto框架的东西将是理想的,但如果我必须下降到亚马逊的 REST api,那也不会是世界末日。

def create_instances(connection, type, number, **kwargs):
    kwargs.update({
        'min_count': number,
        'max_count': number
    })
    return connection.run_instances(**kwargs).instances  # maybe if kwargs had an environment variable?
Run Code Online (Sandbox Code Playgroud)

Joh*_*ein 5

有多种方法可以将信息传递到 Amazon EC2 实例,但并非所有方法都一定能满足您的要求,因为实例在启动后无法访问。

用户数据

启动 Amazon EC2 实例时,可以指定用户数据。可通过访问 URL 从实例内访问用户数据的内容:

http://169.254.169.254/latest/user-data/
Run Code Online (Sandbox Code Playgroud)

实例上的代码可以查询此 URL(该 URL 由虚拟机管理程序拦截,并且只能从实例本身查看)以访问信息。

用户数据的另一个用途是它可以作为脚本执行。该脚本可以设置您的代码可以访问的环境变量。

但是,用户数据可以通过 EC2 管理控制台或通过呼叫查看DescribeInstanceAttribute,因此这可能无法满足您的安全要求。

标签

另一种选择是使用标签。这些是与 EC2 实例(或 AWS 中的其他对象)关联的名称-值对。可以通过调用“DescribeTags”来检索标签,但 boto 有一些访问它们的快捷方式。

标签是将信息与实例关联起来的好方法,标签还可以用于识别特定实例(例如,按环境、项目、所有者...)。

但是,存储在标签中的值可以在 EC2 管理控制台中并通过 API 调用查看。

其他选项

  • 从数据库中检索值(但随后您会遇到如何针对数据库进行身份验证的问题)
  • 在AMI上存储数据(但这并不容易修改每个实例的值)
  • 在Amazon S3中存储数据并使用分配给实例的 IAM 角色提供凭证以从 S3 检索数据
  • 从代码存储库检索数据(但是,同样,安全问题)