시나리오
새 서비스(이하 AddressAPI)가 새롭게 만들어지는 상황, 이 서비스는 ACL(Access Control List)을 사용하여 접속을 관리함.
우리 팀의 Lambda가 AddressAP를 사용하기 위해 해당 팀에 소통에 필요한 IP를 전달해야 한다.
해결 방안 1. Lambda 실행 중에 자신의 IP를 확보하기.
import urllib.request
def lambda_handler(event, context):
data = urllib.request.urlopen("https://checkip.amazonaws.com") # 현재 Instance의 IP를 반환
ip = data.read()
print(ip)
return ip
이렇게 해보면 어떨까?
아래 사진에서 확인할 수 있듯이 해당 람다의 IP를 확인할 수 있다.
그런데 문제는 시간이 좀 지나고 나면 IP가 변한다는 것.
고정적인 IP를 확보할 수 없다면 ACL에 등록할 수 없으니 이 방법은 사용할 수 없다.
해결 방안 2. NAT gateway 사용하기
Lambda 상세페이지에는 IP가 표시되지 않는다. 그러면 어떻게 해야할지 천천히 찾아보자.
Lambda 상세페이지에 들어가면 Configuration 탭이 있다. 여기서 VPC를 보면 No VPC Configuration 으로 특별히 네트워크 구성이 이뤄져있지 않다.
1. VPC, Subnets, Security Groups 을 추가한다.
2. Subnet 을 클릭하여 상세 내용을 볼 수 있게 이동한다.
3. 0.0.0.0/0 행의 Target(igw-067xxxxx)을 확인한다.
internet gateway로 되어있는 것이 보인다.
4. NAT(Network Address Translation) gateway를 생성한다.
연결할 Subnet을 고른 후 Connectivity type은 Public, 그리고 Elastic IP allocation ID에는 Elastic IP를 지정(없을 시 생성)한다.
고정된 IP를 갖기 위해서이다.
생성 후 상세페이지를 보면 고정된 IP를 확인할 수 있다.
Route Tables에 들어가서 routes를 방금 생성한 NAT로 변경한다.
하단 부 Routes의 0.0.0.0/0의 타겟이 위에서 생성한 NAT가 되어 있는 것을 확인한다.
해당 NAT gateway의 Primary public IPv4를 ACL에 넣을 값으로 전달해주면 된다.
본 예제에서는 NAT gateway, Route table가 없었기에 처음부터 만들었다.
정리하자면 아래 순서대로 확인하여 Lambda가 사용하는 NAT gateway의 고정 IP 값을 알아낼 수 있다.
결론
NAT gateway를 사용하면 Outbound 통신 시 고정 IP로 통신이 가능해진다.
아래 순서대로 확인 가능함.
1. Lambda가 실행되고 있는 VPC의 subnet 확인
2. Subnet의 route table 확인
3. Route table의 NAT gateway(0.0.0.0/0) 확인
4. NAT gateway의 Primary Public IPv4를 확인
'AWS' 카테고리의 다른 글
DynamoDB 비용 최적화 (0) | 2023.07.31 |
---|---|
[AWS, Terraform Tips] elasticache redis cluster transit_encryption_enabled(tls) 옵션 변경 시 서비스 중단에 대해 (0) | 2023.05.19 |
AWS Certified DevOps Engineer - Professional 취득 후기 (0) | 2023.03.15 |
AWS - DynamoDB PITR 옵션 관련 (0) | 2023.03.15 |
2023 AWS Gameday in Tokyo 후기 (0) | 2023.01.27 |