aws ec2 describe-instances 不允许用户数据?

aws ec2 describe-instances 不允许用户数据?

为了动态构建配置文件,我需要查询EC2从一个实例中检索有关现有实例的信息。我使用aws 命令行界面带有ec2 describe-instances标志。我运行命令的实例连接到角色允许这样的查询:

{
    "版本":"2012-10-17",
    “陈述”: [
        {
            “行动”: [
                “ec2:描述可用性区域”,
                “ec2:描述实例”,
                “ec2:描述区域”,
                “ec2:描述安全组”,
                “ec2:描述标签”
            ],
            "资源": "*",
            “效果”:“允许”
        }
    ]
}

当实例启动时,这工作得很好,但是当我尝试从文件中获取数据时user-data,我得到:

调用 DescribeInstances 操作时发生客户端错误 (AuthFailure):AWS 无法验证提供的访问凭证

我读到,这可能是由于不同步实例,所以我在调用之前将其添加openntpd到文件中,但仍然出现相同的错误。在 中,我成功访问并使用:user-dataawscliuserdatas3route53awscli

aws s3 cp s3://s3test/foobar.yml playbook.yml

为了确保我是政策还可以,我也尝试过AWSEC2ReadOnly政策,并得到了同样的结果。

查询以这种方式完成:

区域=“欧盟-中部-1”

对于 $(aws ec2 describe-instances --debug --filters 'Name=tag:Name,Values=rabbitmq' --region "$region"|jq -r '.Reservations[].Instances[].NetworkInterfaces[].PrivateIpAddresses[].PrivateIpAddress') 中的 ip
    # [要做的事情]
完毕

请注意这是不是身份验证失败,我正在使用角色允许实例查询EC2

周围有任何人使用awscli EC2并愿意分享经验?

答案1

正如我在评论部分所说,我最终发现这个问题与缺少有关$PATH。在我的userdata脚本中,awscli是通过 来安装的pip,它会安装在 中/usr/local/bin。命令本身实际上是在执行时找到的,但是在调用函数时aws必须有一个在 中调用的子进程,而这个子进程不知道,这会导致前面提到的错误。解决这个问题的简单方法是在脚本中添加:awsclidescribe-instances/usr/local/bin$PATH/usr/local/binuserdata

PATH=/usr/local/bin:$PATH;导出 PATH

相关内容