我的目标是启动一个实例,以便在启动时触发启动脚本,以下载存储在AWS S3中的一些配置文件。因此,在启动脚本中,我正在设置S3存储桶详细信息,然后触发config.sh
,其中aws s3 sync
执行实际下载。但是,aws
命令不起作用 - 找不到执行。
启动EC2实例时,我有以下用户数据:
#!/bin/bash
# Set command from https://stackoverflow.com/a/34206311/919480
set -e -x
export S3_PREFIX='bucket-name/folder-name'
/home/ubuntu/app/sh/config.sh
中所述,AWS CLI与pip
一起安装
我认为,用户数据脚本使用root
用户ID运行。这就是为什么我在用户数据中/home/ubuntu/
因为$HOME
没有解析为/home/ubuntu/
。实际上,config.sh
中的第一个命令是mkdir /home/ubuntu/csv
,它创建了一个所有者为root
的目录!
那么,结论是,用户数据是否在root
用户ID下运行是否正确?
我应该使用REST API下载吗?
答案 0 :(得分:1)
作为用户数据输入的脚本以root用户身份执行,因此请勿在脚本中使用sudo命令。
请参阅:Running Commands on Your Linux Instance at Launch
一种解决方案是在执行AWS CLI之前将PATH
env变量设置为包括AWS CLI(并添加任何其他所需路径)。
答案 1 :(得分:0)
鉴于此,AWS CLI安装时没有sudo pip
,CLI无法用于root。因此,为了与ubuntu
用户一起运行,我使用了以下用户数据脚本:
#!/bin/bash
su ubuntu -c '$HOME/app/sh/config.sh default`
在config.sh
中,参数default
用于在调用CLI之前构建完整的S3 URI。但是,尽管可以通过正常登录访问$HOME/.local/bin/aws
,但只有完整路径aws
才能成功调用。