クラウドサービス

OCI Functions

サーバー管理なしでコードをイベント実行できる OCI のサーバーレス基盤。Fn Project ベースで、関数をコンテナイメージとして実行し、使った分だけ課金する。

中級コスト最適化パフォーマンス効率運用上の優秀性セキュリティ
最終更新: 2026-06-15公式ドキュメント
3つの要点
TL;DR
  1. コードをコンテナイメージ化し、イベントやAPIで自動実行。
  2. 呼び出し数に応じて実行コンテナを水平スケール。
  3. 同期実行は最大300秒、Detached実行は最大3600秒。

解決する課題

サーバーを常時立てておく無駄や運用負荷を避けつつ、イベント発生時だけコードを動かしたい、というニーズに応えます。

  • サーバーを常時立てておくのはもったいない/面倒 → イベント時だけ動かす
  • 急なスパイクに自動でスケールしてほしい
  • 「オブジェクトがアップされたら処理」「キューにメッセージが来たら処理」を接着剤的に書きたい
  • 既存の Docker / Fn Project のスキルや成果物をそのまま活かしたい

主要概念と用語

  • 関数(Function): 実行単位のコード。OCI Functions ではコンテナイメージとしてパッケージされ、OCI Registry(OCIR) に push して使う
  • アプリケーション(Application): 複数の関数をまとめる論理グループ。VCN/サブネット・共通の構成値(config)・ログ設定をこの単位で持つ
  • トリガー / イベントソース: Events サービス、API Gateway、Notifications、Streaming、Connector Hub、OCI CLI/SDK からの直接呼び出しなど
  • Fn Project: OCI Functions の基盤となる OSS。fn CLI でローカル開発・デプロイができる
  • リソースプリンシパル(Resource Principal): 関数自身に与える ID。これを使って他の OCI サービスへ認証する(AWS の実行ロール相当)
  • 動的グループ(Dynamic Group)+ ポリシー: 関数に IAM 権限を与える仕組み。条件に合うリソースを動的グループ化し、ポリシーで許可
  • コールドスタート: 関数コンテナの初回起動にかかる遅延。Provisioned Concurrency で軽減できる

仕様・制限・クォータ

  • 同期呼び出しの実行時間は最大 300秒。非同期の Detached呼び出し5〜3600秒で、処理開始時にHTTP 202を返す
  • メモリは 128 / 256 / 512 / 1024 / 2048 / 3072 MB の離散値から選択(任意値ではない)。メモリに比例して CPU も割り当てられる
  • 関数は コンテナイメージで提供し、OCIR に格納する。イメージサイズの上限あり
  • リクエストとレスポンスのペイロードはそれぞれ最大 6MB。この上限は変更できない
  • 同時実行はリージョン単位の 合計メモリ上限(total-concurrency-mb)で管理され、上限到達時はHTTP 429になる
  • アプリケーションは VCN のサブネットに紐付き、関数はそのサブネット経由でプライベートリソースにアクセスする

内部の仕組み

OCI Functions は Fn Project をマネージド化したもので、関数はコンテナとして隔離実行されます。呼び出しが来ると、対象イメージを OCIR から取得して計算資源とネットワークを準備するため、初回はコールドスタートになります。実行基盤は一定時間保持され、後続呼び出しではホットスタートとして再利用されます。同時に多数のリクエストが来れば、複数コンテナを起動して水平スケールします。

  • 各関数はアプリケーションに設定された VCN サブネットにネットワーク接続される。プライベートサブネットなら NAT/Service Gateway 経由で外部・OCI サービスへ
  • 認証は リソースプリンシパルで行うのが基本。鍵をコード内に置く必要がない
  • Detached呼び出しは開始後すぐ制御を返し、成功・失敗の実行記録を Notifications / Queue / Streaming へ送れる

横にスクロール

API Gateway、Events、スケジュール、SDKからOCI Functionsを同期またはDetachedで呼び出し、OCIRのイメージから実行コンテナを準備して水平スケールし、VCN内外のサービスとログ・メトリクスへ接続する処理経路
同期呼び出しは処理結果を待ち、Detached呼び出しは開始時に202を返して最大1時間実行できます。初回はイメージ取得と実行基盤の準備が必要で、後続は保持済み基盤を再利用します。状態は外部サービスへ置き、同時実行メモリと下流サービスの容量を合わせて監視します。
コールドスタート対策

低レイテンシを安定させたいなら Provisioned Concurrency で実行基盤を事前に確保しておく。イメージを小さく保ち、初期化処理を軽くすることもコールドスタート短縮に効きます。

設計パターン / ベストプラクティス

  • ステートレスに作り、状態は Object Storage / Autonomous Database / NoSQL Database などへ
  • 小さく・速く(ベースイメージや依存を減らし、コンテナ起動と初期化を軽く)
  • 非同期+Streaming / Queue で失敗時のリトライ・退避を担保し、サービス間を疎結合に
  • 秘密情報は config(環境変数)に直書きせず Vault(Secrets) から取得する
  • API Gateway を前段に置き、認証・レート制限・ルーティングを集約する

