运行用户数据时找不到aws ec2 - aws命令

时间:2018-06-01 03:03:50

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

我的目标是启动一个实例,以便在启动时触发启动脚本,以下载存储在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

根据documentation

中所述,AWS CLI与pip一起安装

观察

我认为,用户数据脚本使用root用户ID运行。这就是为什么我在用户数据中/home/ubuntu/因为$HOME没有解析为/home/ubuntu/。实际上,config.sh中的第一个命令是mkdir /home/ubuntu/csv,它创建了一个所有者为root的目录!

那么,结论是,用户数据是否在root用户ID下运行是否正确?

分辨率

我应该使用REST API下载吗?

2 个答案:

答案 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才能成功调用。