绕过 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 的真实启动脚本和 运行 它。
有没有办法在没有任何自定义 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 的真实启动脚本和 运行 它。