gpt4 book ai didi

linux - 用于 DNS 的 EC2-Describe-Instances

转载 作者:太空宇宙 更新时间:2023-11-04 10:49:29 25 4
gpt4 key购买 nike

几个月前,我在网上找到了一个脚本,我对其进行了更改,并提出了以下解决方案。它使用 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 =美国广播公司DEFGHIJKL

输出=美国广播公司DEF国华健JKL

返回=国华健

EC2 描述实例示例

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 地址与上次运行相比发生变化的行。

最佳答案

听起来您的实际目标是为新启动的 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, type: InstanceType, launched: LaunchTime}'

根据您的需要修改:

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

让实例自行更新

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

实例可以通过 instance metadata 检索它们的 IP 地址:

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

然后调用aws route53 change-resource-record-sets更新记录。

关于linux - 用于 DNS 的 EC2-Describe-Instances,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31582119/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com