EC2-Describe- DNS实例

时间:2015-07-23 08:32:43

标签: linux bash perl amazon-web-services amazon-ec2

几个月前我在网上发现了一个脚本,我改变并提出了下面的解决方案。 它使用EC2-Describe-Instances并使用Perl来收集实例名称,IP地址并更新Route53。

它有效,但它有点无效,我更多的是.Net程序员,我有点超出我的深度,所以希望有人可以帮助或指出我正确的方向。

我在想的是我希望它保存上次运行时的EC2-Describe-Instances副本,然后获得一份新的副本。比较差异,然后仅对已更改IP的实例运行Route53更新。任何想法?

    #!/bin/bash

set root='dirname $0'
ec2-describe-instances -O ###### -W ##### --region eu-west-1 |
perl -ne '/^INSTANCE\s+(i-\S+).*?(\S+\.amazonaws\.com)/ 
and do { $dns = $2; print "$1 $dns\n" }; /^TAG.+\sName\s+(\S+)/
and print "$1 $dns\n"' | 
perl -ane 'print "$F[0] CNAME $F[1] --replace\n"' |
grep -v '^i-' |
xargs --verbose -n 4 -I myvar /bin/sh -c '{ /usr/local/bin/cli53 rrcreate -x 300 contoso.com 'myvar'; sleep 1; printf "\n\n"; }'

- 编辑 -

基本上我需要的是一种方法来比较保存的文件和EC2-Describe-Instances的输出,然后只返回包含差异的行以反馈到其余的代码中。

类似的东西:

ChangedLines(File.txt," ec2-describe-instances -O ###### -W ##### --region eu-west-1")| perl的......

如果 文件1 = ABC DEF GHI JKL

输出= ABC DEF GHJ JKL

返回= GHJ

EC2-Descibe-Instances示例

PROMPT> ec2-describe-instances

RESERVATION r-1a2b3c4d  111122223333    my-security-group
INSTANCE    i-1a2b3c4d  ami-1a2b3c4d    ec2-203-0-113-25.compute-1.amazonaws.com    ip-10-251-50-12.ec2.internal    running my-key-pair 0       t1.micro    YYYY-MM-DDTHH:MM:SS+0000    us-west-2a  aki-1a2b3c4d            monitoring-disabled 184.73.10.99    10.254.170.223          ebs                 paravirtual xen ABCDE1234567890123  sg-1a2b3c4d default false   
BLOCKDEVICE     /dev/sda1       vol-1a2b3c4d    YYYY-MM-DDTHH:MM:SS.SSSZ    true    
RESERVATION     r-2a2b3c4d      111122223333    another-security-group
INSTANCE    i-2a2b3c4d  ami-2a2b3c4d    ec2-203-0-113-25.compute-1.amazonaws.com    ip-10-251-50-12.ec2.internal    running my-key-pair 0       t1.micro    YYYY-MM-DDTHH:MM:SS+0000    us-west-2c          windows monitoring-disabled 50.112.203.9    10.244.168.218          ebs                 hvm xen ABCDE1234567890123  sg-2a2b3c4d default false
BLOCKDEVICE     /dev/sda1        vol-2a2b3c4d    YYYY-MM-DDTHH:MM:SS.SSSZ   true

我需要捕获IP地址与上一次运行相比发生变化的行。

1 个答案:

答案 0 :(得分:1)

听起来您的实际目标是为新启动的Amazon EC2实例更新Amazon Route 53。你可以采取一些不同的方法。

在给定时间段内启动的列表实例

使用AWS Command-Line Interface (CLI)列出最近发布的实例。我在https://github.com/aws/aws-cli/issues/1209上找到了这个例子:

aws ec2 describe-instances --query 'Reservations[].Instances[?LaunchTime>=`2015-03-01`][].{id: InstanceId, ip: PrivateIpAddress}' --output text

根据您的需求进行了修改:

curl http://169.254.169.254/latest/meta-data/public-ipv4/public/

让实例更新自己

以不同的方式思考,为什么不让实例自己更新Amazon Route 53?使用调用AWS CLI的启动脚本(通过用户数据)直接更新Route 53!

实例可以通过instance metadata检索其IP地址:

aws route53 change-resource-record-sets

然后致电{{1}}更新记录。