gcloudコマンドを使ってCloud Functionsに固定IPを設定する
2024.6.13
はじめに
こんにちは、wakaです。
Cloud Functionsに固定IPを付与する方法を紹介したいと思います。
画面上で設定する際に、この値はどうすればいいのかと迷うことがありましたので、本記事ではすべてgcloudコマンドを用いて構築する方法を解説します。
想定読者
- Cloud Functionsを実行する際に、固定IPを付与する方法がわからず困っている方
- 固定IPを付与しようとしたけどちゃんと動いてなくて困っている方
概要
設定は以下のようなステップで設定可能です。
- VPCの作成
- Cloud Routerの作成
- Cloud NATの作成
- サーバーレス VPC アクセスの作成
- Cloud Functionsの作成
設定方法
基本的にCloud Shell上でコマンドを上から実行していけば作成できると思います。
以下の値に関しては、任意の名前やIDを指定して実行をお願い致します。
- {VPC_NAME}
- {PROJECT_ID}
- {SUBNET_NAME}
- {FIREWALL_NAME}
- {STATIC_IP_NAME}
- {NAT_NAME}
- {ROUTER_NAME}
- {SERVERLESS_CONNECTOR_NAME}
- {FUNCTION_NAME}
また、リージョンなどの値は任意の値に変えてご利用ください。
1. VPCを作成
VPC本体の作成
gcloud compute networks create {VPC_NAME} \ --project={PROJECT_ID} \ --subnet-mode=custom \ --mtu=1460 \ --bgp-routing-mode=regional
サブネットの作成
gcloud compute networks subnets create {SUBNET_NAME} \ --project={PROJECT_ID} \ --range=10.0.0.0/28 \ --stack-type=IPV4_ONLY \ --network={VPC_NAME} \ --region=asia-northeast1
ファイアウォールルールの作成
gcloud compute --project={PROJECT_ID} firewall-rules create {FIREWALL_NAME} \ --direction=EGRESS \ --priority=1000 \ --network={VPC_NAME} \ --action=ALLOW \ --rules=all \ --destination-ranges=0.0.0.0/0
静的外部IPの取得
gcloud compute addresses create {STATIC_IP_NAME} \ --project={PROJECT_ID} \ --region=asia-northeast1
2. Cloud Routerを作成
gcloud compute routers create {ROUTER_NAME} \ --project={PROJECT_ID} \ --region=asia-northeast1 \ --network={VPC_NAME}
3. Cloud NATを作成
gcloud compute routers nats create {NAT_NAME} \ --router={ROUTER_NAME} \ --router-region=asia-northeast1 \ --nat-external-ip-pool={STATIC_IP_NAME} \ --nat-all-subnet-ip-ranges
4. サーバーレス VPC アクセスを作成
gcloud compute networks vpc-access connectors create {SERVERLESS_CONNECTOR_NAME} \ --region=asia-northeast1 \ --subnet={SUBNET_NAME} \ --min-instances=2 \ --max-instances=3 \ --machine-type=f1-micro
5. Cloud Functionsの作成
新規にCloud Functionsを作成する場合
gcloudで関数を作成する前に、コマンドを実行するディレクトリ内に、main.py
とrequirements.txt
が存在することを確認してください。
waka@cloudshell$ tree . . ├── main.py └── requirements.txt
main.py
import functions_framework import requests @functions_framework.http def hello_http(request): url = 'https://ipinfo.io/' response = requests.get(url) data = response.json() print(data) return data
requirements.txt
functions-framework==3.* requests
gcloud functions deploy {FUNCTION_NAME} \ --gen2 \ --runtime python312 \ --trigger-http \ --allow-unauthenticated \ --entry-point hello_http \ --region asia-northeast1 \ --vpc-connector {SERVERLESS_CONNECTOR_NAME} \ --egress-settings all
すでにあるCloud FunctionsをNAT経由で実行したい場合
ランタイム、ビルド、接続、セキュリティの設定
> 接続
> から、下り(外向き)設定を、作成したサーバーレスVPCコネクタに設定します。
動作確認
Cloud Shellから取得した静的IPと関数を実行した際のIPの比較を行います。
waka@cloudshell$ gcloud compute addresses list --filter="name={STATIC_IP_NAME}" | grep "ADDRESS" ADDRESS/RANGE: 104.198.117.7 waka@cloudshell$ waka@cloudshell$ curl -s -X POST https://asia-northeast1-{PROJECT_ID}.cloudfunctions.net/{FUNCTION_NAME} | jq ".ip" "104.198.117.7"
さいごに
今回gcloudコマンドを用いて固定IPを設定する方法をご紹介しました。
固定IPがうまく動作せずに困ってる方の手助けになれば幸いです。
テックブログ新着情報のほか、AWSやGoogle Cloudに関するお役立ち情報を配信中!
Follow @twitter
waka
2022年に中途入社した人です。好きなAWSサービスはLambdaです。
Recommends
こちらもおすすめ
-
【Google Cloud】Cloud Runを触ってみた!
2024.6.26
-
Google CloudのSpot VMを解説!
2024.6.19
Special Topics
注目記事はこちら
データ分析入門
これから始めるBigQuery基礎知識
2024.02.28
AWSの料金が 10 %割引になる!
『AWSの請求代行リセールサービス』
2024.07.16