社区首页 >问答首页 >识别ECS实例的硬编码DNS记录

识别ECS实例的硬编码DNS记录
EN

Stack Overflow用户
提问于 2021-07-20 12:11:12
回答 1查看 136关注 0票数 0

我有一个码头映像,我需要部署,同时保持一个一致的DNS记录。最重要的是,我希望有一个硬编码的实例数(例如,2个)。我喜欢ECS的易用性以及ECS代理维护正常运行时间,但是负载均衡器对于单个实例来说是过分的。到目前为止,我只是创建了一个ASG,其最小/max/期望为1,因此没有任何冲突的问题。

对于自动标度组中的实例编号,有一个非常强烈的论据(这里就是一个例子),这是有意义的,尽管我认为这是一个无法避免的非常可靠的用例。

我已经成功地修改了融水/地形-aws dns-处理程序,为ASG中的单个ECS实例提供了硬编码的DNS记录(比如instance-1.example.com),尽管它不是很漂亮。为了让两个实例(instance-1.example.cominstance-2.example.com)工作,我想我有两个选择:

  • 创建一个hacky解决方案来读取我的Lambda函数中现有的Route53记录,以“决定性地”决定在ASG生命周期挂钩中分配我的实例的索引(可能是一个好的开始)
  • 创建两个ECS集群,每个集群具有一个实例,并使用两个单独的Lambda函数

对我来说,这两个选项都不是很好的选择,所以我想知道是否有更好的方法来以类似ECS的方式部署一个Docker容器,我可以将DNS记录附加到上面。

对于上下文来说,“两个ECS集群”方法可以很好地工作,但是我要这样做三到四次,所以我将在其他几个集群的基础上得到8个ECS集群,这至少是不方便的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-21 07:15:37

如果您使用自动缩放组和启动Config或模板与用户数据.这是我在用户数据中添加的内容,可以在任何时候使用计数器自动保持Route53 DNS记录的最新更新。希望这能帮上忙!

代码语言:javascript
代码运行次数:0
复制
## --------------------------------------------------------------------------------------------------------------- ##
## --- AUTO SCALING LOGIC for user-data -------------------------------------------------------------------------- ##
## --------------------------------------------------------------------------------------------------------------- ##
## --- Get ip addresses of existing app DNS Entries (that point to app nodes, not load balancer) ----- ##
## --- Get this ip address --------------------------------------------------------------------------------------- ##
## --- If this IP Address matches any in existing list, do not create a new DNS record --------------------------- ##
## --- If this IP Address does not match any in existing list, create a new DNS record --------------------------- ##
## --------------------------------------------------------------------------------------------------------------- ##

region="us-east-1"
hosted_zone="ROUTE53-HOSTED-ZONE-ID"
vpc="vpc-ID"
r53_domain="example.com"
asg_desired="2"
application="app"

echo "USING EC2 INSTANCE META DATA TO OBTAIN IP ADDRESS ..."
echo "IF YOU ARE NOT USING DEFAULT AMZN INSTANCE, USE ifconfig OR ANOTHER METHOD TO OBTAIN THIS INSTANCE IP ..."

# CHOOSE THE PRIVATE (local-ipv4) OR PUBLIC IP DEPENDING ON USE CASE 
#this_ip=`curl http://169.254.169.254/latest/meta-data/local-ipv4`
this_ip=`curl http://169.254.169.254/latest/meta-data/public-ipv4`
echo $this_ip > /tmp/this-ip.txt

# FILTER BASED ON UNIQUE TAGS FOR YOUR TARGETED INSTANCE(S)
# THIS IS USING Application Tag. 
aws --region $region ec2 describe-instances --query "Reservations[*].Instances[? Tags[? (Key=='Application') && Value=='$application']].PublicIpAddress" --output text >> /tmp/existing-ec2-ips.txt

counter=1
until [ $counter -gt $asg_desired ]
do
  aws --region $region route53 list-resource-record-sets --hosted-zone-id $hosted_zone --query "ResourceRecordSets[?Name == 'instance-$counter.$r53_domain.'].ResourceRecords" --output text >> /tmp/existing-ips.txt
  aws --region $region route53 list-resource-record-sets --hosted-zone-id $hosted_zone --query "ResourceRecordSets[?Name == 'instance-$counter.$r53_domain.']" --output text >> /tmp/existing-records.txt
  ((counter++))
done

diff /tmp/existing-ips.txt /tmp/this-ip.txt

echo "Does this instance IP exist in a $application route53 record?"
this_ip_result=`grep $this_ip /tmp/existing-ips.txt | wc -l`

if [[ $this_ip_result -gt 0 ]]
then
  echo "Yes, this instance IP already exists in a $application route53 record."
  echo "Nothing left to do"
