首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >并非所有用户数据步骤都在Terraform管理的亚马逊网络服务EC2实例中执行?

并非所有用户数据步骤都在Terraform管理的亚马逊网络服务EC2实例中执行?
EN

Stack Overflow用户
提问于 2020-11-12 09:07:43
回答 1查看 258关注 0票数 0

Terraform 0.12.x

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

代码语言:javascript
复制
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中,也没有看到执行的docker run ...命令。

EN

回答 1

Stack Overflow用户

发布于 2020-11-12 09:29:44

下面是脚本中一些看起来错误的命令

据我所知,

  1. 不允许以超级用户身份直接连接到EC2。例如,对于CentOS,它将是centos用户,或者对于Amazon Linux,它将是ec2-user。在运行此脚本之前,您是否切换到root?如果不是,则需要使用sudo前缀才能编辑fstabsystemctl start docker.service.

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

  1. 您尝试以userX身份创建目录mkdir -p /mnt/jenkins_master,并以userX身份装载它。通常,这意味着唯一的userX将能够访问(至少写权限)此目录。您是否检查过jenkins用户对此目录是否具有读/写权限?

  1. 为什么将sudo su - jenkins切换为jenkins用户?jenkins有权控制docker?

  1. 如果尚未添加docker服务,请不要忘记在自动运行中添加该服务。sudo systemctl enable docker.service.

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

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

https://stackoverflow.com/questions/64796469

复制
相关文章

相似问题

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