Terraform 启动脚本对 AWS 来说太长:预期user_data长度在 (1 - 16384) 范围内,得到 #!/bin/bash

Terraform Launch Script too long for AWS: expected length of user_data to be in the range (1 - 16384), got #!/bin/bash

提问人:Pugs08 提问时间:8/18/2022 最后编辑:chicksPugs08 更新时间:4/23/2023 访问量:2143

问:

我正在使用一个模块创建一个自动扩展组,该组启动实例并为它们提供要运行的启动脚本。启动脚本相对简单,只需几个 apt gets/installs,创建一个用户,并编写一些文件。问题是我们正在编写的文件之一超过 600 行。这将以错误结束,然后是整个启动脚本。Error: expected length of user_data to be in the range (1 - 16384), got #!/bin/bash

我们通过 cat 管道来编写文件,即

cat > example.txt <<EOF

This is an example

EOF

我相当有信心这是由于启动脚本太大。aws 的最大值似乎是 16kb,而我的目前是 20kb。你们中有人知道解决这个问题的方法吗?我无法将文件放入 s3 存储桶并在启动脚本期间从存储桶中抓取,我认为这是一种选择。

bash amazon-web-services terraform eof cat

评论

1赞 Anon Coward 8/18/2022
“我无法将文件放入 s3 存储桶”,为什么不呢?
0赞 Pugs08 8/18/2022
@AnonCoward 我们只是想避免这样做,以便所有代码都位于存储库的同一位置,而不是文件在存储桶中,以后很难找到。
0赞 Mark B 8/18/2022
该文件仍可位于存储库中。您只需让 Terraform 在部署其他所有内容的同时将其复制到 S3。
0赞 Anon Coward 8/18/2022
是的,如前所述,您可以部署到 S3,然后启动。或者使用 packer 等工具构建自定义 AMI。

答:

1赞 paulg 8/18/2022 #1

您可以在 VCS 中拥有该文件,例如 git。然后,可以在用户数据中克隆或签出存储库。当然,这意味着您可以正确访问映像上的VCS,如果您使用的是自定义AMI,那么您可以将文件烘焙到AMI中,当它启动时,您可以在启动脚本中运行任何其他内容。

0赞 Eytan Naim 4/23/2023 #2

您可以使用 zipped :userdata

resource "aws_instance" "example" {
  ami           = "ami-xxx"
...
  user_data = base64gzip("#!/bin/bash\necho 'Hello, World!' | tee /tmp/hello-world.txt")
}