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
Special Topics
注目記事はこちら
データ分析入門
これから始めるBigQuery基礎知識
2024.02.28

AWSの料金が 10 %割引になる!
『AWSの請求代行リセールサービス』
2024.07.16
