Cloud Functions은 배포를 하게 되면 Endpoint가 떨어진다. 때문에 굳이 고정 IP를 부여해아할 상황이 어떤 게 있나..? 싶을수도 있다.
하지만 예를 들어 Functions에서 수행하는 작업이 Cloud SQL DB에 있는 데이터를 불러와하는 경우라고 한다면 DB 접근을 0.0.0.0/0으로 열어주지 않는 이상 필요할 수 있다.
아키텍처
우선 Serverless VPC Access API를 활성화 해주자.
VPC 생성
us-central1 서브넷과 커넥션을 맺을 것이다.
서버리스 VPC 액세스 커넥터 생성
주의할 점은 IP범위에 나와있는 걸 보면 알겠지만 기존의 Subnet 범위와 겹치면 안된다.
이는 Functions이 후에 NAT를 둔 VPC(mhk-vpc)에 접근을 허용할 대역대를 지정해주는 것이라고 생각하면 된다.
라우터 및 NAT 생성
내 VPC, 그리고 연결할 리전을 선택
Cloud Functions 설정
Cloud Functions에서 연결을 보면 커넥터에 연결할 수 있다.
기존에 생성해놓은 커넥터를 선택!
main.py.
import requests
def ip_check(request):
response = requests.get('http://ipecho.net/plain')
print(response.text)
return "my ip address is "+ str(response.text)
requirements.txt
requests
배포를 하고 엔드포인트 호출을 한다고 해서 IP가 바로 찍히진 않는다.
권한을 주어야 한다. 누구에게? 바로 아래의 서비스 계정에 뷰어와 Compute 네트워크 사용자 역할을 주어야 한다.
service-<프로젝트 번호>@gcf-admin-robot.iam.gserviceaccount.com
위의 서비스 계정은 Cloud Functions이 사용하는 에이전트라고 생각하면 된다. 즉 Functinos이 자체적으로 GCP의 다른 리소스를 호출할 때 권한이 필요한 경우 이 서비스 계정에 부여된 권한을 토대로 접근한다.
Cloud Functions의 권한에서 allUsers에 대해 Cloud Functions 호출자 권한 부여.
엔드포인트 호출
확인
Functions이 NAT의 IP를 물고 나간 것을 확인할 수 있다.
[Cloud Functions 고정 IP 부여 참고]