我对 AWS 还很陌生,想知道一个好的做法:
我有一个 python 应用程序,它有用于开发、登台和生产的单独配置集。
在代码中我目前使用环境变量或目录中的文件集来识别环境(这显然不是 ste SCM 的一部分)
如何将 EC2 实例标记为暂存,以便我的 python 应用程序可以检测到它并应用正确的配置集?
答案1
至少有两种方法:
- 最简单的方法是使用标签. 具有名为“环境”且值为开发、暂存或生产的标签
- 为每个环境设置单独的子网、VPC 或账户。这样可以提供更好的隔离,并可以减少在错误的环境中工作的机会
答案2
这通常通过实例来完成tags
EC2 实例可以有任意数量的 key:value 格式的标签。它们通常被广泛用于帮助进一步的流程识别实例角色/类型/环境/等
一些例子:
sometag:somevalue
env:prod
type:webserver
backup:yes
既然您提到了 Python,我假设您正在使用 BOTO。查看 boto 文档,您甚至可以根据某些标签进行过滤:https://boto3.readthedocs.io/en/latest/reference/services/ec2.html#EC2.Client.describe_instances
该文档页面上注明:
标签 :键 =*值*- 分配给资源的标签的键/值组合。在过滤器名称中指定标签的键,在过滤器值中指定标签的值。例如,对于标签 Purpose=X,在过滤器名称中指定 tag:Purpose,在过滤器值中指定 X。
进一步说明文档中的示例:
Filters=[
{
'Name': 'tag:env',
'Values': [
'prod'
]
},
],
除了 BOTO,许多其他 AWS 交互实用程序通常都会具有基于实例标记的类似过滤器或查询系统。例如 Ansible 等。
实例截图标签EC2 控制台中的面板:
答案3
Tim 的回答是最好的。最好使用单独的 VPC。使用 lambda,您可以安排夜间和周末的关闭,以关闭所有不使用的 DEV/UAT 服务器。
保持网络分离可以更安全地防止意外的代码更改。