【问题标题】:TerraForm: deploying EC2 instances without starting themTerraForm:部署 EC2 实例而不启动它们
【发布时间】:2021-09-20 07:48:11
【问题描述】:

我想在不同的 AWS 环境(dev、prod、qa)中部署我的基础设施。

该部署从自定义 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 在这里对我没有多大帮助。欢迎任何有关处理这种情况的帮助/建议。

【问题讨论】:

  • 没有这样的解决方案。创建实例时,它会由 aws 自动启动。 Tf 无法控制这一点。您可以使用用户数据来停止实例或本地执行。

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


【解决方案1】:

配置新实例会自动将其置于“已启动”状态。

正如 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

【讨论】:

    【解决方案2】:

    基本上,这完全取决于您的用例。我们一般不这样做。尽管如此,如果您想配置您的 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
    

    【讨论】:

      【解决方案3】:

      正如其他人已经说过的,您不能只是“创建”实例,它们将处于“启动”状态。

      我会问这里的确切用例是什么:

      有时,我只想创建实例,然后再启动它们。

      为什么您必须现在创建实例并在以后使用它们?不能在需要时准确地创建它们吗?在使用之前保持它们初始化的任何特定要求?还是实例需要时间才能启动?

      【讨论】:

        猜你喜欢
        • 2019-12-01
        • 2020-03-10
        • 2021-12-08
        • 2023-04-02
        • 2020-11-10
        • 2020-10-09
        • 2018-11-03
        • 2016-09-06
        • 1970-01-01
        相关资源
        最近更新 更多