Не на 100% ясно, что должно быть достигнуто, однако, если указать пользовательские данные для используемых экземпляров EC2, то использование файла sh в S3 будет невозможно.
Необходимо указать содержимое пользовательских данных непосредственно к ресурсу aws_instance terraform.
EC2 / userdata
resource "aws_instance" "this" {
ami = "${local.ami_this_id}"
instance_type = "${var.instance_type}"
subnet_id = "${var.subnet_id}"
vpc_security_group_ids = "${var.security_group_ids}"
key_name = "${aws_key_pair.this.key_name}"
iam_instance_profile = "${var.ec2_instance_profile_id}"
user_data = data.template_file.user_data.rendered # <----- Specify userdata content
root_block_device {
volume_type = "${var.root_volume_type}"
volume_size = "${var.root_volume_size}"
delete_on_termination = true
}
}
Если это будет загрузка на S3 и копирование его в экземпляр EC2 и запуск его в качестве сценария оболочки, тогда не потребуется загрузить в S3, а затем скопировать его в экземпляры EC2 с помощью команд AWS CLI S3 или смонтировать ведро S3 внутри EC2 с помощью, например, предохранителя S3.
Загрузка S3
Сначала используйте https://www.terraform.io/docs/providers/local/r/file.html
resource "local_file" "userdata_sh" {
content = data.template_file.user_data.rendered
filename = "your_local_userdata_sh_path"
}
Затем используйте https://www.terraform.io/docs/providers/aws/r/s3_bucket_object.html для загрузки на S3.
resource "aws_s3_bucket_object" "object" {
bucket = "your_s3_bucket_name"
key = "userdata.sh"
source = "your_local_userdata_sh_path"
etag = "${filemd5("your_local_userdata_sh_path")}"
}
URL в ресурсе шаблона
Не будет быть возможным Файл шаблона должен находиться на вашем локальном компьютере. Если целью является совместное использование пользовательских данных. sh является целью, тогда рассмотрите возможность установки S3 на своей машине, например, с помощью предохранителя S3.