并非所有用户数据步骤都在Terraform管理的AWS EC2实例中执行?
地形0.12.x 我正在创建一个AWS EC2实例,并希望在启动时执行shell脚本,因此我将它们放在资源的user_data_base64中。我看到一些人被处决,但不是全部并非所有用户数据步骤都在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
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…
命令。在脚本中有几个看起来错误的命令
CentOS
user,或者对于Amazon Linux,它将是ec2 user
。在运行此脚本之前,是否切换到root
?如果没有,您需要使用sudo
前缀才能编辑fstab
和systemctl启动docker.service
sudo su-jenkins
,然后尝试以jenkins
用户的身份运行容器。您是否将jenkins
用户添加到docker
组?如果否,jenkins
用户没有运行容器的权限
mkdir-p/mnt/jenkins_master
创建为userX
并将mount/dev/xvdf/mnt/jenkins_master
安装为userX
。通常这意味着只有userX
才能访问(至少具有写入权限)此目录。您是否检查了用户是否具有此目录中的读/写权限
jenkins
用户jenkins
有权控制docker
简单解释:看起来问题的原因是权限不足啊,我没有
sudo…
所以我没有看到进入/etc/fstab
的条目。然而,我在docker
组中添加了addjenkins
用户。所以你部分回答了我的问题。好的,我明白了。在这种情况下,你可以忽略我的问题4。不要忘了在挂载后检查文件夹权限。实际上,我可以在不显式地sudo
ing的情况下挂载设备,所以现在我无法写入/etc/fstab是没有意义的