else
  echo "No, this instance IP does not exist in a $application route53 record."
  echo "Adding route53 record... "
  counter=1
    until [ $counter -gt $asg_desired ]
    do
        grep -L instance-$counter.$r53_domain /tmp/existing-records.txt > /tmp/instance-$counter.$r53_domain.txt
        if [ -s /tmp/instance-$counter.$r53_domain.txt ]
            then
                echo "instance-$counter.$r53_domain does not exist... Adding!"
                aws --region $region route53 change-resource-record-sets --hosted-zone-id $hosted_zone --change-batch '{ "Comment": "Auto Scaling Creating Record Set", "Changes": [ { "Action": "CREATE", "ResourceRecordSet": { "Name": "instance-'$counter'.'$r53_domain'", "Type": "A", "TTL": 120, "ResourceRecords": [ { "Value": "'"$this_ip"'" } ] } } ] }'
            else
                echo "Updating Record Set!"
                echo "Updating Route53 Records with the following IPs ..."
                diff /tmp/existing-ec2-ips.txt /tmp/existing-ips.txt | grep ">" | sed 's/> //g'
                ip_update=`diff /tmp/existing-ec2-ips.txt /tmp/existing-ips.txt | grep ">" | sed 's/> //g'`
                record_update=`grep -B 1 $ip_update /tmp/existing-records.txt | grep $application | awk '{print $1}' | awk 'FNR == 1 {print}'`
                aws --region $region route53 change-resource-record-sets --hosted-zone-id $hosted_zone --change-batch '{ "Comment": "Auto Scaling Updating Record Set", "Changes": [ { "Action": "UPSERT", "ResourceRecordSet": { "Name": "'"$record_update"'", "Type": "A", "TTL": 120, "ResourceRecords": [ { "Value": "'"$this_ip"'" } ] } } ] }'
            fi
        ((counter++))
    done
fi
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68460784

