Amazon Route 53: 탄력적 IP를 사용하지 않고 IP 주소를 자동으로 업데이트하는 방법
시나리오: Amazon Route 53에 Amazon EC2 인스턴스를 가리키는 도메인 이름이 있습니다. 그러나 인스턴스가 중지되었다가 시작되면 퍼블릭 IP 주소가 변경됩니다. 이것은 잘못된 IP 주소를 가리키고 있기 때문에 A-레코드를 깨뜨립니다.
"기다리다!""단순히 탄력적 IP 주소를 사용하지 않는 이유는 무엇입니까?"라고 말할 수 있습니다.
(탄력적 IP 주소는 Amazon VPC의 리소스에 할당할 수 있는 고정 IP 주소입니다. 탄력적 IP 주소를 AWS에 반환할 때까지 IP 주소는 동일하게 유지됩니다.)
예, 인스턴스에서 탄력적 IP 주소를 사용하면 A-레코드가 손상되지 않습니다. 그러나 AWS는 리전당 탄력적 IP 주소를 기본적으로 5개로 제한합니다. 한도 증가를 요청할 수 있지만 많이 필요한 경우에는 어떻게 해야 합니까?
예를 들어 서비스는 데이터를 안전하게 분리하기 위해 고객별로 별도의 Amazon EC2 인스턴스를 제공할 수 있습니다. 각 고객에게는 서버에 액세스할 수 있는 도메인 이름이 제공됩니다(
acme.example.com
). 필요한 탄력적 IP 주소 수가 엄청날 수 있습니다.다행히 탄력적 IP 주소 없이 목표를 달성할 수 있는 상당히 간단한 방법이 있습니다.
건축물
아키텍처는 매우 간단합니다.
구현
먼저 기존 도메인 이름을 정의하는 레코드 세트가 Amazon Route 53에 있어야 합니다.
현재 EC2 인스턴스의 퍼블릭 IP 주소를 가리키고 있습니다.
다음으로 스크립트에서 사용할 EC2 인스턴스에 몇 가지 태그를 추가합니다.
DNS 이름: 인스턴스와 연결할 DNS 이름
호스팅 영역 ID: 업데이트해야 하는 Route 53의 영역 레코드를 고유하게 식별합니다(Route 53 호스팅 영역 레코드에서 가져오기)
EC2 인스턴스가 시작될 때마다 다음을 수행하는 스크립트를 실행합니다.
#!/bin/bash
# Extract information about the Instance
INSTANCE_ID=$(curl -s http://169.254.169.254/latest/meta-data/instance-id/)
AZ=$(curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone/)
MY_IP=$(curl -s http://169.254.169.254/latest/meta-data/public-ipv4/)
# Extract tags associated with instance
ZONE_TAG=$(aws ec2 describe-tags --region ${AZ::-1} --filters "Name=resource-id,Values=${INSTANCE_ID}" --query 'Tags[?Key==`AUTO_DNS_ZONE`].Value' --output text)
NAME_TAG=$(aws ec2 describe-tags --region ${AZ::-1} --filters "Name=resource-id,Values=${INSTANCE_ID}" --query 'Tags[?Key==`AUTO_DNS_NAME`].Value' --output text)
# Update Route 53 Record Set based on the Name tag to the current Public IP address of the Instance
aws route53 change-resource-record-sets --hosted-zone-id $ZONE_TAG --change-batch '{"Changes":[{"Action":"UPSERT","ResourceRecordSet":{"Name":"'$NAME_TAG'","Type":"A","TTL":300,"ResourceRecords":[{"Value":"'$MY_IP'"}]}}]}'
인스턴스가 시작될 때마다 스크립트를 자동으로 실행하려면(처음 부팅할 때만 실행되는 사용자 데이터 스크립트와 달리) 위의 스크립트를 이 디렉토리에 넣습니다.
/var/lib/cloud/scripts/per-boot/
마지막으로 EC2 인스턴스에는 위의 명령을 실행할 수 있는 권한이 있는 할당된 IAM 역할이 필요합니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "ec2:DescribeTags",
"Resource": "*"
},
{
"Effect": "Allow",
"Action": "route53:ChangeResourceRecordSets",
"Resource": "arn:aws:route53:::hostedzone/HOSTED-ZONE-ID"
}
]
}
테스트 방법
스크립트를 테스트하려면 인스턴스를 중지한 다음 다시 시작하면 됩니다.
그러면 새 퍼블릭 IP 주소가 인스턴스에 할당됩니다. 스크립트는 Amazon Route 53을 호출하여 레코드 세트를 업데이트합니다. 업데이트하는 데 1분 정도 걸릴 수 있습니다.
그런 다음 Route 53으로 돌아가 A-Record에 할당된 IP 주소를 확인합니다. 새 IP 주소로 업데이트해야 합니다.
Reference
이 문제에 관하여(Amazon Route 53: 탄력적 IP를 사용하지 않고 IP 주소를 자동으로 업데이트하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/aws/amazon-route-53-how-to-automatically-update-ip-addresses-without-using-elastic-ips-h7o텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)