오늘은 GCP의 Cloud Functions에 고정 IP를 할당해 사용하는 방법을 소개하겠다.
보통 학생들의 창업 및 개인 개발에서 고정적인 서버를 사용하기 힘들거나, 또는 AWS Lambda와 같은 클라우드 플랫폼에서 제공해주는 이벤트 형식의 함수를 편의상 사용하는 경우에서 일반적인 경우에는 유동 IP를 사용해도 문제가 없으나 타사의 API를 사용하거나 또는 특정 IP에만 트래픽을 열어주는 경우 해당 기능이 작동하지 않을 수 있다
이때 AWS Lambda나 GCP의 Cloud Fucntions를 사용하는 경우 호출시마다 IP가 새로이 할당되기 때문에 사용할 수 없게 된다.
여기서 우리는 고정 IP를 할당해서 사용할 수 있는데, AWS Lambda 같은 경우 자료가 많지만 가령 Firebase auth를 쓰거나, Firestore 등을 쓰는 이유로 GCP가 편의성에서 유리할 경우 Cloud Functions를 쓸텐데 국내 자료는 없어서 구글링 끝에 찾은 자료를 번역해서 남겨두고자 한다.(서론이 많이 긴 거 같기는 하지만...)
아래 링크는 참고한 링크이다.
https://dev.to/alvardev/gcp-cloud-functions-with-a-static-ip-3fe9
GCP Cloud Functions with a Static IP
I always recommend to go to the documentation at first place. However, sometimes there are some conce...
dev.to
먼저 Cloud Functions를 생성해보자( Cloud Functions 자체가 생성하기에 어려운 과정도 아니고, 이 글 이전에 https://acver.tistory.com/entry/GCP-Cloud-Function-%ED%8A%B9%EC%A0%95-%EC%8B%9C%EA%B0%84%EC%97%90-%EC%9E%90%EB%8F%99%EC%9C%BC%EB%A1%9C-%ED%98%B8%EC%B6%9C%ED%95%98%EA%B8%B0
GCP Cloud Function 특정 시간에 자동으로 호출하기
AWS도 많이 쓰긴 했었지만 최근 들어 GCP를 많이 이용하기 시작했고, AWS의 Lambda와 같은 역할을 하는 GCP의 Cloud Function에 대해 특정 시간마다 해당 함수에 event를 전달하는 방법에 대해 소개하고자
acver.tistory.com
이 글에서 언급했으니 이는 생략하기로 하겠다.)
생성을 했다면 다음은 VPC 설정을 한다.
# Create VPC
gcloud services enable compute.googleapis.com
gcloud compute networks create my-vpc \
--subnet-mode=custom \
--bgp-routing-mode=regional
...자 이걸 어디다가 넣는데? 라고 하시는 분이 계실 것 같으니 거기부터 다시 설명을 드리자면
여러분이 GCP 프로젝트에 들어가면 제일 먼저 이 페이지를 보게 될 것이다.(아니라면 Google Cloud Platform 로고를 눌러 이동하자)
이후 저기 우측 상단 검은색 동그라미가 쳐져있는 버튼을 누르면 아래에
이와 같은 창이 나타날 것이다. 여기서 계속을 누르면...
짜잔! 터미널이 나타났다. 그럼 위에 있는 코드를 입력해보자.
그럼 이런 화면이 뜨는데, 여기서 또 우리는 승인을 한다.(거부를 할 수는 없지 않은가..?)
이후 명령어가 종료되면 VPC가 생성되었으니 다음 단계로 넘어가자.
참고로 생성된 VPC는 VPC 네트워크 메뉴에서 확인할 수 있다.
# Create a Serverless VPC Access connectors
gcloud services enable vpcaccess.googleapis.com
gcloud compute networks vpc-access connectors create functions-connector \
--network my-vpc \
--region us-central1 \
--range 10.8.0.0/28
다음으로는 VPC 커넥터를 생성한다
생성된 VPC 커넥터는 VPC 네트워크처럼 서버리스 VPC 액세스에서 확인할 수 있다.
이제 VPC 설정은 다 되었으니 연결하고자 하는 Cloud Functions 서비스 계정에 IAM Permission을 부여해주자.
# Grant Permissions
export PROJECT_ID=$(gcloud config list --format 'value(core.project)')
export PROJECT_NUMBER=$(gcloud projects list --filter="$PROJECT_ID" --format="value(PROJECT_NUMBER)")
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member=serviceAccount:service-$PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com \
--role=roles/viewer
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member=serviceAccount:service-$PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com \
--role=roles/compute.networkUser
해당 명령어가 종료하면 이제 거의 다 왔다!!
gcloud functions deploy testIP \
--runtime python37 \
--entry-point test_ip \
--trigger-http \
--allow-unauthenticated \
--vpc-connector functions-connector \
--egress-settings all
위 명령어를 입력하여 Cloud functions과 VPC Connector를 연결해주자(runtime, entry-point, trigger 등 메뉴를 잘 작성해줘야한다.)
위 명령어 말고도 단순히 연결하고자 하는 Colud Functions에 들어가면 보이는
위와 같은 화면에서도 수정 및 연결이 가능하니 불안하면 GUI를 이용하는 것도 괜찮은 방법일 것이다.
다음으로는 이제 드디어 여러분이 기다리던 고정 IP를 생성하는 과정이다.
gcloud compute addresses create functions-static-ip \
--region=us-central1
gcloud compute addresses list
고정 IP를 생성하고 주소 목록을 출력한다.
그럼 이렇게 functions-static-ip 라고 이름이 지어진 고정 IP가 생성이 된다.
# Creating the Cloud Router
gcloud compute routers create my-router \
--network my-vpc \
--region us-central1
# Creating Cloud Nat
gcloud compute routers nats create my-cloud-nat-config \
--router=my-router \
--nat-external-ip-pool=functions-static-ip \
--nat-all-subnet-ip-ranges \
--enable-logging
마지막으로 Cloud Router를 생성하고, NAT를 생성하면 우리가 만든 cloud functions은 vpc 커넥터를 통해 vpc와 연결이 되고, 해당 vpc는 또 다시 마지막으로 만든 고정 IP와 연결이 된다.
여기까지 GCP의 Cloud Functions에 고정 IP를 할당하는 방법이었다.
다시 돌려보면 간단한 방법인 만큼 필요할 때 요긴하게 쓸 수 있으셨음 좋겠다.
'Programming > Cloud' 카테고리의 다른 글
GCP Cloud Function 특정 시간에 자동으로 호출하기 (2) | 2021.06.17 |
---|
댓글