🗺️
Cloud Runでリージョン情報を返却する
概要
メタデータサーバを使って、Cloud Runでデプロイされたアプリケーションのリージョン情報を動的に取得して返す方法をまとめました。
メタデータサーバとは
実行中のインスタンスに関する様々な情報を取得できるサーバです。Cloud Runの場合、プロジェクト ID、リージョン、インスタンスID、サービスアカウントなどの情報が提供されています。
詳細は下記をご参照ください。
サンプルコード
下記の流れで処理をするFlaskアプリケーションを作成しました。ビルド、デプロイ方法については省略します。
- リージョン情報を取得できるエンドポイントにアクセス
- レスポンスから実際のリージョン名を抽出(
projects/PROJECT-NUMBER/regions/REGION
形式で返ってくるため) - リージョン情報をクライアントへのレスポンスに含めて返却
app.py
import os
import requests
from flask import Flask
app = Flask(__name__)
METADATA_URL_BASE = 'http://metadata.google.internal/computeMetadata/v1/'
METADATA_HEADERS = {'Metadata-Flavor': 'Google'}
def get_region_from_metadata():
try:
region_url = METADATA_URL_BASE + 'instance/region'
response = requests.get(region_url, headers=METADATA_HEADERS)
response.raise_for_status()
full_region_path = response.text
region = full_region_path.split('/')[-1]
return region
except Exception:
return None
@app.route('/')
def handle_request():
deployed_region = get_region_from_metadata()
if deployed_region:
return f'Hello from {deployed_region}!'
else:
return 'Hello! Could not determine the deployment region.'
if __name__ == '__main__':
port = int(os.environ.get('PORT', 8080))
app.run(host='0.0.0.0', port=port)
Dockerfile
FROM python:3.13-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY app.py .
CMD ["gunicorn", "-b", "0.0.0.0:8080", "app:app"]
requirements.txt
Flask==3.1.0
gunicorn==23.0.0
requests==2.32.3
デプロイ先のリージョンによって、WebブラウザでCloud RunのURLにアクセスした際の表示が変化することを確認できます。
東京リージョンの場合
オレゴンリージョンの場合
Discussion