如何為 Auto Scaling 創建的 EC2 實例創建 DNS 條目?
我正在研究將自動縮放組用於將由 ELB 前端的網路伺服器層。我遇到困難的一件事是如何為每個新實例提供正確的 DNS 名稱。例如,我希望網路伺服器具有
frontend-web-XXX.prod.example.com
這樣的名稱,以便它們的名稱在日誌中顯示正確並且易於組織。我還有另外兩層我最終想要自動縮放,我希望它們也有類似api-web-XXX.prod.example.com
的名稱。我對 cloudformation 模板有一些經驗,並且已經使用關聯的 Route53 記錄啟動了單個實例,但我沒有看到任何跡象表明如何在自動縮放的組中完成此操作。
這不是您可以使用 CloudFormation 完成的事情,因為它只涉及定義自動擴展組 - 它不需要查看由 ASG 啟動的實例。自動縮放組也不給你任何方法來做到這一點。
相反,您可以確保您的實例在啟動時執行某些東西以在 Route 53 中註冊自己。 這篇文章討論了使用 Chef來執行此操作,但您可以在獨立腳本中執行相同的操作。
我發現這篇文章(https://underthehood.meltwater.com/blog/2020/02/07/dynamic-route53-records-for-aws-auto-scaling-groups-with-terraform/)解決了這個問題ASG 生命週期掛鉤,通知 SNS 主題,觸發 Lambda 函式將記錄插入 R53。如果 ASG 縮減,則會觸發另一個生命週期掛鉤,導致 Lambda 函式刪除 DNS 條目。
這是一個相當複雜的解決方案,我沒有親自嘗試過,但它看起來擁有所有正確的組件來完成這裡所要求的事情。
我使用的一種方法是在使用者數據執行期間設置 R53 記錄(https://gitlab.com/-/snippets/2213082)。我已經為 Windows AD 管理節點完成了此操作(僅不經常需要,因此除非需要,否則會終止)。為此,您需要一個具有正確權限的實例配置文件,以允許伺服器操縱 DNS 區域(這可能對每個人都喜歡,也可能不喜歡)。
另一種選擇是在您創建的實例上使用固定 IP。不過,我不確定您如何能夠使用此設置啟動多個實例。您可以附加第二個具有固定 IP 或彈性 IP 的介面,您可以以某種方式從池中選擇。這聽起來又像是 userdata 的工作——儘管需要不同的權限,這對某些人來說可能更容易接受。
我能想到的最後一個選項是負載均衡器。LB 擁有 IP 地址並將流量發送到 ASG 中的實例。這可能是最簡單的解決方案,雖然可能是最昂貴的 - 特別是如果您只計劃擁有一個實例。