본문 바로가기

AWS/파워쉘로 배우는 AWS

#18 [EC2] 고정 IP(EIP)와 Public DNS

Cloud Infra 사용하시다 보면 지금 당장은 필요 없지만 놓으면 돈이 나가서 꺼놓는 Instance들이 있으실 것입니다. 이런 Instance Public Subnet 있고 Public IP 자동으로 받아오게 설정해둔 Instance 껏다가 보시면 Public IP 바뀌는 것을 경험해 보셨을 것입니다.

이는 Public IP 자동할당(DHCP) 되어서 발생하는 현상입니다. Instance Public IP 삽입하는 것이 아니고 Instance에는 Private IP 할당되고 Public IP 1:1 Mapping되는 구조라고 설명 드린바 있습니다.

Public IP 바뀌는 것이 상관 없으시다면 굳이 설정하지 않아도 되지만, 고정적으로 Public IP 사용하고 싶은 Instance들이 있을 것이라 생각됩니다. 그를 위해 AWS에서는 Elastic IP(EIP)라는 것을 제공해 줍니다.

 

백마디 보다 한번 쳐보는게 빠릅니다.


PS> Get-EC2Address

 



 

EIP 하나가 검색되었습니다. 위와 같이 검색되는 것이 EIP 입니다. 지금 현재는 IP 발급 받은 상태라 IP  EIP ID 확인할 있네요.

 

그럼 우리는 새롭게 만들어서 Linux Instance 할당해 보겠습니다.


PS> New-EC2Address


 


 

새로운 EIP 발급 받았습니다. 별거 없죠? 여기서 주의하셔야 것은 할당되지 않은 EIP 과금이 발생합니다. 과금에 대한 내용은 다음 URL 참고하시기 바랍니다.

 

EIP 과금 정책 : https://aws.amazon.com/ko/ec2/pricing/

 

 

EIP 할당하기 전에 우선 Instance Public IP 확인해 봐야겠죠? Before 알아야 하니까요.


PS> (Get-EC2Instance -Instance i-4f846d88).Instances | `

select ImageId, PublicIpAddress, InstanceType, SubnetId, InstanceID


 


 

현재 Instance Public IP 54.213.36.165네요. 그럼 우린 발급 받은 EIP 얼른 Instance 할당해 보도록 하겠습니다.


PS> Register-EC2Address -AllocationId eipalloc-d46048b1 -InstanceId i-4f846d88

PS> Get-EC2Address


 


 

EIP 할당되었습니다. Instance ID EIP 매핑된 Private IP 정보도 보이네요. 실제로 Instance Public IP 바뀌었는지 확인해 보시죠.


PS> (Get-EC2Instance -Instance i-4f846d88).Instances | `

select ImageId, PublicIpAddress, InstanceType, SubnetId, InstanceID


 


 

확인이 되시죠? 기존엔 54.213.36.165 였던 Public IP EIP 52.27.85.254 되었습니다. 그럼 EIP 이동시키는 방법도 알아야겠죠? EIP 이동하기 전에 현재 Instance 상태를 확인해 보시죠.


PS> (Get-EC2Instance).Instances | `

select InstanceID, PublicDnsName, PublicIpAddress, InstanceType, SubnetId


 


 

Instance ID i-4f846d88 Instance EIP 할당되어 있네요. 그럼 EIP Instance ID i-7120c9b6 으로 이동해 보도록 하겠습니다.


PS> Register-EC2Address -AllocationId eipalloc-d46048b1 -InstanceId i-7120c9b6

PS> Get-EC2Address


 


 

EIP 할당할 때에 사용하였던 cmdlet 그대로 사용하니 정상 적용되네요. 그럼 실제 Instance 정보로 확인해 봅시다.


PS> (Get-EC2Instance).Instances | `

select InstanceID, PublicDnsName, PublicIpAddress, InstanceType, SubnetId


 


 

역시 우리의 예상을 벗어나지 않고 정상적으로 EIP 적용되었음을 확인하실 있습니다. 근데 동작이 조금 이상하지 않으신가요? 우리는 Instance A 에서 Instance B EIP 이동시켰습니다만, 질의도 하지 않고, -Force 명령을 주지도 않았는데 아주 자연스럽게 이전되는 것을 확인하실 있습니다.

그렇기 때문에, EIP 할당 명령은 모든 리소스를 확인한 후에 해당 명령어를 실행하시기 바랍니다. 자칫 잘못하면 서비스 장애로 이어질 있을 같습니다.

 

할당을 했으면 해제를 하고 EIP 반환도 해봐야겠죠?

EIP 해제하려면 EIP ID 아닌 Association Id를 알아야 합니다. 그럼 해제를 진행해 봅시다.


PS> Unregister-EC2Address -AssociationId eipassoc-5afb423d

PS> Get-EC2Address


 


 

처음 EIP 생성하였을 때와 같이 어떠한 설정도 없는 모습을 보실 있습니다.

그럼 EIP AWS 반환해 보겠습니다.


PS> Remove-EC2Address -AllocationId eipalloc-d46048b1 -Force

PS> Get-EC2Address


 


 

성공적으로 EIP 반환하였습니다. EIP 반환 시에는 정말 리소스를 반환하겠느냐는 질의가 나오기 때문에 -Force 명령을 주었습니다.

 



그럼 다음 주제로 넘어가 볼까요?

먼저 Instance 확인해 보겠습니다.


PS> (Get-EC2Instance).Instances | `

select InstanceID, PublicDnsName, PublicIpAddress, PrivateDnsName, PrivateIpAddress


 


 

PrivateDnsName 정상적으로 출력이 되는데에 비해 PublicDnsName 출려되지 않는 것을 확인해 보실 있습니다. 보통은 Instance 접근 IP 직접 접근하지만, 누군가는 DNS Name으로 접근하고 싶어 수도 있습니다.

그런 분들을 위해 Public DNS 설정하는 방법을 설명하도록 하겠습니다. 해당 설정은 VPC 있습니다.


PS> Get-EC2VpcAttribute -Attribute EnableDnsHostnames -VpcId vpc-21e2df44


 


 

EnableDnsHostnames False 것을 확인하실 있습니다. 그럼 우리는 True 바꿔야겠죠?


PS> Edit-EC2VpcAttribute -VpcId vpc-21e2df44 -EnableDnsHostnames $true

PS> Get-EC2VpcAttribute -Attribute EnableDnsHostnames -VpcId vpc-21e2df44


 


 

EnableDnsHostnames True 바뀌었습니다. 정상적으로 반영 되었는지 Instance 확인하여 봅시다.


PS> (Get-EC2Instance).Instances | `

select InstanceID, PublicDnsName, PublicIpAddress, PrivateDnsName, PrivateIpAddress


 


 

아까 전에는 확인이 되지 않았던 Public DNS Name 보입니다. 위와 같이 설정하시면 AWS에서 자동으로 할당해 주는 Public DNS Name으로 활용하실 있습니다.

 

참고자료 : http://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/concepts.html

EIP 과금 정책 : https://aws.amazon.com/ko/ec2/pricing/