AWS EC2 - 运行用户数据时找不到 AWS 命令



我的目标是启动一个实例,以便在启动时触发启动脚本以下载存储在 AWS S3 中的一些配置文件。因此,在启动脚本中,我正在设置 S3 存储桶详细信息,然后触发aws s3 sync执行实际下载的config.sh。但是,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 下载吗?

作为用户数据输入的脚本以root 用户身份执行,因此不要在脚本中使用 sudo 命令。

请参阅: 启动时在 Linux 实例上运行命令

一种解决方案是在执行 AWS CLI 之前将PATHenv 变量设置为包含 AWS CLI(并添加任何其他必需的路径(。

解决方案

鉴于 AWS CLI 是在没有sudo pip的情况下安装的,CLI 不适用于根。因此,为了与ubuntu用户一起运行,我使用了以下用户数据脚本:

#!/bin/bash
su ubuntu -c '$HOME/app/sh/config.sh default`

config.sh中,参数default用于在调用CLI之前构建完整的S3 URI。但是,尽管可以通过正常登录访问aws,但调用仅在完整路径$HOME/.local/bin/aws下成功。

最新更新