复制
相关文章
javascript将html实体转回
有时候我们可能需要向html中传递html代码。但是因为我们的后台框架使用了laravel。所以我们在赋值的时候就会变成:
魔王卷子
2019/05/31
9780
短实体,长句实体抽取
“半指针-半标注”方法实体的抽取器,基于苏神的三元组抽取方法改造,这里取消了三元组抽取模型中对s的抽取,直接抽取实体并做分类(相当于直接抽取p和o)。改造后的实体抽取方法不仅可以运用于短实体的抽取,也可以运用到长句实体的抽取。
机器学习AI算法工程
2020/09/14
1.9K0
EF实体中的修改
思路:先从ObjectContext取出实体,然后将前台传过来的DTO属性对应赋值到我们的实体上,然后调用ObjectContext的保证修改方法。
跟着阿笨一起玩NET
2018/09/19
1.1K0
springboot 根据实体类生成数据库中表BaseEntity(公共实体)配置文件application.yml 子类实体:
1.标注为@MappedSuperclass的类将不是一个完整的实体类,他将不会映射到数据库表,但是他的属性都将映射到其子类的数据库字段中。
用户5899361
2020/12/07
5K0
SpringBoot 使用注解将配置文件自动映射到属性和实体类
1. 属性单独映射 ---- 1. Controller上面配置 @PropertySource({"classpath:application.properties"}) 2. 对要配置的属性添加注解 @Value("${web.file.path}") private String filePath; 3. 接口测试 @GetMapping("/test/property-source") public Object testPropertySource() { System.out.print
山海散人
2021/03/03
1.3K0
nginx设置header如果没有值
map 指令是由 ngx_http_map_module 模块提供的,默认情况下安装 nginx 都会安装该模块。
十毛
2022/08/23
1.4K0
nginx设置header如果没有值
[NewLife.XCode]实体工厂(拦截处理实体操作)
NewLife.XCode是一个有10多年历史的开源数据中间件,支持nfx/netcore,由新生命团队(2002~2019)开发完成并维护至今,以下简称XCode。
大石头
2019/07/02
1K0
实体识别(1) -实体识别任务简介
命名实体识别(Named Entity Recognition,简称NER) , 是指识别文本中具有特定意义的词(实体),主要包括人名、地名、机构名、专有名词等等,并把我们需要识别的词在文本序列中标注出来。
致Great
2023/08/25
4910
实体识别(1) -实体识别任务简介
Apple Card实体卡曝光,只有logo没有卡号
在今年3月的春季发布会上,苹果在Apple Pay的基础上推出了信用卡“Apple Card”,就在近日,国外知名数码产品爆料者Ben Geskin在推特上展示了苹果实体信用卡的真面目,从图片上可以看出这款信用卡的设计非常简约,卡面上除了logo就是EMV芯片。
镁客网
2019/05/16
7900
JS魔法堂:再识ASCII实体、符号实体和字符实体
一、前言                                            相信大家都熟悉通过字符实体 &nbsp; 来实现多个连续空格的输入吧!本文打算对三类HTML实体及JS相关操作作进一步的整理和小结,若有纰漏请大家指正,谢谢。 二、初识HTML实体                                                                    由于HTML中某些字符是预留的(如>和<等),若要在进行HTML解析出来后能正确显示预留字符,则需要
^_^肥仔John
2018/01/18
2.2K0
实体-联系图(ER图)_实体关系图
我们通常用实体、联系和属性这三个概念来理解现实问题,因此ER模型比较接近人的思维方式。此外,ER模型用简单的图形符号表达系统分析员对问题域的理解,不熟悉计算机技术的用户也能理解它,因此,ER模型可以作为用户与分析员之间有效的交流工具。
全栈程序员站长
2022/09/29
2.3K0
实体-联系图(ER图)_实体关系图
python实现命名实体识别指标(实体级别)
{'ALBUM': [(18, 3)], 'SINGER': [(11, 3)], 'SONG': [(2, 3), (6, 3)], 'TAG': [(23, 3)]}
西西嘛呦
2020/11/12
1.3K0
将实体光盘制作成光盘映像iso文件
春节假期整理历史物件时发现一些书籍的光盘,虽然买了多年但一直没有看过,因为自己在用的电脑都没有光驱。正好老爸的电脑是带光驱的,想着趁过节把这些光盘的内容读取出来存在NAS上方便后续使用。 使用UltraISO软件直接“制作光盘映像文件”就可以将光盘的内容制作成iso文件,便于保存在磁盘等介质上。基本最长的也就是10分钟左右搞定。
Alfred Zhao
2023/02/10
2K0
HTML 字符实体
在 HTML 中不能使用小于号(<)和大于号(>),这是因为浏览器会误认为它们是标签。
用户8442333
2021/08/21
1.7K0
HTML字符实体
刚刚在修改文件的时候,空格怎么都打不上,后来反应过来得使用html字符实体,为了方便自己查找,便有了这篇文章
用砖头敲代码
2022/06/08
1.4K0
组合实体模式
组合实体模式(Composite Entity Pattern)用在 EJB 持久化机制中。一个组合实体是一个 EJB 实体 bean,代表了对象的图解。当更新一个组合实体时,内部依赖对象 beans 会自动更新,因为它们是由 EJB 实体 bean 管理的。以下是组合实体 bean 的参与者。
Java架构师必看
2020/04/13
4980
JPA实体类中的注解
@Entity   标注于实体类上,通常和@Table是结合使用的,代表是该类是实体类 @Table   标注于实体类上,表示该类映射到数据库中的表,没有指定名称的话就表示与数据库中表名为该类的简单类名的表名相对应,如果是逆向生成表的话就会以简单类名作为表名   如果指定名称,例如@Table(name="tb_user"),就表示映射到数据库中的tb_userz这个表; @Id   标注于属性上,通常是在get方法上,也可以在属性的声明上。   用于表示该属性作为ID主键 @GeneratedValue
二十三年蝉
2018/03/29
3.9K0
EntityFramework附加实体
//0.0创建修改的 实体对象 Models.BlogArticle model = new BlogArticle(); model.AId = 12; model.ATitle = "新的数据"; model.AContent = "新的数据~~~~~"; //0.1添加到EF管理容器中,并获取 实体对象 的伪包装类对象 DbEntityEntry<Models.BlogArticle> entry = db.Entry<Models.BlogArticle>(model); //**如果使用 En
liulun
2018/01/12
7570
实体识别(2) -命名实体识别实践CRF
CRF,英文全称为Conditional Random Field, 中文名为条件随机场,是给定一组输入随机变量条件下另一组输出随机变量的条件概率分布模型,其特点是假设输出随机变量构成马尔可夫(Markov)随机场。
致Great
2022/03/30
1.7K0
实体识别(2) -命名实体识别实践CRF
选择块参照中嵌套的实体
在利用ObjectARX进行CAD二次开发时,如何选择块参照中嵌套的实体,并进行进行下一步操作?这个问题的难点是:如何判断用户选中的实体到底是块参照里面的非嵌套对象实体?还是块参照中嵌套的块参照的实体?本文利用全局函数acedNEnsSelP解决了这个问题,并可实现:如果用户选择块参照中嵌套的实体,直接视为用户选择了这个嵌套的块参照,效果如图。
用户3519280
2023/07/31
2651

相似问题

无法用python连接到Server

12

用python中的connectorx连接MS SQL Server

216

无法用python连接到Azure Server

20

SQL Server SELECT with READONLY子句

40

用Streamlit编写连接python和Server的函数?

218
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档