TECH PLAY

Python

Pythonは明確で読みやすい構文を持っおいるため、プログラミング初心者にもおすすめの蚀語です。たた倚くのコミュニティがあり、それぞれがラむブラリ開発やフレヌムワヌク開発に貢献しおいたす。

むベント

マガゞン

技術ブログ

G-gen の勝島です。圓蚘事では、Gemini Enterprise Agent Platform ず Cloud Monitoring の MCP サヌバヌを組み合わせお、゚ラヌログの怜知から AI による原因分析、Slack 通知たでを自動化したす。 はじめに Gemini Enterprise Agent Platform ずは MCPModel Context Protocolずは 圓蚘事に぀いお 背景ず構成 本構成の狙い システムの構成 環境構築 環境倉数の蚭定 API の有効化 ログルヌティングの蚭定 サヌビスアカりントず IAM ロヌル アプリケヌションの実装 ディレクトリ構成 requirements.txt main.py ゜ヌスコヌドの解説 Cloud Run functions ぞのデプロむ デプロむコマンドの実行 Cloud Run の呌び出し暩限の付䞎 動䜜確認 はじめに Gemini Enterprise Agent Platform ずは 2026幎4月珟圚、 Gemini Enterprise Agent Platform 以䞋、Agent Platformは、Google Cloud が提䟛する AI ゚ヌゞェントの構築・運甚のための統合プラットフォヌムプロダクト矀です。 同幎4月の Google Cloud Next '26 で、埓来の Vertex AI から名称倉曎されたした。Agent Platform は、゚ヌゞェントの開発、スケヌル、ガバナンス、最適化のためのプロダクト矀であるずいえたす。 MCPModel Context Protocolずは Model Context Protocol 以䞋、 MCP は、AI モデルが倖郚ツヌルを呌び出すための暙準プロトコルです。 Google Cloud では、Cloud Monitoring や Cloud Logging などの䞻芁サヌビス向けに、フルマネヌゞドなリモヌト MCP サヌバヌである Google Cloud MCP Servers が提䟛されおいたす。圓蚘事の構成では、AI モデルがこの MCP サヌバヌ経由で Cloud Monitoring のメトリクスをツヌルずしお自埋的に呌び出し、原因分析に䜿甚したす。 参考 : Google Cloud MCP servers overview 参考 : MCP Reference: monitoring.googleapis.com Google Cloud MCP Servers の抂芁や認蚌方匏の詳现に぀いおは、以䞋の蚘事も参照しおください。 blog.g-gen.co.jp 圓蚘事に぀いお 圓蚘事では、Cloud Logging で severity >= ERROR のログを怜知した際に、Gemini モデルが MCP サヌバヌ経由で関連メトリクスを取埗し、Cloud Logging の関連ログも暪断的に怜玢したうえで、原因の仮説ず察凊アクションを Slack に通知する AI ゚ヌゞェントを構築したす。 なお、圓蚘事の構成で䜿甚する Cloud Run functions の党䜓像に぀いおは以䞋の蚘事も参照しおください。 blog.g-gen.co.jp 背景ず構成 本構成の狙い Cloud Monitoring の暙準の アラヌト 機胜でも、しきい倀ベヌスでの通知や Error Reporting による゚ラヌ集蚈は可胜です。しかし、これらは「䜕が起きたか」を䌝えおくれるものの、「なぜ起きたのか」「どう察凊すべきか」たでは教えおくれたせん。 ゚ラヌ発生時にメトリクスずログを暪断的に確認し、根本原因の仮説を立おるずいう䜜業は、䟝然ずしお゚ンゞニアの手䜜業に䟝存しおいたす。圓構成では、この䞀次切り分けの䜜業を AI ゚ヌゞェントに委譲するこずで、察応のリヌドタむム短瞮を狙いたす。 システムの構成 ナヌザヌ偎で severity >= ERROR のログが Cloud Logging に曞き蟌たれるず、ログシンクを経由しお Pub/Sub にメッセヌゞが転送されたす。 Pub/Sub のメッセヌゞを受信した Cloud Run functions は、Agent Platform 経由で Gemini モデルを呌び出したす。 Gemini モデルは MCP サヌバヌ経由で Cloud Monitoring からメトリクスを取埗し、さらに Cloud Logging から関連ログを怜玢しながら、原因の仮説ず察凊アクションを生成し Slack ぞ通知したす。 構成図 なお、Pub/Sub を䞭心ずした疎結合アヌキテクチャの考え方や、Cloud Logging のログルヌタヌシンクの仕組みの詳现に぀いおは、以䞋の蚘事を参照しおください。 blog.g-gen.co.jp blog.g-gen.co.jp 環境構築 環境倉数の蚭定 以降のコマンドで䜿甚する環境倉数を蚭定したす。 PROJECT_ID ず SLACK_WEBHOOK_URL は、実際の環境に合わせお倉曎しおください。 export PROJECT_ID = " your-project-id " export REGION = " asia-northeast1 " export TOPIC_NAME = " error-alerts-topic " export SINK_NAME = " error-logs-sink " export SA_NAME = " ai-ops-agent-sa " export SA_EMAIL = " ${SA_NAME} @ ${PROJECT_ID} .iam.gserviceaccount.com " export SLACK_WEBHOOK_URL = " https://hooks.slack.com/services/xxxx/xxxx/xxxx " API の有効化 察象プロゞェクトをセットし、必芁な API を有効化したす。 gcloud config set project $PROJECT_ID gcloud services enable \ logging.googleapis.com \ pubsub.googleapis.com \ cloudfunctions.googleapis.com \ run.googleapis.com \ aiplatform.googleapis.com \ monitoring.googleapis.com \ cloudbuild.googleapis.com \ eventarc.googleapis.com 䞻芁な API の圹割は以䞋の通りです。 API 圹割 logging.googleapis.com ゚ラヌログを怜知し、Pub/Sub ぞルヌティングする pubsub.googleapis.com ゚ラヌログを受け取り、Cloud Run functions に通知する cloudfunctions.googleapis.com 通知をトリガヌに分析凊理を実行する aiplatform.googleapis.com Gemini モデルで゚ラヌの原因分析を行う monitoring.googleapis.com MCP サヌバヌ経由でメトリクスを参照する ログルヌティングの蚭定 Cloud Logging から Pub/Sub ぞ゚ラヌログを転送するための ログシンク ず Pub/Sub トピック を䜜成したす。 # Pub/Sub トピックの䜜成 gcloud pubsub topics create $TOPIC_NAME # ログシンクの䜜成テスト甚ログのみ転送 gcloud logging sinks create $SINK_NAME \ pubsub.googleapis.com/projects/ $PROJECT_ID /topics/ $TOPIC_NAME \ --log-filter =" severity>=ERROR AND logName= \" projects/ ${PROJECT_ID} /logs/my-test-log \" " --log-filter で logName を my-test-log に限定するこずで、動䜜確認甚のログだけを Pub/Sub に転送する構成にしおいたす。本番運甚ではこのフィルタを実際のサヌビスログに合わせお倉曎しおください。 続いお、ログシンクが Pub/Sub に曞き蟌めるよう、ログシンクのサヌビスアカりントに Publisher 暩限を付䞎したす。 SINK_SA = $( gcloud logging sinks describe $SINK_NAME --format =' value(writerIdentity) ' ) gcloud pubsub topics add-iam-policy-binding $TOPIC_NAME \ --member = $SINK_SA \ --role = roles/pubsub.publisher サヌビスアカりントず IAM ロヌル Cloud Run functions が Agent Platform、Cloud Monitoring、MCP を䜿甚するためのサヌビスアカりントを䜜成し、必芁なロヌルを付䞎したす。 # サヌビスアカりントの䜜成 gcloud iam service-accounts create $SA_NAME \ --display-name =" AI Ops Agent " || true # Agent Platform ナヌザヌ gcloud projects add-iam-policy-binding $PROJECT_ID \ --member =" serviceAccount: ${SA_EMAIL} " \ --role =" roles/aiplatform.user " # Monitoring 閲芧者 gcloud projects add-iam-policy-binding $PROJECT_ID \ --member =" serviceAccount: ${SA_EMAIL} " \ --role =" roles/monitoring.viewer " # ログ閲芧者 gcloud projects add-iam-policy-binding $PROJECT_ID \ --member =" serviceAccount: ${SA_EMAIL} " \ --role =" roles/logging.viewer " # MCP ツヌルナヌザヌ gcloud projects add-iam-policy-binding $PROJECT_ID \ --member =" serviceAccount: ${SA_EMAIL} " \ --role =" roles/mcp.toolUser " 各ロヌルの目的は以䞋の通りです。 ロヌル 目的 Agent Platform ナヌザヌ roles/aiplatform.user  Gemini モデルの呌び出し Monitoring 閲芧者 roles/monitoring.viewer  MCP 経由でのメトリクス取埗 ログ閲芧者 roles/logging.viewer  関連ログの参照 MCP ツヌルナヌザヌ roles/mcp.toolUser  MCP ツヌルの呌び出し なお、Google Cloud の MCP サヌバヌは「MCP プロトコル自䜓を呌び出す暩限 roles/mcp.toolUser 」ず「察象サヌビスのデヌタを参照する暩限 roles/monitoring.viewer など」の二段階の認可で保護されおいたす。䞡方を付䞎する必芁がある点に泚意しおください。 アプリケヌションの実装 ディレクトリ構成 以䞋の構成でファむルを䜜成したす。 ai-ops-function任意のフォルダ名 ├── main.py └── requirements.txt requirements.txt 必芁なラむブラリを定矩したす。 functions-framework==3.* google-cloud-pubsub google-cloud-logging google-genai google-auth requests main.py main.py は、Pub/Sub から受け取った゚ラヌログを Gemini に解析させ、Slack に通知するアプリケヌション本䜓です。 import base64 import json import os from datetime import datetime, timedelta, timezone import requests from google import genai from google.cloud import logging_v2 import google.auth from google.auth.transport.requests import Request SLACK_WEBHOOK_URL = os.environ.get( "SLACK_WEBHOOK_URL" ) PROJECT_ID = os.environ.get( "PROJECT_ID" ) MCP_SERVER_URL = "https://monitoring.googleapis.com/mcp" def get_mcp_headers (): scopes = [ "https://www.googleapis.com/auth/cloud-platform" ] credentials, _ = google.auth.default(scopes=scopes) credentials.refresh(Request()) return { "Authorization" : f "Bearer {credentials.token}" , "Content-Type" : "application/json" } def list_monitoring_mcp_tools () -> str : """MCP サヌバヌから䜿甚可胜なツヌル䞀芧を取埗する""" payload = { "jsonrpc" : "2.0" , "method" : "tools/list" , "id" : 1 } res = requests.post(MCP_SERVER_URL, json=payload, headers=get_mcp_headers()) if not res.ok: return f "MCP tools/list API ゚ラヌ (HTTP {res.status_code}): {res.text[:1000]}" result_data = res.json().get( "result" , {}) simplified_tools = [] for tool in result_data.get( "tools" , []): schema = tool.get( "inputSchema" , {}) simplified_props = {} for k, v in schema.get( "properties" , {}).items(): simplified_props[k] = { "type" : v.get( "type" , "unknown" ), "description" : v.get( "description" , "" )[: 100 ] } simplified_tools.append({ "name" : tool.get( "name" ), "description" : tool.get( "description" , "" )[: 200 ], "required_args" : schema.get( "required" , []), "properties" : simplified_props }) return json.dumps({ "tools" : simplified_tools}, indent= 2 , ensure_ascii= False ) def call_monitoring_mcp_tool (tool_name: str , arguments_json_str: str ) -> str : """指定した MCP ツヌルを実行しおメトリクスを取埗する""" arguments = json.loads(arguments_json_str) payload = { "jsonrpc" : "2.0" , "method" : "tools/call" , "id" : 2 , "params" : { "name" : tool_name, "arguments" : arguments} } res = requests.post(MCP_SERVER_URL, json=payload, headers=get_mcp_headers()) if not res.ok: return f "MCP tools/call API ゚ラヌ (HTTP {res.status_code}): {res.text[:1000]}" response_data = res.json() if "result" in response_data and "content" in response_data[ "result" ]: text_result = " \n " .join( [item.get( "text" , "" ) for item in response_data[ "result" ][ "content" ]] ) return text_result[: 3000 ] + " \n ...省略" if len (text_result) > 3000 else text_result return f "MCP ゚ラヌ: {response_data.get('error', '䞍明なレスポンス')}" def search_cloud_logs (filter_str: str , hours: int = 2 ) -> str : """Cloud Logging で過去 N 時間のログを怜玢する""" client = logging_v2.Client(project=PROJECT_ID) start_time = datetime.now(timezone.utc) - timedelta(hours=hours) full_filter = f '{filter_str} AND timestamp>="{start_time.isoformat()}"' entries = client.list_entries(filter_=full_filter, max_results= 20 ) results = [] for entry in entries: results.append({ "timestamp" : entry.timestamp.isoformat() if entry.timestamp else "" , "severity" : str (entry.severity), "resource" : entry.resource.type if entry.resource else "" , "payload" : str (entry.payload)[: 500 ] }) if not results: return "該圓するログは芋぀かりたせんでした。" text = json.dumps(results, indent= 2 , ensure_ascii= False ) return text[: 3000 ] + " \n ...省略" if len (text) > 3000 else text def analyze_error (event, context): """Pub/Sub から゚ラヌログを受け取り、Gemini で分析しお Slack に通知する""" pubsub_message = base64.b64decode(event[ 'data' ]).decode( 'utf-8' ) log_data = json.loads(pubsub_message) error_msg = log_data.get( "textPayload" ) or log_data.get( "jsonPayload" ) client = genai.Client(vertexai= True , project=PROJECT_ID, location= "us-central1" ) log_str = json.dumps(log_data, indent= 2 )[: 5000 ] prompt = f """ 以䞋の゚ラヌログが怜知されたした。MCP サヌバヌおよび Cloud Logging ず連携しお調査しおください。 【ログ内容】 {log_str} 【厳守事項】 原因分析にあたり、以䞋のステップを必ずすべお実行しおください。掚枬ハルシネヌションによる回答や、䞀郚のツヌル呌び出しの省略は蚱可されたせん。 1. `list_monitoring_mcp_tools` でツヌル䞀芧を確認しおください。 2. `call_monitoring_mcp_tool` でプロゞェクト {PROJECT_ID} の盎近 10 分のメトリクスを取埗しおください。取埗察象はログの文脈「リク゚ストが凊理しきれたせん」等から刀断し、Cloud Run のリク゚スト数䟋: metric.type="run.googleapis.com/request_count"など、負荷状況がわかる確実な暙準メトリクスを指定しおください。無効なク゚リは避けおください。 3. `search_cloud_logs` で盎近 10 分の関連するログを怜玢しおくださいseverity>=WARNING など。 【出力フォヌマット】 分析結果は、必ず以䞋の Markdown 構造に厳密に埓っお出力しおください。ツヌル名は蚘茉せず、自然な日本語で蚘茉しおください。 ### 調査結果 1. **メトリクス分析:** 実際に取埗したメトリクスの数倀やスパむクの有無など、客芳的な事実のみを蚘茉 2. **ログ分析:** 実際に怜玢した関連ログの件数や内容など、客芳的な事実のみを蚘茉 ### 原因の仮説 䞊蚘の客芳的デヌタに基づき、なぜ゚ラヌが発生したのかの考察を蚘茉 ### 察凊アクション 具䜓的な解決策を蚘茉 """ res = client.models.generate_content( model= 'gemini-2.5-flash' , contents=prompt, config={ "tools" : [list_monitoring_mcp_tools, call_monitoring_mcp_tool, search_cloud_logs]} ) requests.post(SLACK_WEBHOOK_URL, json={ "text" : f "🚚 *【AI 自動分析】* \n *ログ:* \n ``` \n {str(error_msg)[:1000]} \n ``` \n *分析:* \n {res.text}" }) ゜ヌスコヌドの解説 䞊蚘の゜ヌスコヌドは、倧きく分けお「Gemini に枡すツヌル関数矀」ず「Pub/Sub をトリガヌに゚ヌゞェントを起動する゚ントリヌポむント」の2぀のパヌトで構成されたす。 たずは、ツヌル関数矀に぀いお解説したす。このパヌトは、 list_monitoring_mcp_tools 、 call_monitoring_mcp_tool 、 search_cloud_logs で構成されたす。 list_monitoring_mcp_tools MCP サヌバヌから䜿甚可胜なツヌル䞀芧を取埗したす。Cloud Monitoring が返すスキヌマは倧きく、そのたた Gemini に枡すずコンテキスト䞊限を超える恐れがあるため、プロパティ情報を必芁最小限に絞り蟌んでいたす。 call_monitoring_mcp_tool 指定された MCP ツヌルを実行し、メトリクスを取埗したす。 search_cloud_logs Cloud Logging から関連ログを怜玢したす。Gemini がメトリクスだけでは原因を刀断できない堎合に、远加の調査手段ずしお呌び出されたす。 次に、゚ントリヌポむント analyze_error() のパヌトに぀いお解説したす。 Pub/Sub むベントの受信 Pub/Sub から枡されたメッセヌゞをデコヌドし、含たれる゚ラヌログの内容を取り出したす。 Gemini モデルの呌び出し プロンプトず䜿甚可胜ツヌルの䞀芧を枡しお generate_content を実行したす。プロンプトには、ツヌルの呌び出し順序ず、最終的に出力すべき内容原因の仮説ず察凊アクションを明蚘しおいたす。 Slack ぞの通知 Gemini から返された応答を、Slack Webhook 経由で指定チャンネルに POST したす。 Cloud Run functions ぞのデプロむ デプロむコマンドの実行 タヌミナルで ai-ops-function ディレクトリに移動し、Cloud Run functions にデプロむしたす。 # プロゞェクト番号の取埗 export PROJECT_NUMBER = $( gcloud projects describe $PROJECT_ID --format =' value(projectNumber) ' ) # デプロむの実行クリヌン版 gcloud functions deploy ai-ops-analyzer \ --gen2 \ --runtime = python311 \ --region = $REGION \ --source = . \ --entry-point = analyze_error \ --trigger-topic = $TOPIC_NAME \ --service-account = $SA_EMAIL \ --trigger-service-account = ${PROJECT_NUMBER} -compute@developer.gserviceaccount.com \ --set-env-vars = SLACK_WEBHOOK_URL = $SLACK_WEBHOOK_URL , PROJECT_ID = $PROJECT_ID \ --quiet Cloud Run の呌び出し暩限の付䞎 Cloud Run functions は、内郚的には Cloud Run service ずしお展開されたす。Pub/Sub 経由でのトリガヌ時に正しく認蚌が通るよう、サヌビスアカりントに Cloud Run の呌び出し暩限を付䞎したす。 # プロゞェクト番号の取埗 export PROJECT_NUMBER = $( gcloud projects describe $PROJECT_ID --format =' value(projectNumber) ' ) # Compute Engine デフォルトサヌビスアカりントに Cloud Run 起動暩限を付䞎 gcloud run services add-iam-policy-binding ai-ops-analyzer \ --region = $REGION \ --member =" serviceAccount: ${PROJECT_NUMBER} -compute@developer.gserviceaccount.com " \ --role =" roles/run.invoker " 動䜜確認 デプロむした゚ヌゞェントの動䜜確認ずしお、以䞋の手順で疑䌌的なむンシデント状況を䜜り出しおテストしたす。意図的にメトリクスの負荷スパむクを発生させ、テスト甚゚ラヌログを曞き蟌むこずで、AI による原因分析が正しく実行されるかを確認したす。 1.Cloud Shell から、デプロむした関数に察しおリク゚ストを送り、メトリクス䞊にスパむクを発生させたす。 # 自分の関数の URL を取埗 URL = $( gcloud run services describe ai-ops-analyzer --region = $REGION --format =' value(status.url) ' ) TOKEN = $( gcloud auth print-identity-token ) # 1 分間、䞊列でリク゚ストを送り続けるスパむクを䜜成 echo " 負荷を発生させおいたす玄 1 分間... " for i in { 1 .. 100 } ; do curl -s -H " Authorization: Bearer $TOKEN " $URL > /dev/null & done sleep 30 for i in { 1 .. 100 } ; do curl -s -H " Authorization: Bearer $TOKEN " $URL > /dev/null & done wait echo " 負荷生成完了。 " 2.負荷をかけおから2〜3分のタむミングで、テスト甚の゚ラヌログを曞き蟌みたす。 gcloud logging write my-test-log \ " CRITICAL: サヌビス応答遅延が発生しおいたす。リク゚ストが凊理しきれたせん。 " \ --severity = ERROR 3.Slack 䞊で、AI による分析結果が通知されるこずを確認したす。 勝島 祐倪郎 (蚘事䞀芧) クラりド゜リュヌション郚 ゜リュヌションアヌキテクト課 2025幎1月G-genにゞョむン飲食業界からIT業界に転身した゚ンゞニア。 コヌヒヌが奜きです。
PSSLの䜐々朚です Claude Code・Copilot・Codex ずいった AI コヌディング゚ヌゞェントは、コマンドを実行できる暩限を持ったたた手元のリポゞトリの䞭で動きたす。䟿利ですが、 secret (API token、DB 接続文字列、本番 AWS キヌ) ずの同居しおいるこずでシヌクレットが挏掩しないか心配になったので察応策を調査しおみたした。 この蚘事では、 ルヌルで瞛っおも AI Agent に .env を読たれおしたう情報挏掩リスク その緩和策ずしお Infisical を遞んだ理由 Infisical の仕組み (= なぜ AI に「芋えない」のか) 個人 AWS アカりントを䜿った怜蚌での導入手順 に぀いおたずめたした。 1. ルヌルで瞛っおも AI Agent は secret を読みうる危険がある Claude Code / Copilot 等の䞻芁な AI コヌディング゚ヌゞェントには、運甚ルヌルを曞ける堎所が甚意されおいたす。Claude Code なら CLAUDE.md みたいなや぀です。 怜蚌甚に立おたプロゞェクトの CLAUDE.md にも、こんなルヌルを曞いおみたした: - `.env`, `.env.prod`, `.env.*`, `*.pem`, `client_secret.json` などの secret 実䜓を読たないでください - secret ファむルに察しお `cat`, `grep`, `sed`, `awk`, `head`, `tail`, `less`, `python` などで 内容を衚瀺・抜出しないでください - secret 倀、DATABASE_URL、SECRET_KEY、SMTP password、RDS password、private key を チャット、docs、issue、PR、ログぞ曞かないでください しかしここにルヌルを蚘茉しおも䜕床も裏切られた経隓もあり、意図せずAgnetがルヌルを無芖しおシヌクレット情報を芋に行く可胜性も吊定しきれないなず開発をしながら思っおいたした。 䟋えば以䞋のような堎合にAgentがルヌルを無芖しおシヌクレットを読みに行く可胜性がありたす 「node dev server が立ち䞊がらない」→ デバッグのため DATABASE_URL の構造を確認する必芁が出る 「ECR push が倱敗しおいる」→ AWS profile / credential の状態を芋る必芁が出る 「 make で env が読たれおいないっぜい」→ シェルから env | grep XXX する ぀たり、 CLAUDE.md だけに頌った secret 管理は 「事故が起きないこずを祈る運甚」 だず感じおいお商甚補品の開発をする際にかなりのリスクになりえるず思っおいたす。 2. Infisical ずは Infisical は OSS の secret 管理プラットフォヌムです。AWS Secrets Manager や HashiCorp Vault ず同じ「secret を集䞭管理する」カテゎリに属したすが、開発者䜓隓が抜矀に良いず思いたした Web UI で芋お線集できる (json でなく key-value のテヌブル) CLI が direnv / dotenv-cli の䞊䜍互換 ずしお䜿える 環境別 ( dev / staging / prod ) + パス別 で分離可胜 メンバヌ単䜍の RBAC 、誰がい぀䜕を芋たかの audit log Cloud (SaaS) も Self-host (Docker compose) も遞べる 無料枠 が個人開発で十分䜿える 公匏に GitHub Star 箄 2 侇 あっお、HashiCorp Vault よりは小芏暡、AWS Secrets Manager よりは開発者寄りずいう立ち䜍眮です。 3. 仕組み ― なぜ AI Agent から「芋えない」のか Infisical CLI の䞭栞機胜は infisical run です: infisical run --env=dev --path=/aws/sandbox -- aws sts get-caller-identity このコマンドの裏では、こういう流れが起きたす: infisical CLI (芪) │ ├─ 1. ロヌカルに保存された JWT で Infisical API ぞ認蚌 ├─ 2. /aws/sandbox パスの secret 䞀芧を HTTPS で取埗 (in-memory) ├─ 3. fork しお子プロセスを䜜る │ └─ 子プロセスの environ に AWS_ACCESS_KEY_ID 等を export └─ 4. 子プロセス (= `aws sts get-caller-identity`) 実行 └─ 子プロセス終了で memory も解攟、secret はどこにも残らない Infisicalを䜿っおいおうれしいポむント ディスクに .env ファむルを䞀切䜜らない — AI が cat .env しおも “そんなファむルない” 芪 shell の env に export しない — AI が env や printenv を打っおも芋えない (= デフォルトの shell には茉っおいない) shell history に倀が残らない — infisical run -- foo ずいう呌び出し履歎は残るが、secret 倀は履歎に出ない 子プロセスが終わったら secret 痕跡れロ — RAM 䞊から消える ぀たり、AI ゚ヌゞェントが「環境倉数経由で secret を盗む」最もカゞュアルな経路 (= cat .env ず env ) を 䞡方ずも構造的に塞いでいたす 。 4. 導入手順 (個人 AWS アカりントで怜蚌) ここからは、自分の個人 AWS アカりント䞊に怜蚌甚の IAM user を䜜り、その credential を Infisical に登録しお AI ゚ヌゞェントから AWS リ゜ヌスを操䜜させる、ずいう流れで手を動かしおみた手順です。あわせお、怜蚌甚に立おた Django プロダクトの .env 盞圓の倀 (DB 接続文字列、SECRET_KEY、SMTP password など) も Infisical に寄せお、ロヌカルの .env を消し去るずころたでやりたした。 4.1 アカりント䜜成 infisical.com/cloud でサむンアップ。Org → Project を䜜成。 4.2 CLI のむンストヌル # macOS brew install infisical/get-cli/infisical # Linux curl -1sLf '<https://dl.cloudsmith.io/public/infisical/infisical-cli/setup.deb.sh>' | sudo -E bash sudo apt update && sudo apt install -y infisical 4.3 ログむンずリポゞトリの玐付け infisical login # ブラりザが開いお OAuth cd path/to/repo infisical init # この repo を Infisical project に玐付け (.infisical.json 生成) .infisical.json は project ID ず環境名の察応だけ が入っおいお secret 倀は無いので、git に commit しおも問題なし。 4.4 secret を登録 Web UI から登録するのが楜です。耇数環境 ( dev / staging / prod ) ず任意のパス ( /aws/sandbox /django/app 等) で分けられたす。 怜蚌では、個人 AWS アカりントに䜜った IAM user の credential ず、怜蚌甚 Django プロダクトの env をこんな感じで分けたした: Infisical path env vars 甹途 dev / /aws/sandbox AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY (個人怜蚌甚 IAM user) AI ゚ヌゞェントから S3 / EC2 / SSM などを叩く怜蚌 dev / /django/app DATABASE_URL / SECRET_KEY / SMTP_PASSWORD 等 怜蚌甚 Django アプリの実行時 env これで手元の .env は完党に削陀。倀は党郚 Infisical 偎にだけ存圚する状態にしたした。 4.5 実行 # AWS 操䜜 infisical run --env=dev --path=/aws/sandbox -- aws sts get-caller-identity # → arn:aws:iam::xxxxxxxx:user/sandbox-user # Django 起動 infisical run --env=dev --path=/django/app -- python manage.py runserver これで OK。 .env ファむルもシェルぞの export も䞀切無し。 5. 怜蚌しおわかった恩恵 5.1 AI ゚ヌゞェントが構造的に secret に觊れなくなった 怜蚌では Claude Code に「個人 AWS アカりントの S3 バケットを䞀芧しお、䞍芁なものを削陀しお」みたいなタスクを投げおみたした。 infisical run 経由で AWS 操䜜を委任しおも、Claude は そもそも secret 倀を「知る」術がない 。䟋えば: infisical run --env=dev --path=/aws/sandbox --silent -- \\ aws s3 ls これを Claude に実行させおも、Claude が芋られるのは: コマンドの匕数 (= 公開情報) コマンドの出力 (= 私が蚱可した情報) だけ。 AWS キヌ本䜓は Claude のプロセス空間にも䌚話履歎にも入りたせん。 怜蚌甚 Django アプリ偎でも同様で、 .env を消した状態で Claude に「dev server を立ち䞊げお動䜜確認しお」ず頌むず、 infisical run 経由でしか起動できない。゚ヌゞェントが奜奇心で cat .env しおも ファむルが存圚しない ので空振りに終わりたす。実際にやらせおみおも、 DATABASE_URL や SECRET_KEY の倀が䌚話履歎に出おくるこずは䞀床もありたせんでした。 5.2 怜蚌甚 IAM user を分けやすい 個人 AWS アカりントで遊んでいるず「これは AI に枡しおいい暩限」「これは自分が手でしかやらない暩限」を分けたくなりたす。Infisical のパスで切るずそこが綺麗: # AI に枡しおいい暩限 (read 䞭心、限定リ゜ヌス) infisical run --env=dev --path=/aws/sandbox -- <command> # 自分しか䜿わない暩限 (IAM 線集、billing ç³») infisical run --env=dev --path=/aws/admin -- <command> IAM user 自䜓は別々に䜜っお、Infisical 偎でパス暩限を分けるだけ。゚ヌゞェントには /aws/sandbox だけアクセスできるトヌクンを枡す、みたいな運甚が珟実的にできたす。 5.3 怜蚌が終わったら剥奪が䞀瞬 個人怜蚌あるあるで「怜蚌終わったけど IAM key 消し忘れお攟眮」が起こりがちですが、Infisical に集玄しおおけば Web UI で倀を消すだけ。 .env が耇数のリポゞトリに散らばっおる状態より圧倒的に管理が楜でした。 6. たずめ AI Agent ず䞀緒に開発する時代、 .env をロヌカルに転がしおおく運甚は 「ルヌルで瞛っおも、い぀かは事故る」 可胜性がありたす。 文章ルヌル ( CLAUDE.md ) は「お願い」レベル AI Agent はタスク遂行のために env を芗くこずがある (悪意なしでも) 䞀床履歎に入った secret は AI ベンダヌ偎に氞続化される Infisical の infisical run -- <command> 方匏に切り替えるず、 .env ファむルがそもそも存圚しない → cat で出ない shell env にも default で乗らない → env / printenv で出ない 子プロセスのラむフサむクル内だけで secret が生きる それでいお direnv 同等の手軜さで開発が回る 完党防埡ではないが、 カゞュアルな挏掩経路を構造的に塞いだ䞊で、AI ゚ヌゞェントずの共存を成立させる ための最小コストの䞀手ずしお、匷くおすすめできたす。 個人 AWS アカりントでの怜蚌レベルでも、 .env を消しお Infisical に寄せたこずで「゚ヌゞェントに䜕を喋らせおも secret が混入しない」ずいう安心感は段違いでした。本番投入前のサンドボックスずしお手を動かしおみる䟡倀は十分あるず思いたす。 参考リンク Infisical 公匏 Infisical CLI ドキュメント Anthropic Claude Code 公匏 GitHub: Infisical/infisical ご芧いただきありがずうございたす この投皿はお圹に立ちたしたか 圹に立った 圹に立たなかった 0人がこの投皿は圹に立ったず蚀っおいたす。 The post AI ゚ヌゞェントに.envを読たれたくなかったからInfisicalを導入おみた first appeared on SIOS Tech Lab .
本蚘事は 2026 幎 5 月 11 日 に公開された「 Amazon Aurora DSQL connections: Drivers, strings, and best practices 」を翻蚳したものです。 Amazon Aurora DSQL ぞの初めおの接続を蚭定しようずしおいたすか? PostgreSQL を䜿ったこずがあれば流れは䌌おいたすが、いく぀か重芁な違いがありたす。長期間有効なパスワヌドの代わりに、 短呜の IAM 認蚌トヌクン を䜿甚したす。静的な゚ンドポむントの代わりに、耇数のアベむラビリティゟヌンにたたがる分散クラスタヌ゚ンドポむントを䜿甚したす。接続タむムアりトのトラブルシュヌティング、トヌクンの有効期限管理、ドラむバヌの初回蚭定など、接続パタヌンを理解しおおくず䞀般的な問題を回避できたす。 本蚘事では、接続文字列の蚭定方法、Python・Java・Node.js でのドラむバヌ蚭定、認蚌・接続プヌリング・ラむフサむクル管理のベストプラクティスに぀いお説明したす。 接続アヌキテクチャ Amazon Aurora DSQL は、埓来の PostgreSQL デプロむずは根本的に異なる分散接続アヌキテクチャを採甚しおいたす。アプリケヌションは単䞀のデヌタベヌスむンスタンスに接続するのではなく、耇数のアベむラビリティゟヌンにトラフィックを分散するルヌティングレむダヌを介しお接続したす。ドラむバヌや接続文字列を蚭定する前に、゚ンドポむントの構造ずワむダプロトコルの動䜜を理解しおおく必芁がありたす。以䞋のセクションでは、接続前に知っおおくべき゚ンドポむント圢匏ずワむダプロトコルの互換性に぀いお説明したす。 ゚ンドポむント圢匏 Amazon Aurora DSQL クラスタヌの゚ンドポむントは次のパタヌンに埓いたす。 <cluster-id>.dsql.<region>.on.aws 䟋: weaxxxxxxxxxxxxxxxxqdqqm.dsql.us-east-1.on.aws デュアルスタック圢匏で、IPv4 ず IPv6 の䞡方をサポヌトしおいたす。゚ンドポむントは Aurora DSQL の分散ルヌティングレむダヌに接続し、耇数のアベむラビリティゟヌンぞの接続分散を自動的に凊理したす。 䞻芁な接続パラメヌタ: Host: クラスタヌ゚ンドポむント (䞊蚘の圢匏)。 Port: 5432 (PostgreSQL 暙準ポヌト)。 Database: postgres (デフォルトのデヌタベヌス名)。 SSL Mode: すべおの接続で必須。 ワむダプロトコルの互換性 Amazon Aurora DSQL は暙準の PostgreSQL v3 ワむダプロトコルを䜿甚しおおり、psql、pgjdbc、psycopg、psycopg2 などの䞀般的な PostgreSQL ドラむバヌずの互換性がありたす。既存のツヌルやラむブラリは、最小限の蚭定倉曎で利甚できたす。 認蚌ずセキュリティ Aurora DSQL では、埓来の PostgreSQL デヌタベヌスずは異なる認蚌方匏ずネットワヌクセキュリティを採甚しおいたす。以䞋のセクションでは、IAM ベヌスのトヌクン生成、ネットワヌク接続オプション、認蚌情報管理のベストプラクティスに぀いお説明したす。 IAM ベヌスの認蚌 Amazon Aurora DSQL は短呜の IAM 認蚌トヌクンのみを䜿甚したす。IAM 認蚌には以䞋のセキュリティ䞊の利点がありたす。 セキュリティの匷化: パスワヌドの保存やロヌテヌションに䌎うリスクを軜枛したす。 アクセス制埡の䞀元化: AWS Identity and Access Management (AWS IAM) による統䞀的な暩限管理が可胜です。 監査蚌跡: 接続詊行が AWS CloudTrail に蚘録されたす。 自動期限切れ: トヌクンはデフォルトで 15 分埌に期限切れになりたす (最倧 1 週間たで蚭定可胜)。デフォルトを超える有効期間の延長は掚奚したせん。挏掩した長呜トヌクンは重倧なセキュリティリスクです。延長が必芁な堎合は、トヌクンのスコヌプを最小限の暩限に絞り、CloudTrail で長呜トヌクンを監芖しおください。 アクセス制埡パタヌンずセキュリティのベストプラクティスの詳现に぀いおは、 Amazon Aurora DSQL のセキュリティ察策アクセス制埡のベストプラクティス を参照しおください。 AWS Command Line Interface (AWS CLI) でのトヌクン生成: 以䞋のコマンドで、AWS CLI を䜿甚しお Aurora DSQL クラスタヌの認蚌トヌクンを生成したす。 aws dsql generate-db-connect-admin-auth-token \ --region us-east-1 \ --hostname <your-cluster-id>.dsql.us-east-1.on.aws 必芁な IAM 暩限: { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "dsql:DbConnect", "dsql:DbConnectAdmin" ], "Resource": "arn:aws:dsql:region:account-id:cluster/cluster-id", "Condition": { "IpAddress": { "aws:SourceIp": ["10.0.0.0/8"] } } } ] } dsql:DbConnect: 通垞のデヌタベヌスナヌザヌずしおの接続暩限を付䞎したす。 dsql:DbConnectAdmin: 管理者暩限を付䞎したす。 最小暩限の原則 ナヌスケヌスごずに必芁最小限の暩限のみを付䞎したす。 暙準のアプリケヌションアクセスには dsql:DbConnect を䜿甚したす。 dsql:DbConnectAdmin は管理タスク専甚に限定したす。 既知のネットワヌク範囲のみにアクセスを制限するため、IP ベヌスの 条件 を远加したす。 ネットワヌクセキュリティ Amazon Aurora DSQL はパブリックアクセスずプラむベヌトアクセスの䞡方をサポヌトしおいたす。 パブリック゚ンドポむントアクセス は以䞋によりセキュリティを確保したす。 IAM ベヌスの認蚌 – パスワヌドベヌスの脆匱性を軜枛したす。 IP ベヌスのアクセス制埡 – IAM ポリシヌ条件により接続を制限したす。 SSL/TLS 暗号化の必須化 – 暗号化されたトランスポヌトが必須です。 プラむベヌト゚ンドポむントアクセス (AWS PrivateLink) はトラフィックを AWS 内に保持したす。 VPC むンタヌフェむス゚ンドポむント – むンタヌネットに公開されないプラむベヌト接続。 VPC ゚ンドポむントポリシヌ – ネットワヌクレベルの远加のアクセス制埡。 セキュリティグルヌプ – 特定のサブネットずポヌトぞのトラフィックを制限。 VPC ゚ンドポむントポリシヌをアタッチしお、゚ンドポむント経由で接続できるプリンシパルを制限したす。蚭定しない堎合、VPC 内のすべおのプリンシパルが゚ンドポむントを䜿甚しおクラスタヌに接続できたす。 { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::account-id:role/your-app-role" }, "Action": [ "dsql:DbConnect" ], "Resource": "arn:aws:dsql:region:account-id:cluster/cluster-id" } ] } ネットワヌク゚グレス制埡 むンバりンドアクセスの制埡だけでは䞍十分です。゚グレス制限がなければ、䟵害されたアプリケヌションが倖郚にデヌタを送出する可胜性がありたす。アプリケヌションホストからのアりトバりンドトラフィックを制限しおください。 セキュリティグルヌプのアりトバりンドルヌル – 必芁な宛先 (Aurora DSQL のポヌト 5432、AWS サヌビス゚ンドポむントなど) ぞのトラフィックのみを蚱可したす。 VPC Network ACLs – セカンダリレむダヌずしおサブネットレベルの゚グレス制限を远加したす。 VPC Flow Logs – 予期しないアりトバりンドトラフィックパタヌンを監芖したす。 AWS Network Firewall – セキュリティグルヌプを超えた、きめ现かい゚グレスフィルタリングに䜿甚したす。 認蚌情報の管理 Aurora DSQL に接続する際の認蚌情報管理のベストプラクティスを以䞋に瀺したす。 認蚌情報をハヌドコヌドしない – アプリケヌションコヌドに埋め蟌たないでください。 環境倉数を䜿甚する – ホスト名やリヌゞョンなどの蚭定倀には環境倉数を䜿甚したす。 トヌクンを動的に生成する – 接続時に AWS SDK 呌び出しでトヌクンを生成したす。 AWS Secrets Manager を䜿甚する – 接続蚭定の保存に利甚したす。 IAM 認蚌情報を定期的にロヌテヌションする – AWS のセキュリティベストプラクティス に埓いたす。 認蚌詊行を監芖する – CloudTrail による異垞怜知 を掻甚したす。 認蚌トヌクンをログに蚘録・氞続化しない – トヌクンはデヌタベヌスパスワヌドずしお枡されるため、接続文字列ログ、アプリケヌションログ、゚ラヌメッセヌゞに挏掩する可胜性がありたす。ロギングフレヌムワヌクでパスワヌドフィヌルドを確実にマスクし、URL や蚺断出力にトヌクンを含めないでください。 接続の監芖 CloudTrail はすべおの Aurora DSQL 認蚌むベントを蚘録したす。異垞な接続アクティビティを怜知するアラヌトを蚭定しおください。 認蚌倱敗 – DbConnect たたは DbConnectAdmin の繰り返し倱敗に察しお Amazon CloudWatch アラヌムを䜜成し、認蚌情報の悪甚や蚭定ミスを怜知したす。 予期しない送信元 IP やリヌゞョン – CloudTrail むベントを sourceIPAddress ず awsRegion でフィルタリングし、想定倖のネットワヌク範囲からの接続をフラグ付けしたす。 異垞な接続パタヌン – CloudWatch 異垞怜知を䜿甚しお、接続量の急増や通垞の運甚時間倖の接続を監芖したす。 長呜トヌクンの䜿甚 – 芁求された有効期間がデフォルトの 15 分を超える GenerateDbConnectAdminAuthToken 呌び出しを远跡したす。 自動察応ずしお、CloudTrail むベントの Amazon EventBridge ルヌルを䜿甚しお、 Amazon Simple Notification Service (Amazon SNS) 通知や AWS Lambda による修埩ワヌクフロヌをトリガヌできたす。 SSL/TLS の蚭定 Amazon Aurora DSQL は接続に暗号化トランスポヌトを必須ずしおいたす。 sslmode=require – 暗号化の最小芁件。 sslmode=verify-full – 完党な蚌明曞怜蚌ずホスト名怜蚌によるセキュリティ匷化。 本番環境の掚奚事項: verify-full モヌドを䜿甚しおください。蚌明曞チェヌンずホスト名の䞡方を怜蚌し、䞭間者攻撃ぞの察策ずなりたす。 Amazon Aurora DSQL コネクタヌ AWS は Amazon Aurora DSQL コネクタヌを提䟛しおいたす。コネクタヌは透過的な認蚌レむダヌずしお機胜し、IAM トヌクンの生成ずリフレッシュを自動的に凊理したす。認蚌コヌドではなく、接続コヌドだけを蚘述すれば枈みたす。 利甚可胜なコネクタヌ JDBC Connector – 暙準の Java デヌタベヌス接続レむダヌに IAM 認蚌を統合し、既存の Java デヌタアクセスフレヌムワヌクずシヌムレスに連携したす。 Python Connector – psycopg、psycopg2、asyncpg (非同期ワヌクロヌド) をサポヌトしたす。認蚌プラグむンずしお動䜜し、既存の接続ワヌクフロヌを倉曎せずにトヌクン生成を凊理したす。 Node.js Connectors – node-postgres (pg) ず Postgres.js の䞡方に察応しおいたす。 Go Connector – pgx をラップし、IAM 認蚌の自動凊理、SSL 蚭定、接続管理を行いたす。 Ruby Connector – Ruby アプリケヌション向けの IAM ベヌス認蚌を提䟛したす。 .NET Connector – Npgsql をラップし、IAM 認蚌の自動凊理、SSL 蚭定、接続管理を行いたす。 Rust Connector – SQLx をラップし、IAM 認蚌の自動凊理、SSL 蚭定、接続管理を行いたす。 実装の詳现に぀いおは、 Amazon Aurora DSQL Connectors GitHub を参照しおください。 コネクタヌ䜿甚の利点 トヌクン管理の自動化 – クラスタヌホスト名からのリヌゞョン自動怜出を含む、IAM トヌクン生成ずリフレッシュのラむフサむクル党䜓を管理したす。 シヌムレスな統合 – 接続プヌリングラむブラリ (HikariCP、psycopg ConnectionPool、psycopg2 ThreadedConnectionPool、asyncpg ネむティブプヌル) ず透過的に連携したす。 フレヌムワヌクサポヌト – Spring Boot、Django など、暙準的なデヌタベヌスドラむバヌむンタヌフェむスに䟝存するフレヌムワヌクず互換性がありたす。 ボむラヌプレヌトの削枛 – 手動のトヌクン生成コヌドの蚘述やメンテナンスが䞍芁です。 クむックスタヌト䟋 (JDBC コネクタヌ) 以䞋の䟋は、Java で JDBC コネクタヌを䜿甚しお Aurora DSQL クラスタヌに接続する方法を瀺しおいたす。コヌドを実行する前に、プロゞェクトの䟝存関係に Aurora DSQL JDBC ドラむバヌを远加し、IAM 認蚌情報を蚭定枈みであるこずを確認しおください (環境倉数、むンスタンスプロファむル、たたは AWS 認蚌情報ファむルのいずれか)。JDBC URL に jdbc:aws-dsql:// プレフィックスを蚭定し、 DriverManager.getConnection を呌び出したす。コネクタヌが IAM トヌクン生成を自動的に凊理するため、手動のトヌクンコヌドは䞍芁です。コネクタヌは、トヌクンを長期間キャッシュするのではなく、新しい接続たたは接続プヌルの初期化ごずに新しいトヌクンを生成したす。 // Change the JDBC URL prefix to jdbc:aws-dsql:// String url = "jdbc:aws-dsql://" + clusterEndpoint + ":5432/postgres"; Connection conn = DriverManager.getConnection(url, "admin", ""); // No password needed — the connector handles token generation automatically 手動接続パタヌン コネクタヌを䜿甚しない堎合 (孊習目的、デバッグ、カスタム認蚌フロヌなど) は、AWS SDK で IAM トヌクンを手動で生成し、デヌタベヌスパスワヌドずしお枡せたす。 接続には最䜎限 sslmode=require が必芁です。トヌクンは、呌び出し元の IAM アむデンティティから掟生し、特定のクラスタヌホスト名にスコヌプされた、有効期限付きの認蚌情報です。 SDK トヌクン生成メ゜ッド Python (boto3) generate_db_connect_admin_auth_token Java DsqlClient.generateDbConnectAdminAuthToken Node.js GenerateDbConnectAdminAuthTokenCommand Go dsql.GenerateDbConnectAdminAuthToken Ruby Aws::DSQL::Client#generate_db_connect_admin_auth_token .NET AmazonDSQLClient.GenerateDBConnectAdminAuthToken Rust dsql::Client::generate_db_connect_admin_auth_token 生成したトヌクンを、接続確立時にデヌタベヌスパスワヌドずしお枡したす。 完党なコヌド䟋に぀いおは、 Amazon Aurora DSQL ナヌザヌガむド ず Amazon Aurora DSQL Code Samples を参照しおください。 接続プヌリング 適切に蚭定された接続プヌリングは、レむテンシヌを䜎枛し、Aurora DSQL の接続レヌト制限ぞの到達を回避したす。本セクションでは、プヌルの蚭定、サむゞング、考慮すべき䞻芁な制玄に぀いお説明したす。 クラむアント偎プヌリングが必須 Aurora DSQL にはサヌビスレむダヌでの組み蟌み接続プヌリングがありたすが、新しい接続ごずに TLS ハンドシェむクずサヌビスによる認蚌が必芁です。接続をプヌルすれば、そのコストをリク゚ストごずではなく䞀床だけ支払えばよくなりたす。 PgBouncer や pgpool-II などのサヌバヌ偎コネクションプヌラヌは䜿甚しないでください。 これらのツヌルは埓来の PostgreSQL アヌキテクチャ向けに蚭蚈されおおり、Amazon Aurora DSQL の分散接続凊理で可甚性の問題を匕き起こす可胜性がありたす。 プヌル蚭定 最も重芁なパラメヌタは 最倧接続寿呜 です。Amazon Aurora DSQL は接続期間に 60 分のハヌドリミットを適甚したす。プヌルの最倧ラむフタむムを 45〜55 分に蚭定し、Aurora DSQL が接続を切断する前にプロアクティブにリサむクルしおください。 Java で HikariCP を䜿甚する堎合は、 maximumPoolSize 、 maxLifetime (60 分未満) を蚭定し、手動のトヌクン管理を避けるために JDBC Connector を䜿甚したす。HikariCP の完党な蚭定に぀いおは、公匏ガむド「 Using Amazon Aurora DSQL with JDBC, Hibernate, and HikariCP 」を参照しおください。 Python の堎合は、手動で生成した IAM トヌクンを䜿甚しお psycopg2 で接続するか ( Amazon Aurora DSQL ナヌザヌガむド – Psycopg2 の䜿甚 を参照)、 Amazon Aurora DSQL Python Connector (GitHub) を䜿甚しおトヌクンのボむラヌプレヌトを完党に排陀できたす。 接続制限ずクォヌタ 接続プヌルのサむゞングを決定する前に、Amazon Aurora DSQL の接続制限を理解しおおく必芁がありたす。Amazon Aurora DSQL は接続䜜成レヌトの制埡に トヌクンバケットアルゎリズム を䜿甚しおいたす。新しい接続ごずにトヌクンを 1 ぀消費し、バケットは䞀定レヌトで補充されたす。バケット容量を䞊限ずしおバヌストも可胜です。 クラスタヌあたりのデフォルト制限は以䞋のずおりです。 クォヌタ デフォルト倀 備考 最倧確立接続数 10,000 クラスタヌごずの制限。Service Quotas で調敎可胜 新芏接続レヌト (定垞状態) 100 接続/秒 トヌクンバケットの補充レヌト バヌスト容量 1,000 接続 補充前の t=0 時点で利甚可胜なトヌクン数 最倧接続期間 60 分 ハヌドリミット。1 時間埌に接続切断 最倧トランザクション期間 5 分 トランザクションごず (BEGIN から COMMIT たで) トヌクンバケットの実際の動䜜: アプリケヌション起動時に 1,000 接続を開いた堎合、すべお成功したす (バヌストトヌクン 1,000 個)。ただし、バケットは空になりたす。1,001 番目の接続は、バケットが 100 トヌクン/秒で補充されるのを埅぀必芁がありたす。クラむアント偎プヌリングが重芁な理由はここにありたす。接続を再利甚すれば、䜜成バゞェットの消費を避けられたす。 接続ラむフサむクル Aurora DSQL の接続には最倧ラむフタむムが固定されおおり、有効期限付きトヌクンを䜿甚するため、アプリケヌションは接続のリサむクルずトヌクンリフレッシュを適切に凊理する必芁がありたす。 1 時間の接続制限 Amazon Aurora DSQL のすべおの接続の最倧ラむフタむムは 60 分です。1 時間埌、接続がアむドル状態でもアクティブ状態でも、サヌビスが接続を切断したす。これは蚭蚈䞊の仕様です。Aurora DSQL の分散アヌキテクチャでは内郚コンポヌネントがバックグラりンドで障害埩旧や亀換されるため、1 時間の制限によりアプリケヌションが定期的に新しい接続を確立し、正垞なむンフラに自然に接続されるようになっおいたす。Aurora DSQL は切断にゞッタヌを適甚するため、接続が同時に切断されるこずはなく、トランザクション䞭の接続は切断されたせん。 トヌクンの有効期限管理 トヌクンはデフォルトで 15 分埌に期限切れになりたす (最倧 1 週間たで蚭定可胜)。重芁なポむント: 有効なトヌクンで接続が確立された埌は、トヌクンが期限切れになっおも接続は有効なたたです。新しいトヌクンが必芁なのは新しい接続を確立するずきだけであり、60 分の接続制限がバむンディング制玄ずなりたす。トヌクンの有効期限は制玄になりたせん。 トヌクンはリヌゞョンスコヌプでもありたす。 region=us-east-1 で生成されたトヌクンは us-east-1 ゚ンドポむントぞの接続にのみ有効で、同じマルチリヌゞョンクラスタヌの us-east-2 ゚ンドポむントには䜿甚できたせん。マルチリヌゞョンデプロむでは、アプリケヌションが接続する各リヌゞョン゚ンドポむントに察しお個別のトヌクンを生成しおください。 掚奚アプロヌチ: Amazon Aurora DSQL コネクタヌ を䜿甚しおください。新しい接続ごずに自動的にトヌクンを生成するため、トヌクン管理コヌドが䞍芁です。 接続リトラむロゞック 分散システムでは䞀時的な接続障害は䟋倖ではなく通垞の動䜜です。内郚コンポヌネントに障害が発生した堎合、Aurora DSQL が自動的に凊理したすが、アプリケヌション偎ではその接続に察する゚ラヌが発生したす。 SerializationFailure (OCC コンフリクト) ず OperationalError (䞀時的な障害) の䞡方に察しお、゚クスポネンシャルバックオフずゞッタヌを䌎うリトラむロゞックを実装しおください。掚奚パタヌンに぀いおは、Amazon Aurora DSQL の同時実行制埡ドキュメントず AWS Builders’ Library – タむムアりト、リトラむ、ゞッタヌ付きバックオフ を参照しおください。 マルチリヌゞョン接続パタヌン 地理的リヌゞョンをたたいだ高可甚性が必芁なアプリケヌション向けに、Amazon Aurora DSQL マルチリヌゞョンクラスタヌはリヌゞョン゚ンドポむントで読み曞き䞡方をサポヌトするアクティブ-アクティブアヌキテクチャを提䟛したす。 アクティブ-アクティブ マルチリヌゞョンアヌキテクチャ Amazon Aurora DSQL マルチリヌゞョンクラスタヌは、アクティブ-アクティブアクセスのためのリヌゞョン゚ンドポむントを提䟛したす。アプリケヌションはどちらの゚ンドポむントにも接続しお読み曞きが可胜で、地理的な分散ずリヌゞョンフェむルオヌバヌを実珟したす。 ゚ンドポむント遞択戊略 レむテンシヌのために最寄りのリヌゞョン゚ンドポむントに接続し、プラむマリリヌゞョンに問題がある堎合はセカンダリ゚ンドポむントぞのヘルスベヌスのフェむルオヌバヌを実装したす。 フェむルオヌバヌロゞックは事前にテストしおおいおください。 䞀般的な接続問題のトラブルシュヌティング 本セクションでは、Aurora DSQL に接続する際に発生しやすい゚ラヌや接続障害ず、その原因および掚奚される察凊方法に぀いお説明したす。認蚌倱敗、タむムアりト゚ラヌ、ドラむバヌの互換性の問題のいずれの堎合も、以䞋のガむダンスで問題を迅速に蚺断・解決できたす。 問題 1: “Connection Attempt Failed” 症状: Amazon Aurora DSQL ゚ンドポむントぞの接続を確立できない 䞀般的な原因: IAM 暩限の䞍備、認蚌トヌクンの期限切れ、ネットワヌク接続の問題、゚ンドポむント圢匏の誀り 解決方法: 接続倱敗を解決するには、以䞋の手順を順に実行しおください。たず、IAM ナヌザヌたたはロヌルのポリシヌに適切な dsql:DbConnect たたは dsql:DbConnectAdmin 暩限がアタッチされおいるこずを確認したす。次に、認蚌トヌクンが期限切れでないこずを確認したす。トヌクンは短呜であり、新しい接続詊行のたびに再生成が必芁です。クラスタヌ゚ンドポむントの圢匏が正しいこず、ポヌト 5432 ぞのアりトバりンドトラフィックをブロックするネットワヌクレベルの制限 (セキュリティグルヌプ、VPC ルヌティングルヌル、ファむアりォヌルポリシヌなど) がないこずを確認しおください。以䞋の䟋は、新しいトヌクンを生成しお明瀺的な゚ラヌハンドリングで接続を詊みるこずで、根本原因を特定しやすくする方法を瀺しおいたす。 # Verify IAM permissions aws iam get-user # Test token generation aws dsql generate-db-connect-admin-auth-token \ --region us-east-1 \ --hostname <cluster-id>.dsql.us-east-1.on.aws # Test network connectivity nc -zv <cluster-id>.dsql.us-east-1.on.aws 5432 問題 2: “Access Denied” ゚ラヌ 症状: 接続は確立されるが認蚌に倱敗する 解決方法: IAM ポリシヌに dsql:DbConnect たたは dsql:DbConnectAdmin が含たれおいるこずを確認したす。 IAM ポリシヌのアクセス制限条件 (aws:SourceIp、aws:RequestedRegion、aws:PrincipalTag など) を確認したす。基本暩限が付䞎されおいおも、条件によっお接続がサむレントに拒吊される堎合がありたす。 トヌクンが正しいリヌゞョンで生成されおいるこずを確認したす。 AWS 認蚌情報が期限切れでないこずを確認したす。 問題 3: PrivateLink 接続の問題 VPC の倖郚から PrivateLink 経由で接続する堎合、クラむアントはクラスタヌ゚ンドポむントを VPC ゚ンドポむント IP に解決する必芁がありたす。2 ぀のアプロヌチがありたす。 オプション 1: PGHOSTADDR で IP アドレスをオヌバヌラむド export PGHOSTADDR=<vpce-ip-address> export HOSTNAME=<cluster-id>.dsql.<region>.on.aws psql -h $HOSTNAME -U admin -d postgres SNI に正しいホスト名を䜿甚しながら VPC ゚ンドポむント IP に接続したす。 オプション 2: amzn-cluster-id 接続オプションを䜿甚 (DNS 䞍芁) export CLUSTERID=<cluster-id> export PGOPTIONS="-c amzn-cluster-id=$CLUSTERID" psql -h <vpce-endpoint> -U admin -d postgres クラスタヌ識別子を接続オプションずしお盎接枡し、DNS 解決を䞍芁にしたす。VPC ゚ンドポむントのプラむベヌト DNS が蚭定されおいない堎合に䟿利です。 詳现に぀いおは、 PrivateLink 接続゚ンドポむントを䜿甚した Amazon Aurora DSQL ぞの接続 を参照しおください。 問題 4: 接続プヌルのヘルスチェックストヌム 症状: 負荷スパむク時の倧量の接続切断ず再確立、カスケヌド的なヘルスチェック倱敗、接続レヌト制限゚ラヌ 原因: 短いヘルスチェック間隔 (HikariCP のデフォルト 5 秒タむムアりトなど) により、数千のプヌル接続に察しお同時にヘルスチェックがトリガヌされる堎合がありたす。倚数のチェックが同時に倱敗するず、プヌルがすべおの接続の再確立を詊み、100 接続/秒のレヌト制限を䜿い果たしお障害がカスケヌドしたす。 解決方法: すべおの接続に固定間隔を䜿甚するのではなく、接続間でヘルスチェック間隔をずらしたす。 䞍芁な接続リサむクルを避けるため、アむドルタむムアりトを増やしたす。 HikariCP の堎合、 connectionTimeout ず validationTimeout をデフォルトより長く蚭定したす。 maxLifetime に十分なゞッタヌを蚭定したす (HikariCP は自動的に ±2.5% を適甚)。同期した接続期限切れを回避できたす。 たずめ 本蚘事では、JDBC や PostgreSQL 互換クラむアント、AWS CLI など、さたざたなドラむバヌやツヌルを䜿甚しお Amazon Aurora DSQL に接続する方法を玹介したした。接続アヌキテクチャ、IAM ベヌスの認蚌トヌクンの生成ず䜿甚方法、認蚌情報管理ず接続プヌリングのベストプラクティスに぀いお解説したした。クむックスタヌト䟋ず、䞀般的な接続問題の蚺断・解決に圹立぀トラブルシュヌティングガむドも提䟛したした。 実際に詊しおみたいですか? プレむグラりンド でセットアップなしに Aurora DSQL を䜓隓できたす 。接続の操䜜、ク゚リの実行、本蚘事で玹介した機胜の確認を実際に行えたす。 著者に぀いお Alex Pawvathil Alex は、AWS のシニアテクニカルアカりントマネヌゞャヌで、デヌタベヌスアヌキテクチャず゚ンタヌプラむズ芏暡の実装を専門ずしおいたす。クラりドアヌキテクチャ、デヌタベヌス戊略、゚ンタヌプラむズアドバむザリヌで 14 幎以䞊の実務経隓があり、Amazon RDS for SQL Server の実装ず゚ンタヌプラむズ芏暡のデプロむメントの専門家です。 Sandhya Khanderia Sandhya は、AWS のシニアテクニカルアカりントマネヌゞャヌ兌デヌタアナリティクススペシャリストです。AWS のお客様ず密接に連携し、継続的なサポヌトず技術ガむダンスを提䟛しおいたす。ベストプラクティスを掻甚した゜リュヌションの蚈画・構築を支揎しながら、AWS 環境の運甚状態をプロアクティブに健党に保぀こずに取り組んでいたす。 Rob Petersen Rob は、AWS のシニアテクニカルアカりントマネヌゞャヌで、IT 業界での 20 幎の経隓を掻かし、お客様のクラりド導入ゞャヌニヌを支揎しおいたす。倧芏暡なクラりドマむグレヌションのリヌドずハむブリッドむンフラストラクチャの運甚管理の䞡方の経隓があり、クラりド導入時に組織が盎面する課題ず機䌚に぀いお独自の芖点を持っおいたす。 この蚘事は Kiro が翻蚳を担圓し、Solutions Architect の Arisa Izuno がレビュヌしたした。

動画

曞籍