Amazon-Web-Services

如何使用 CloudFormation 管理 VPC 與 Route53 託管區域的關聯?

  • October 24, 2017

我編寫了一個 CloudFormation 模板,它創建了一個 vpc、子網、路由、asg 和實例。

我希望 CloudFormation 處理新創建的 vpc 與現有 Route53 託管區域的關聯,但我在 CloudFormation 中找不到如何做到這一點。

使用 aws cli,這可以通過執行(在 user_data 腳本中)來實現:

aws route53 associate-vpc-with-hosted-zone --hosted-zone-id AAZZZ123AA --vpc VPCRegion=us-west-2,VPCId=$vpcid

但我希望 CloudFormation 管理這些關聯,因此當堆棧被刪除時,vpc 關聯也將被刪除。

我在網上找不到如何使用 CloudFormation 實現它,那麼有人知道它是否可以實現嗎?

我找不到如何將 VPC 關聯到 Route53 託管區域,因此我在 user_data 腳本中添加了以下程式碼:

aws route53 get-hosted-zone --id XXXAAA12345 | grep -q $vpcid
if [[ ! $? -eq 0 ]]; then
 aws route53 associate-vpc-with-hosted-zone --hosted-zone-id XXXAAA12345 --vpc VPCRegion=us-west-2,VPCId=$vpcid
else
 echo "VPC $vpcid is already associated to hosted zone company-private"
fi

vpcid 變數繼承自 CloudFormation 模板:

{ "Fn::Join": [ "=", [ "vpcid", { "Ref": "VPC" } ] ] },

然後,我意識到當一個 VPC 被刪除時,它與 Route53 託管區域的關聯仍然存在。

為了確保刪除舊的關聯,我在 user_data 腳本中添加了以下程式碼:

defaultvpc="vpc-20AAAA4b"
vpc_array=()
for vpc in $(aws route53 get-hosted-zone --id XXXAAA12345 | grep vpc | awk '{print $2}' | tr -d '\"|,'); do
 vpc_array+=($vpc)
done
for i in ${!vpc_array[@]}; do
 if [[ ! ${vpc_array[$i]} = $vpcid && ! ${vpc_array[$i]} = $defaultvpc ]] ; then
   echo "VPC ${vpc_array[$i]} doesnt exist anymore - removing association to Route53 hosted zone"
   aws route53 disassociate-vpc-from-hosted-zone --hosted-zone-id XXXAAA12345 --vpc VPCRegion=us-west-2,VPCId=${vpc_array[$i]}
 fi
done

引用自:https://serverfault.com/questions/879982