首页 > 解决方案 > EC2用户数据在S3中复制过时版本的文件?

问题描述

因此,我正在尝试在 EC2 实例中设置 Jenkins 服务器并将其与 CasC 一起使用。我创建了一个 S3 存储桶来存储 CasC 配置并设置了一个用户数据脚本以将该配置复制到特定路径中。在用户数据脚本的第一次运行中一切顺利,文件被复制到正确的路径。但是,当我上传文件的新版本并重新启动 EC2 实例时,似乎 aws cli 正在复制旧版本,无论之后我重新启动实例多少次。这是我的用户数据脚本:

#! /bin/bash
sudo su -
yum update -y
wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
yum install jenkins java-1.8.0-openjdk-devel -y
systemctl daemon-reload

systemctl stop jenkins

aws s3 cp s3://jenkins-casc/jenkins.yaml /var/lib/jenkins/

systemctl start jenkins

这是复制命令的 cloud-init 输出:

download: s3://jenkins-casc/jenkins.yaml to var/lib/jenkins/jenkins.yaml

标签: amazon-web-servicesjenkinsamazon-s3amazon-ec2

解决方案


用户数据脚本仅在实例的“首次启动”时执行。(实际上,它是“给定实例 ID 的首次启动”。)

如果您希望在每次启动时执行脚本,请将其放在此目录中:

/var/lib/cloud/scripts/per-boot/

这是cloud-init的一个特性。


推荐阅读