首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将手动更新的userdata脚本添加到terraform?

如何将手动更新的userdata脚本添加到terraform?
EN

Stack Overflow用户
提问于 2021-07-21 04:17:51
回答 1查看 177关注 0票数 0

当出现中断时,我手动添加了一个新的userdata脚本。我想把这个脚本添加回terraform,这样terraform的状态就是最新的。

我不确定这里出了什么问题,它试图重新创建实例。

我的地形变化有什么问题?

在ec2实例中手动添加user_data脚本:

代码语言:javascript
运行
复制
Content-Type: multipart/mixed; boundary="//"
MIME-Version: 1.0
--//
Content-Type: text/cloud-config; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="cloud-config.txt"
#cloud-config
cloud_final_modules:
- [scripts-user, always]
--//
Content-Type: text/x-shellscript; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="userdata.txt"

#!/bin/bash
iptables -F
echo "UserData is Executed"
--//

现有配置:

cloud-init.tpl

代码语言:javascript
运行
复制
#cloud-config
---
package_update: true
packages:
  - docker

#This runs on every boot
bootcmd:
  - sh -c "sudo service docker start"

#These do not run on every boot
runcmd:
  - curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-Linux-x86_64" -o /usr/local/bin/docker-compose
  - chmod +x /usr/local/bin/docker-compose
  - sh -c "sudo service docker start"
  - mkdir /data
  - ${format_command}
  - echo "/dev/xvdf /data ext4 defaults,noatime 0 2" >> /etc/fstab
  - mount -a

#ihr-deployer key
ssh_authorized_keys:
  - ssh-rsa 
AAxxxx

data.tf

代码语言:javascript
运行
复制
data "template_file" "cloud_init" {
  template = "${file("${path.module}/cloud-init.tpl")}"

  vars = {
    format_command = "${local.new_volume == 1 ? "sudo mkfs -t ext4 /dev/xvdf" : "echo DEVICE HAS ALREADY BEEN FORMATTED"}"
  }
}

data "template_cloudinit_config" "cloud_init" {
  part {
    content = "${data.template_file.cloud_init.rendered}"
  }
}

main.tf

代码语言:javascript
运行
复制
  user_data                   = "${data.template_cloudinit_config.cloud_init.rendered}"

更改:

代码语言:javascript
运行
复制
data "template_cloudinit_config" "cloud_init" {
  part {
    content = "${data.template_file.cloud_init.rendered}"
  }

  part {
    filename     = "userdata.txt"
    content_type = "text/x-shellscript"
    content      = "iptables -F\necho \"UserData is Executed\"\n"
  }
}

输出:

user_data:"c3b472b9b74264b21237dd7e71f0ff89d76b83b2“=> "231c0e27943da00a4c0df284bf194729020ed105”(强制新资源)

EN

回答 1

Stack Overflow用户

发布于 2021-07-21 07:53:57

您需要忽略user_data更改:

代码语言:javascript
运行
复制
resource "aws_instance" "blah" {
  ...
  lifecycle {
    ignore_changes = ["user_data"]
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68460840

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档