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

为了dynamic构build一个configuration文件,我需要从一个实例中查询EC2来检索现有实例的信息。 我使用带有ec2 describe-instances标志的aws CLI 。 我正在运行命令的实例附加到允许查询的angular色

 {
     “版本”:“2012-10-17”,
     “声明”:[
         {
             “行动”:[
                 “EC2:DescribeAvailabilityZones”
                 “EC2:DescribeInstances”
                 “EC2:DescribeRegions”
                 “EC2:DescribeSecurityGroups”
                 “EC2:DescribeTags”
             ]
             “资源”:“*”,
             “效果”:“允许”
         }
     ]
 }

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

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

我读到这可能是由一个非时间同步的实例引起的,所以我在调用awscli之前将awscli添加到user-data文件中,但仍然得到相同的错误。 在用户数据中,我使用awscli成功访问了s3awscli

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

为了确保IAM策略的正常,我也尝试了AWSEC2ReadOnly策略,得到了同样的结果。

查询是这样完成的:

区域= “EU-中央-1”

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

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

任何人都在使用awscli EC2访问并愿意分享经验?

正如我在评论部分所说的,我终于明白这个问题是与一个缺less的$PATH 。 在我的userdata脚本中, awscli是通过pip安装的,它将其安装在/usr/local/binaws命令本身实际上是在被执行时被发现的,但是当调用describe-instances函数不知道/usr/local/bin ,必须有一个在awscli中调用的subprocess,这会导致前面提到的错误。 对此的简单修复是在userdata脚本中用/usr/local/bin预先设置$PATH

 PATH =在/ usr / local / bin目录:$ PATH; 导出PATH