You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Terraform使用cloud-init无法为EC2实例部署多个文件求助

问题原因与解决方法

错误分析

  1. 多Part覆盖问题:第一个配置拆分了两个part块,且均为text/cloud-config类型。cloud-init处理这类配置时,后续Part中的同名配置项(如write_files)会直接覆盖前面的内容,最终仅保留最后一个Part定义的文件。

  2. 单数组元素重复键冲突:第二个配置将两个文件的参数写在同一个数组对象内,YAML语法不允许同一对象中重复定义相同键(如content、path),解析时只会保留最后一组键值对,导致仅第二个文件生效。

正确配置

将所有文件定义放在同一个write_files数组的独立对象中,使用单个part块:

data "cloudinit_config" "userdata" {
  gzip          = true
  base64_encode = true
    
  part {
    content_type = "text/cloud-config"
    content = yamlencode({
      write_files = [
        {
          content     = data.aws_ssm_parameter.certificate.value
          path        = "/root/certificate.pem.crt"
          owner       = "root:root"
          permissions = "0644"
        },
        {
          content     = data.aws_ssm_parameter.config.value
          path        = "/root/configuration.conf"
          owner       = "root:root"
          permissions = "0644"
        }
      ]
    })
  }
}

resource "aws_instance" "ec2_ubuntu" {
  ...
  user_data_base64 = data.cloudinit_config.userdata.rendered
  ...
}

原理说明

cloud-init的write_files是数组类型配置项,每个数组元素对应一个待写入的文件。将所有文件定义放在同一write_files数组中,cloud-init会依次处理每个对象,完成多文件的写入操作。

内容的提问来源于stack exchange,提问作者Murad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 14:12:52