用户数据脚本

时间:2017-08-20 16:41:28

标签: bash amazon-web-services amazon-ec2 aws-cli

我想填写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子句会抛出错误,指出未指定区域。

2 个答案:

答案 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" 

工作得很好。但是,如果有人解释这个问题,那就好了。