在AWS EC2实例启动脚本

时间:2016-08-29 21:18:41

标签: amazon-web-services amazon-s3 amazon-ec2 makefile

每当我的AWS EC2实例启动时,我想运行一些代码。代码应从Amazon S3下载数据,对数据执行一些操作,然后将数据复制回S3。我创建了一个makefile来执行此操作,如果我在登录实例时调用它,则可以正常工作。然后我在/ect/rc.local中放置了一个脚本(这个脚本在每次实例启动时运行),它将调用makefile。此脚本在实例启动时成功运行。我遇到的问题是,当从启动脚本调用makefile时,它不会从s3中提取数据或将数据复制到s3。我读到here设置访问密钥解决了Windows服务器的这个问题,但这对我不起作用。看起来代码只是在尝试调用任何aws命令时停止,因为在日志文件中输出始终是makefile中的第一行代码。以下是我的日志文件所说的内容:

aws s3 sync s3:<s3 bucket to get data from> <location to save data to>

以下是我的makefile中的相关代码:

### Download all data
get_data:
        aws s3 sync s3:<s3 bucket to get data from> <location to save data to>

### Copy data back to s3
copy_data_to_s3:
        aws s3 sync <location of data to copy to s3> s3:<s3 bucket data is copied to>

这是我在/etc/rc.local中的脚本:

#!/bin/bash
#
# rc.local
#
make -f <location of makefile>/Makefile > <location to save log file>/log.txt
exit 0

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:3)

配置AWS命令行时,它会将凭据和区域存储在~/.aws/...中。但是,当您在启动时执行命令时,rc.local,它不会像您一样运行。

您遇到的问题是AWS CLI无法找到任何凭据。

所以,你有几个选择:

选项1 :(首选)

不要配置本地存储的AWS凭据。而是使用IAM角色启动EC2实例。执行此操作时,不需要在您的实例上存储凭据。 AWS CLI将简单地找到&#34; IAM角色中的凭据。

选项2 :(可以工作)

rc.local开始,在您的帐户下运行您的脚本。这样,就可以找到存储的凭证。

更安全的做法是使用选项1。