如何使用 CloudFormation 管理 VPC 与 Route53 托管区域的关联?

如何使用 CloudFormation 管理 VPC 与 Route53 托管区域的关联?

我编写了一个 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 实现这一点,所以有人知道是否可以做到吗?

答案1

我找不到如何将 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

相关内容