我想在不同的 AWS 环境(开发、生产、质量检查)中部署我的基础设施。
该部署从自定义 AMI 创建了几个 EC2 实例。部署时,实例处于“运行”状态。 I understand this seems to be related to some constraint in the EC2 API。但是,根据上下文,我不一定希望我的实例启动。有时,我只想创建实例,稍后再启动它们。我想这是一个很常见的场景。
在 Hashicorp 的 github 上阅读了一些相关的问题/请求,让我这么想:
一定有一些基于 TerraForm 的解决方案不需要依赖 AWS CLI/CDK 或 lambda,对吗?例如,TerraForm 脚本中的某些内容会在实例创建后立即停止。
我的 google foo 在这里对我帮助不大。欢迎任何有关处理这种情况的帮助/建议。
答案 0 :(得分:3)
配置新实例会自动将其置于“已启动”状态。
正如 Marcin 所建议的,您可以使用用户数据脚本,这里有一些伪用户数据脚本。让你弄清楚实际的实现;)
#!/bin/bash
get instance id, pass it to the subsequent line
aws ec2 stop-instances --instance-ids i-1234567890abcdef0
您可以在此处阅读有关在引导过程中运行脚本的信息:https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html
答案 1 :(得分:1)
正如其他人已经说过的,您不能只是“创建”实例,它们将处于“已启动”状态。
相反,我会问这里的确切用例是什么:
<块引用>有时,我只想创建实例,稍后再启动它们。
为什么您必须现在创建实例并在以后使用它们?不能准确地在需要时创建它们吗?在使用它们之前保持初始化的任何特定要求?还是实例需要时间才能启动?
答案 2 :(得分:1)
基本上取决于您的用例。我们一般不这样做。尽管如此,如果您想配置您的 EC2 实例并需要将它们置于停止状态,如 bschaatsbergen 建议的那样,您可以使用 Terraform 中的 user_data。确保附加具有相关权限的角色。
#!/bin/bash
INSTANCE_ID=`curl -s http://169.254.169.254/latest/meta-data/instance-id/`
REGION=`curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone | sed 's/.$//'`
aws ec2 stop-instances --instance-ids $INSTANCE_ID --region $REGION