如何在 ec2 实例的用户数据中运行我自己的 shell 脚本
Posted
技术标签:
【中文标题】如何在 ec2 实例的用户数据中运行我自己的 shell 脚本【英文标题】:How to run my own shell script inside user data in ec2 instance 【发布时间】:2021-06-09 05:34:39 【问题描述】:我有一个 shell 脚本,它从 s3 存储桶中复制文件,然后运行 python 脚本,然后删除复制的文件。 这个文件panorama.sh 位于我的ec2 实例的/home/ubuntu 目录中。 我已将我的 ec2 实例的用户数据修改如下
Content-Type: multipart/mixed; boundary="//"
MIME-Version: 1.0
--//
Content-Type: text/cloud-config; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="cloud-config.txt"
#cloud-config
cloud_final_modules:
- [scripts-user, always]
--//
Content-Type: text/x-shellscript; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="userdata.txt"
#!/bin/sh
sh ./panorama.sh
但是这似乎不起作用,因为当我在 /var/log/cloud-init-output.log 中检查我的云监视日志时,我最终得到了这个
sh: 0: 无法打开 ./panorama.sh
Cloud-init v. 20.4.1-0ubuntu1~18.04.1 在 2021 年 3 月 11 日星期四 08:31:38 +0000 运行“modules:final”。上升 17.05 秒。
2021-03-11 08:31:38,684 - cc_scripts_user.py [警告]:无法运行模块脚本-用户(/var/lib/cloud/instance/scripts 中的脚本)
2021-03-11 08:31:38,684 - util.py [警告]:运行模块脚本用户( 我尝试将 ls 放入用户数据中以查看当前目录中的文件。它似乎在同一个工作目录(/home/ubuntu)中。那么为什么它找不到我的shell脚本并执行它呢?
【问题讨论】:
【参考方案1】:用户数据不在/home/ubuntu
中执行,而是在根/
中执行。所以你得先改成/home/ubuntu
:
#!/bin/sh
cd /home/ubuntu
sh ./panorama.sh
【讨论】:
谢谢,这似乎有效。但是,我在 shell 脚本中的一个命令涉及将文件从 s3 存储桶复制到实例。此命令似乎没有执行并在日志中引发以下错误“致命错误:无法找到凭据”我该怎么办? @akshayacharya 没问题。如果答案有帮助,我们将不胜感激。我建议为这个新问题提出新问题,并提供相关细节。但似乎您缺少具有 s3 权限的实例角色。以上是关于如何在 ec2 实例的用户数据中运行我自己的 shell 脚本的主要内容,如果未能解决你的问题,请参考以下文章
在 EC2 实例上使用用户数据脚本运行 ansible-playbook
如何在 ec2 实例上运行元数据库(没有弹性 beantalk)