首页 > 解决方案 > user_data 在 terraform 应用程序之后不运行

问题描述

我正在使用 Terraform 来启动一个 Ec2 实例,我想在其中执行一些命令。我在 aws_instance 资源的 user_data 中放置了一个 bash 文件,但该文件未执行。

...
resource "aws_instance" "master" {
  ami           = lookup(var.amis, var.region)
  instance_type = var.master_instance_type
  key_name      = "id_rsa_sdtd"
  security_groups = [aws_security_group.SDTD_VPC_Security_Group.id]
  subnet_id = aws_subnet.SDTD_VPC_Subnet.id
  iam_instance_profile = "k8s-cluster-iam-master-role"
  user_data = file("./master_config.sh")

}
...

地形规划

...
 + tenancy                      = (known after apply)
 + user_data                    = "def16ed029e3ecb79f09f750c548beed53d7f60d"
 + volume_tags                  = (known after apply)
...

我的 bash 文件

#!/bin/bash
# Install kubeadm and Docker
sudo apt update && sudo apt -y upgrade
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
sudo bash -c 'echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" > /etc/apt/sources.list.d/kubernetes.list'
sudo apt update
sudo apt install -y docker-ce kubelet kubeadm kubectl
...

标签: bashubuntukubernetesamazon-ec2terraform

解决方案


您的问题中没有任何文字确认master_config.sh尚未执行。

下面的行并不意味着它没有被执行。如果它不起作用 - 你绝对应该看到/var/log/cloud-init-output.log评论中建议 的日志 + user_data = "def16ed029e3ecb79f09f750c548beed53d7f60d"

从我想到的解决方案中:

  • 使用以下格式的完整路径,不简单file("./master_config.sh")。也许你包裹不正确。
resource "aws_instance" "..." {
  user_data = "${file("/../../master_config.sh")}"
  ...
}
  • 我建议您将templates_file用于此类活动,然后在您的配置中引用它。
data "template_file" "user_data" {
  template = "${file("/../../master_config.sh")}"
  ...
}


resource "aws_instance" "master" {
  user_data = "${data.template_file.user_data.rendered}"
  ...
}


推荐阅读