Назад | Перейти на главную страницу

Как управлять ассоциацией VPC с зоной хостинга Route53 с помощью CloudFormation?

Я написал шаблон 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