1

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

4

1 回答 1

3

您是否碰巧在运行 Ubuntu?然后 Shlomo Swidler 的问题Python s3cmd 仅从登录 shell 运行,而不是在启动序列期间可能完全适用

s3cmd Python 脚本(这个:http ://s3tools.org/s3cmd )似乎只在通过交互式登录会话运行时才有效,但在引导过程中通过脚本运行时无效。

Mitch Garnaat 建议人们应该始终注意在用户数据脚本中执行代码所造成的环境差异:

这可能与您登录时的环境中的某些差异有关,而不是脚本作为启动序列的一部分运行时的一些差异。我在 cron 作业中遇到了类似的问题。

事实证明这确实是问题所在,Shlomo Swidler在此线程中总结了“根本原因”和解决方案:

Mitch,您的评论帮助我了解了启动顺序的不同之处:操作用户是 root。当我登录时,我是“ubuntu”用户。

s3cmd 会在当前用户的 ~/.s3cfg 中查找 - 它在 /root/.s3cfg 中不存在,仅在 /home/ubuntu/.s3cfg 中存在。

幸运的是 s3cmd 允许您使用 --config /home/ubuntu/.s3cfg 指定配置文件的位置。

于 2013-04-22T08:50:25.540 回答