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

时间:2015-01-07 21:44:21

标签: python amazon-web-services amazon-ec2 environment-variables boto

非常简单的问题,但我找不到任何人解决它,或者真的提到问题。基本上我想通过在旋转时将环境变量与盒子相关联来向远程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?

1 个答案:

答案 0 :(得分:2)

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

用户数据

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

http://169.254.169.254/latest/user-data/

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

用户数据的另一个用途是它可以execute as a script。该脚本可以设置一个代码可以访问的环境变量。

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

<强>代码

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

标签是将信息与实例相关联的好方法,标签也可用于标识特定实例(例如,通过环境,项目,所有者......)。

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

其他选项

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