我想填写EC2现场实例的一些标签,但由于不可能直接在现场请求中进行,我是通过用户数据脚本完成的。当我静态指定区域时,一切都很顺利,但这不是通用的方法。当我尝试从实例userdata检测当前区域时,区域变量始终为空。我是以下列方式做到的:
#!/bin/bash
region=$(ec2-metadata -z | awk '{print $2}' | sed 's/[a-z]$//')
aws ec2 create-tags \
--region $region \
--resources `wget -q -O - http://169.254.169.254/latest/meta-data/instance-id` \
--tags Key=sometag,Value=somevalue Key=sometag,Value=somevalue
我试图在填充区域之前做出延迟
/bin/sleep 30
但这没有结果。
但是,当我在启动后手动运行此脚本时,标记会被正确添加。发生了什么事?
为什么所有aws-cli都没有从配置文件中获取默认区域?我在实例中正确配置了aws configure
,但没有--region
子句会抛出错误,指出未指定区域。
答案 0 :(得分:3)
我怀疑执行userdata脚本时ec2-metadata
命令不可用。尝试直接从元数据服务器获取区域(这是region=$(curl -fsq http://169.254.169.254/latest/meta-data/placement/availability-zone | sed 's/[a-z]$//')
无论如何)
Gmt time,Open,High,Low,Close,Volume,RSI,,Change,Gain,Loss,Avg Gain,Avg Loss,RS
15.06.2017 00:00:00.000,0.75892,0.76313,0.7568,0.75858,107799.5406,0,,,,,,,
16.06.2017 00:00:00.000,0.75857,0.76294,0.75759,0.76202,94367.4299,0,,0.00344,0.00344,0,,,
18.06.2017 00:00:00.000,0.76202,0.76236,0.76152,0.76188,5926.0998,0,,-0.00014,0,0.00014,,,
19.06.2017 00:00:00.000,0.76189,0.76289,0.75848,0.75902,87514.849,0,,-0.00286,0,0.00286,,,
...
AWS CLI确实使用默认配置文件中的区域。
答案 1 :(得分:0)
我最终得到了
region=$(curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | python -c "import json,sys; print"
工作得很好。但是,如果有人解释这个问题,那就好了。