绕过 16KB EC2 user_data 限制

Bypassing 16KB EC2 user_data limitation

有没有办法在没有任何自定义 AMI 的情况下绕过 16KB EC2 user_data 限制?我在 Terraform 中尝试了以下示例但没有成功。 instance-user-data.ps1.tmpl 是一个大约20KB的powershell脚本。

下面的脚本使用 base64encode 抱怨超过 16KB

resource "aws_instance" "instance" {
  ...

  user_data_base64 = "${base64encode(templatefile("${path.module}/instance-user-data.ps1.tmpl", {
    admin_username                = local.admin_username
    admin_password                = random_password.admin_password.result
  }))}"
}

也尝试了使用 Base64 编码的 Gzip,但脚本根本没有设置任何用户数据。

resource "aws_instance" "instance" {
  ...

  user_data_base64 = "${base64gzip(templatefile("${path.module}/instance-user-data.ps1.tmpl", {
    admin_username                = local.admin_username
    admin_password                = random_password.admin_password.result
  }))}"
}

我解决这个问题的方法是将您的 scripts/files 推送到 S3,这可以通过 Terraform aws_s3_object 资源完成,并且只需让您的 user_data 脚本下载来自 S3 的真实启动脚本和 运行 它。