Cloud Service
OCI API Gateway
OCI 上で REST API の受付窓口を担うマネージドサービス。認証・流量制限・CORS・ルーティングを行い、OCI Functions やバックエンド HTTP サービスへ繋ぐ。AWS の Amazon API Gateway に相当。
- 1.REST API の受付窓口。認証・流量制限・CORS・ルーティングを集約。
- 2.フルマネージドで自動スケール、玄関で一括処理しサーバー不要。
- 3.OCI Functions と繋いでサーバーレス API を構築できる。
解決する課題
- API 用のサーバーを自前で運用したくない(フルマネージドで自動スケール)
- 認証・レート制限・CORS を共通の玄関で処理したい
- OCI Functions や内部 HTTP サービスを安全に公開したい
- パブリック/プライベートの両方のエンドポイントを使い分けたい
主要概念と用語
- ゲートウェイ(Gateway): リクエストを受ける実体。VCN のサブネットに配置し、パブリックまたはプライベートのエンドポイントを持つ。配置サブネットのセキュリティリストに加え、ゲートウェイには**ネットワークセキュリティグループ(NSG)**を関連付けられる
- デプロイメント(Deployment): 1 つのゲートウェイ上に、特定のパスプレフィックス(例
/v1)で公開する API 定義。ルート・ポリシー・バックエンドをまとめた単位 - ルート(Route): パス(例
/orders)と HTTP メソッドの組み合わせに対し、どのバックエンドへ流すかを定義 - バックエンド(Backend): ルートの転送先。OCI Functions / HTTP(URL)/ Stock Response(固定応答) の 3 種類
- API デプロイメント仕様(Specification): ルート・リクエスト/レスポンスポリシーを記述した JSON。コンソール、CLI、または OpenAPI(Resource Manager 経由) で定義
- リクエストポリシー / ルートポリシー: 認証(Authentication)、CORS、レートリミット、変換、ヘッダー検証など、ゲートウェイ全体(デプロイメント単位)またはルート単位で適用する処理
- オーソライザー(Authorizer): JWT 検証(IDCS / OAuth IdP の発行トークン)または OCI Functions による独自認可で認証を玄関に集約
- 使用量プラン(Usage Plan)/ APIキー(クライアント)/ サブスクライバー: クライアントごとの流量管理と利用可否を制御
仕様・制限・クォータ
- フルマネージドで自動スケール。サーバー台数の管理は不要
- 1 ゲートウェイあたりのデプロイメント数、デプロイメントあたりのルート数などにサービスリミットがある(テナンシ/リージョンごとに上限が設定され、引き上げ申請が可能)
- ゲートウェイは特定リージョンのサブネットに紐づくリージョナルなリソース。複数 AD(可用性ドメイン)にまたがり冗長化される
- TLS 終端はゲートウェイで実施。パブリックエンドポイントには**カスタムドメイン+証明書(Certificates サービス)**を関連付け可能
- レートリミットはデプロイメント単位で「秒あたりリクエスト数」と、
PER_CLIENT(クライアント単位)/TOTAL(全体)の単位を指定できる - リクエスト/レスポンスのペイロードサイズやタイムアウトに上限がある(バックエンド応答待ちのタイムアウト等)
内部の仕組み
クライアント → API Gateway → バックエンド、という流れで、玄関で認証(オーソライザー)→ 流量制限(レートリミット)→ CORS / ヘッダー検証 → ルーティングを順に適用し、最終的に OCI Functions / HTTP バックエンド / 固定応答へ転送します。
ゲートウェイは VCN 内のサブネットにデプロイされるため、プライベートエンドポイントにすれば VCN 内部や FastConnect / VPN 経由のクライアントだけに公開でき、パブリックエンドポイントにすればインターネットからアクセスできます。バックエンドがプライベートサブネットのロードバランサや内部 HTTP サービスでも、ゲートウェイが同じ VCN に居るため到達できます。
リクエストポリシーはデプロイメント全体に効くもの(認証、全体 CORS、相互 TLS など)と、ルート単位で効くもの(個別の認可・変換・レートリミット)があり、両者を組み合わせて段階的に制御します。
インターネット公開ならパブリックエンドポイント、社内・VCN 内限定ならプライベートエンドポイント。 ゲートウェイ作成後にエンドポイント種別は変更できないため、最初の設計で選ぶこと。
設計パターン / ベストプラクティス
- API Gateway + OCI Functions でサーバーレス API(AWS の API Gateway + Lambda 相当)
- JWT オーソライザーで IDCS(Oracle Identity Cloud Service)や外部 OAuth IdP の発行トークンを玄関で検証し、認証を集約
- レートリミット(PER_CLIENT) と使用量プランで乱用防止・利用者ごとの流量管理
- 前段やバックエンド側に Web Application Firewall(OCI WAF) を併用して L7 防御
- バックエンドをプライベートサブネットのロードバランサにして、サービス本体を直接公開しない
- デプロイメント仕様を OpenAPI + Resource Manager(Terraform) で IaC 管理し、ステージ相当を**別デプロイメント(パスプレフィックス)**で表現
運用・監視・トラブルシュート
- Monitoring(メトリクス):
HttpResponses(ステータス別件数)、Latency、BackendHttpResponses、BytesSentなどを名前空間oci_apigatewayで確認 - アクセスログ / 実行ログ: OCI Logging サービスへ出力(デプロイメント単位で有効化)。401/403 は認証ポリシー、429 はレートリミット超過を確認
- Service Connector Hub でログを Object Storage / Streaming / Functions へ転送し、長期保管や分析に回す
- 5xx 多発時はバックエンド(Functions のコールドスタート・タイムアウト、HTTP バックエンドの到達性/NSG)を切り分け
コスト
OCI API Gateway はゲートウェイ単位の時間課金とAPI コール数に基づく従量課金です。バックエンド(Functions やロードバランサ)の料金は別計上になります。
| コスト要素 | 課金の考え方 | メモ |
|---|---|---|
| ゲートウェイ | デプロイ中のゲートウェイ数 × 稼働時間 | 停止概念は基本なく、存在し続ける限り発生 |
| API コール | 受け付けたリクエスト数に応じた従量 | 無料枠を超えた分を月次で課金 |
| バックエンド | Functions の実行・LB の帯域は別請求 | Gateway 料金には含まれない |
| ログ/メトリクス | Logging の取り込み量等は別 | アクセスログ大量出力時は要注意 |
セキュリティ
- オーソライザー: JWT 検証(発行者・対象・署名鍵を検証)または OCI Functions オーソライザーで独自認可。認証を玄関に集約
- IAM ポリシー: ゲートウェイが Functions を呼ぶ・Certificates を読む等は、動的グループ+ポリシーで最小権限付与(資格情報のハードコード不要)
- mTLS(相互 TLS): クライアント証明書を要求してデバイス/サービス間を相互認証
- ネットワーク分離: プライベートエンドポイント+NSG/セキュリティリストでアクセス元を限定。バックエンドはプライベートサブネットへ
- TLS / カスタムドメイン: Certificates サービスの証明書で HTTPS を終端、レートリミットで乱用防止、必要に応じて WAF を併用
バックエンドの Functions や内部 HTTP サービスを認証なしのパブリックルートで直に公開するのは NG。 JWT または Functions オーソライザーを玄関に置き、加えてレートリミットで乱用を抑えること。 認証をバックエンド任せにすると、玄関が素通しになり攻撃面が広がります。
関連サービス・比較(AWS との対応)
| 観点 | OCI API Gateway | Amazon API Gateway |
|---|---|---|
| 位置づけ | OCI のマネージド API 受付 | AWS のマネージド API 受付 |
| 主なバックエンド | OCI Functions / HTTP / 固定応答 | Lambda / HTTP / AWS サービス統合 |
| 認証 | JWT 検証 / Functions オーソライザー | Cognito / Lambda オーソライザー / IAM |
| 流量制御 | レートリミット(PER_CLIENT/TOTAL) | スロットリング / 使用量プラン / APIキー |
| 環境分け | デプロイメント(パスプレフィックス) | ステージ |
| ネットワーク | VCN サブネット配置・パブリック/プライベート | リージョナル/エッジ最適化/プライベート(VPC) |
| ログ/監視 | Logging + Monitoring(oci_apigateway) | CloudWatch Logs / メトリクス |
| IaC | Resource Manager(Terraform) / OpenAPI | CloudFormation / OpenAPI(Swagger) |
ハンズオン / CLI例
# 1. ゲートウェイを作成(パブリックエンドポイント、指定サブネットに配置)
oci api-gateway gateway create \
--compartment-id "ocid1.compartment.oc1..xxxx" \
--display-name orders-gw \
--endpoint-type PUBLIC \
--subnet-id "ocid1.subnet.oc1.ap-tokyo-1.xxxx"
# 2. デプロイメント仕様(ルート+バックエンド)を JSON で用意
cat > spec.json <<'JSON'
{
"routes": [
{
"path": "/orders",
"methods": ["GET", "POST"],
"backend": {
"type": "ORACLE_FUNCTIONS_BACKEND",
"functionId": "ocid1.fnfunc.oc1.ap-tokyo-1.xxxx"
}
}
]
}
JSON
# 3. デプロイメントを作成(パスプレフィックス /v1 で公開)
oci api-gateway deployment create \
--compartment-id "ocid1.compartment.oc1..xxxx" \
--display-name orders-v1 \
--gateway-id "ocid1.apigateway.oc1.ap-tokyo-1.xxxx" \
--path-prefix /v1 \
--specification file://spec.json
# 4. ゲートウェイとデプロイメントを一覧で確認
oci api-gateway gateway list \
--compartment-id "ocid1.compartment.oc1..xxxx" --output table
oci api-gateway deployment list \
--compartment-id "ocid1.compartment.oc1..xxxx" --output table
OCI Service
OCI API Gatewayを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
アプリ統合
比較で見る軸
クラウド: OCI / カテゴリ: アプリ統合 / 難易度: intermediate
導入後に効く点
フルマネージドで自動スケール、玄関で一括処理しサーバー不要。
先に潰すリスク
サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。
- クラウド
- OCI
- カテゴリ
- アプリ統合
- 難易度
- intermediate
- 関連資格
- —
- 設計柱
- security / performance / reliability / operational
判断チェックリスト
- 自社の用途が「アプリ統合 / security」に近いか確認する。
- 強みである「REST API の受付窓口。認証・流量制限・CORS・ルーティングを集約。」が本当に評価軸になるか確認する。
- 注意点の「サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。
他クラウドの同等サービス
役割が近いサービスです。設計の置き換えや比較検討の参考に。