每当我的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
任何帮助将不胜感激。
答案 0 :(得分:3)
配置AWS命令行时,它会将凭据和区域存储在~/.aws/...
中。但是,当您在启动时执行命令时,rc.local
,它不会像您一样运行。
您遇到的问题是AWS CLI无法找到任何凭据。
所以,你有几个选择:
选项1 :(首选)
不要配置本地存储的AWS凭据。而是使用IAM角色启动EC2实例。执行此操作时,不需要在您的实例上存储凭据。 AWS CLI将简单地找到&#34; IAM角色中的凭据。
选项2 :(可以工作)
从rc.local
开始,在您的帐户下运行您的脚本。这样,就可以找到存储的凭证。
更安全的做法是使用选项1。