運用・監視・トラブルシュート

  • ログは OCI Logging(アプリケーション単位で関数ログを有効化)
  • メトリクスは OCI Monitoring。名前空間 oci_faasFunctionInvocationCount FunctionExecutionDuration FunctionResponseCount(エラー含む)FunctionThrottledCount などを確認
  • スロットリング多発時はサービス制限やダウンストリーム(DB・外部 API)の限界を確認
  • 分散トレースは Application Performance Monitoring(APM) と連携して可視化

コスト

呼び出し回数 + 実行時間(GB秒 = メモリ × 実行秒数) で課金され、毎月の無料枠が用意されています。メモリを上げると CPU も増えるため、処理が速くなって総額が下がる場合もあります(要計測)。

課金要素内容ポイント
呼び出し回数関数の実行回数に対する課金月あたりの無料呼び出し枠がある
実行時間(GB秒)メモリ × 実行秒数で算出メモリ選択が単価とCPU量を左右する
無料枠一定の呼び出し数 + GB秒が毎月無料小規模・検証はほぼ無料で収まることも
Provisioned Concurrency事前確保した実行基盤への課金低レイテンシ用途。常時確保ぶんは費用増

セキュリティ

  • 関数にはリソースプリンシパルを使わせ、資格情報のハードコードを避ける(AWS の実行ロール相当)
  • 動的グループ+ポリシーで最小権限を付与。関数が触れる OCI リソースを限定する
  • プライベートサブネット配置と NSG / セキュリティリストでネットワーク境界を制御
  • アプリケーションをプライベートサブネットへ置いても関数の呼び出しエンドポイント自体は非公開にならないため、IAMポリシーで呼び出し主体を制限する
  • 秘密情報は Vault(Secrets) で管理し、実行時に取得する
  • 入力検証(API Gateway / イベントペイロード)でインジェクション対策を行う
アンチパターン

API キーやパスワードを関数の config(環境変数)やイメージ内に直書きするのは NG。リソースプリンシパルVault(Secrets) を使えば、鍵の管理・漏洩リスクを排除できます。

関連サービス・比較(AWS との対応)

観点OCI FunctionsAWS Lambda
位置づけOCI のサーバーレス(Fn Project ベース)AWS のサーバーレスの代表格
デプロイ形態コンテナイメージ(OCIR に格納)ZIP またはコンテナイメージ
最大実行時間同期300秒 / Detached 3600秒900 秒(15 分)
メモリ指定128〜3072 MB の6段階128MB〜10GB の連続値
権限付与リソースプリンシパル + 動的グループ/ポリシーIAM 実行ロール
ログ/監視OCI Logging / OCI Monitoring(oci_faas)CloudWatch Logs / Metrics
事前ウォームProvisioned ConcurrencyProvisioned Concurrency

ハンズオン / CLI例

OCI Functions の作成・呼び出しは、Fn Project の fn CLI(イメージのビルド/デプロイ)と OCI CLI(アプリ作成・関数管理・呼び出し)を組み合わせて行います。

# OCI CLI: アプリケーションを作成(VCN サブネットに紐付け)
oci fn application create \
  --compartment-id ocid1.compartment.oc1..xxxxx \
  --display-name demo-app \
  --subnet-ids '["ocid1.subnet.oc1..xxxxx"]'

# Fn CLI: コンテキストをそのアプリに合わせ、関数をビルドして OCIR にデプロイ
fn deploy --app demo-app

# OCI CLI: アプリ内の関数一覧から OCID を確認
oci fn function list \
  --application-id ocid1.fnapp.oc1..xxxxx \
  --query "data[].{name:\"display-name\", id:id}" --output table

# OCI CLI: 関数を手動で呼び出して結果を確認
oci fn function invoke \
  --function-id ocid1.fnfunc.oc1..xxxxx \
  --file - \
  --body '{"name":"world"}'

OCI Service

OCI Functionsを実務で読む

TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。

解決すること

コンピューティング

比較で見る軸

クラウド: OCI / カテゴリ: コンピューティング / 難易度: intermediate

導入後に効く点

呼び出し数に応じて実行コンテナを水平スケール。

先に潰すリスク

サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。

数字・仕様の読み方
クラウド
OCI
カテゴリ
コンピューティング
難易度
intermediate
関連資格
設計柱
cost / performance / operational / security

判断チェックリスト

  • 自社の用途が「コンピューティング / cost」に近いか確認する。
  • 強みである「コードをコンテナイメージ化し、イベントやAPIで自動実行。」が本当に評価軸になるか確認する。
  • 注意点の「サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。」を運用で吸収できるか確認する。
  • 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
  • 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
  • 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。

次に確認する観点

コンピューティングcostperformanceoperationalsecurity

他クラウドの同等サービス

役割が近いサービスです。設計の置き換えや比較検討の参考に。