并非所有用户数据步骤都在Terraform管理的AWS EC2实例中执行?

并非所有用户数据步骤都在Terraform管理的AWS EC2实例中执行?,terraform,terraform-provider-aws,Terraform,Terraform Provider Aws,地形0.12.x 我正在创建一个AWS EC2实例,并希望在启动时执行shell脚本,因此我将它们放在资源的user_data_base64中。我看到一些人被处决,但不是全部 locals { user_data = <<EOF #!/bin/bash systemctl start docker.service if [ ! -d /mnt/jenkins_master ]; then mkdir -p /mnt/jenkins_master mount /dev/xv

地形0.12.x

我正在创建一个AWS EC2实例,并希望在启动时执行shell脚本,因此我将它们放在资源的user_data_base64中。我看到一些人被处决,但不是全部

locals {
  user_data = <<EOF
#!/bin/bash
systemctl start docker.service
if [ ! -d /mnt/jenkins_master ]; then
  mkdir -p /mnt/jenkins_master
  mount /dev/xvdf /mnt/jenkins_master
fi
cp -f /etc/fstab /etc/fstab.bak
echo "UUID=`blkid -o value -s UUID /dev/xvdf` /mnt/jenkins_master   ext4    defaults,nofail        0       2" >> /etc/fstab
sudo su - jenkins
`aws ecr get-login --no-include-email --region us-east-1`
docker pull "${var.ecr_url}/${var.jenkins_image}:${var.jenkins_version}"
docker run -d -p 8080:8080 -v /mnt/jenkins_master/jenkins_home:/var/jenkins_home --name "${var.jenkins_image} ${var.ecr_url}/${var.jenkins_image}:${var.jenkins_version}"
EOF
}

resource "aws_instance" "jenkins_master_blue" {
  ...
  user_data_base64            = base64encode(local.user_data)
  ...
}
本地人{
用户数据=/etc/fstab
SudoSu-jenkins
`aws ecr获取登录信息--不包括电子邮件--地区us-east-1`
docker pull“${var.ecr_url}/${var.jenkins_image}:${var.jenkins_version}”
docker run-d-p 8080:8080-v/mnt/jenkins_master/jenkins_home:/var/jenkins_home--name“${var.jenkins_image}${var.ecr_url}/${var.jenkins_image}:${var.jenkins_version}”
EOF
}
资源“aws_实例”“jenkins_master_blue”{
...
user\u data\u base64=base64编码(local.user\u数据)
...
}

我看不到我的回声进入
/etc/fstab
,也看不到执行的
docker run…
命令。

在脚本中有几个看起来错误的命令

  • 据我所知,AWS不允许以root用户身份直接连接到EC2。例如,对于CentOS,它将是
    CentOS
    user,或者对于Amazon Linux,它将是
    ec2 user
    。在运行此脚本之前,是否切换到
    root
    ?如果没有,您需要使用
    sudo
    前缀才能编辑
    fstab
    systemctl启动docker.service

  • 您正在切换到jenkins用户:
    sudo su-jenkins
    ,然后尝试以
    jenkins
    用户的身份运行容器。您是否将
    jenkins
    用户添加到
    docker
    组?如果否,
    jenkins
    用户没有运行容器的权限

  • 您试图将目录
    mkdir-p/mnt/jenkins_master
    创建为
    userX
    并将
    mount/dev/xvdf/mnt/jenkins_master
    安装为
    userX
    。通常这意味着只有
    userX
    才能访问(至少具有写入权限)此目录。您是否检查了用户是否具有此目录中的读/写权限

  • 你为什么要把sudo su-jenkins切换到
    jenkins
    用户
    jenkins
    有权控制docker

  • 如果尚未添加docker服务,请不要忘记在自动运行中添加docker服务<代码>sudo systemctl启用docker.service


  • 简单解释:看起来问题的原因是权限不足

    啊,我没有
    sudo…
    所以我没有看到进入
    /etc/fstab
    的条目。然而,我在
    docker
    组中添加了add
    jenkins
    用户。所以你部分回答了我的问题。好的,我明白了。在这种情况下,你可以忽略我的问题4。不要忘了在挂载后检查文件夹权限。实际上,我可以在不显式地
    sudo
    ing的情况下挂载设备,所以现在我无法写入/etc/fstab是没有意义的