代码之家  ›  专栏  ›  技术社区  ›  Suncatcher

用户数据脚本中未填充EC2实例区域

  •  0
  • Suncatcher  · 技术社区  · 9 年前

    我想填充EC2 spot实例的一些标记,但由于不可能直接在spot请求中完成,所以我通过用户数据脚本来完成。当我静态指定区域时,一切都很好,但这不是通用方法。当我尝试从实例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 子句引发未指定区域的错误。

    3 回复  |  直到 9 年前
        1
  •  3
  •   helloV    9 年前

    我怀疑 ec2-metadata 执行userdata脚本时,命令不可用。尝试直接从元数据服务器获取区域(这是什么 无论如何都会)

    region=$(curl -fsq http://169.254.169.254/latest/meta-data/placement/availability-zone |  sed 's/[a-z]$//')
    

        2
  •  2
  •   YoavBZ    4 年前

    现在,您可以使用该端点仅获取实例区域(无需解析):

    http://169.254.169.254/latest/meta-data/placement/region

    所以在这种情况下:

    region=`curl -s http://169.254.169.254/latest/meta-data/placement/region`
    
        3
  •  0
  •   Suncatcher    8 年前

    我的结局是

    region=$(curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | python -c "import json,sys; print" 
    

    推荐文章