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/
'AWS > 파워쉘로 배우는 AWS' 카테고리의 다른 글
#20 [EBS] EBS를 추가해보자 (0) | 2016.01.26 |
---|---|
#19 [EC2] NIC(ENI)를 추가해보자. (0) | 2016.01.22 |
#17 [EC2] Windows Instance를 만들어 보자. (0) | 2016.01.08 |
#16 [EC2] Linux Instance를 생성해 보자. (0) | 2016.01.08 |
#15 [EC2] 논리 방화벽 Security Group (0) | 2016.01.08 |