将S3cmd命令作为用户数据传递给Ec2

时间:2013-04-21 12:10:16

标签: shell amazon-web-services amazon-s3 amazon-ec2 user-data

我有一个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)

1 个答案:

答案 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。

相关问题