使用 boto 将环境变量添加到 ec2 实例
Adding an environment variable to an ec2 instance with boto
非常简单的问题,但我找不到任何人解决它,也找不到任何人提到这个问题。基本上,当我启动它时,我希望通过将环境变量与盒子相关联来向远程 ec2 盒子添加少量信息。
我看到有人提到了 tags
的概念,但我正在寻找可以从实例中天真地检查和访问的东西,但不清楚是否 tags
提供该功能。
理想情况下,在实例实例化后,任何外部方也无法访问添加这些环境变量的接口。
我意识到我可以通过设置一个安全的数据库来达到类似的效果,但是对于仅仅尝试向实例添加几个元数据来说这似乎过于复杂了。
不是在寻找讲义,但如果 link 有任何与此相关的文档,我们将不胜感激。我目前正在使用 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?
有多种方法可以将信息传递到 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 检索数据的凭证
- 从代码存储库中检索数据(但同样存在安全问题)
非常简单的问题,但我找不到任何人解决它,也找不到任何人提到这个问题。基本上,当我启动它时,我希望通过将环境变量与盒子相关联来向远程 ec2 盒子添加少量信息。
我看到有人提到了 tags
的概念,但我正在寻找可以从实例中天真地检查和访问的东西,但不清楚是否 tags
提供该功能。
理想情况下,在实例实例化后,任何外部方也无法访问添加这些环境变量的接口。
我意识到我可以通过设置一个安全的数据库来达到类似的效果,但是对于仅仅尝试向实例添加几个元数据来说这似乎过于复杂了。
不是在寻找讲义,但如果 link 有任何与此相关的文档,我们将不胜感激。我目前正在使用 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?
有多种方法可以将信息传递到 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 检索数据的凭证
- 从代码存储库中检索数据(但同样存在安全问题)