首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在terraform中创建AWS实例时如何使用user_data url?

在terraform中创建AWS实例时如何使用user_data url?
EN

Stack Overflow用户
提问于 2020-02-18 09:01:29
回答 1查看 639关注 0票数 0

Terraform版本= 0.12

代码语言:javascript
复制
data "template_file" "user_data" {
  template = file("${path.module}/userdata.sh")
}

resource "aws_instance" "bespin-ec2-web-a" {
  ami = "ami-0bea7fd38fabe821a"
  instance_type = "t2.micro"
  vpc_security_group_ids = [aws_security_group.bespin-sg.id]
  subnet_id = aws_subnet.bespin-subnet-public-a.id
  associate_public_ip_address = true
  tags = {
    Name = "bespin-ec2-web-a"
  }
  user_data = data.template_file.user_data.rendered
}

我想上传user_data到S3并通过调用URL来使用它。我能做什么?

例如)

代码语言:javascript
复制
resource "template_file" "userdata_sh" {
  template = "https://test.s3.ap-northeast-2.amazonaws.com/userdata.sh"
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-18 10:03:06

然而,如果要为EC2实例指定要使用的用户数据,那么在S3中使用sh文件将是不可能的。

需要将用户数据内容直接指定到aws_instance terraform资源。

EC2/用户数据

代码语言:javascript
复制
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实例中并作为shell脚本运行,则不需要上传到S3,然后使用AWS CLI S3命令将其复制到EC2实例中,或者使用S3熔丝等将S3存储桶挂载到EC2中。

S3上传

首先,使用https://www.terraform.io/docs/providers/local/r/file.html

代码语言:javascript
复制
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。

代码语言:javascript
复制
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

是不可能的。模板文件需要在您的本地计算机中。如果共享userdata.sh是目标,那么可以考虑在您的机器上安装S3,例如使用S3熔丝。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60272362

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档