TerraForm:无需启动即可部署 EC2 实例

时间:2021-07-10 06:54:03

标签: amazon-ec2 terraform terraform-provider-aws

我想在不同的 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 在这里对我帮助不大。欢迎任何有关处理这种情况的帮助/建议。

3 个答案:

答案 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