我有一个AWS EC2实例。从这个EC2实例我创建了从EC2实例。
在创建从属实例时,我将用户数据传递给新的从属实例。在该用户数据中,我编写了用于在EC2实例中创建新目录和从S3存储桶下载文件的代码。
但问题是,脚本在EC2实例上创建新目录,但无法从S3存储桶下载文件。
用户数据脚本: -
#! /bin/bash
cd /home
mkdir pravin
s3cmd get s3://bucket/usr.sh >> download.log
如上所示,在此代码mkdir pravin
中创建目录,但s3cmd get s3://bucket/usr.sh
无法下载文件,download.log
文件也会被创建,但它仍然为空。
我如何解决这个问题? (用于此的AMI预先配置了s3cmd)
答案 0 :(得分:3)
你是否偶然运行Ubuntu?然后是Shlomo Swidler的问题Python s3cmd only runs from login shell, not during startup sequence might apply exactly:
s3cmd Python脚本(这一个:http://s3tools.org/s3cmd)似乎只在通过交互式登录会话运行时才起作用,但在引导过程中通过脚本运行时则不行。
Mitch Garnaat suggests应该始终注意在User-Data Scripts内执行代码所造成的环境差异:
这可能与您登录时环境中的某些差异有关,而不是在脚本作为启动序列的一部分运行时。我遇到过与cron作业类似的问题。
事实证明这确实是问题,Shlomo Swidler summarizes'根本原因'并且在这个主题中进一步解决了这个问题:
米奇,你的评论帮助我意识到了什么是不同的 启动顺序:操作用户是root。当我登录时,我就是 “ubuntu”用户。
s3cmd查找当前用户的〜/ .s3cfg - 其中不存在 /root/.s3cfg,仅限于/home/ubuntu/.s3cfg。
幸运的是,s3cmd允许您指定配置文件的位置 --config /home/ubuntu/.s3cfg。