TL

Cloud Service

OCI Functions

サーバー管理なしでコードをイベント実行できる OCI のサーバーレス基盤。OSS の Fn Project ベースで、関数を Docker イメージとして実行し、使った分(GB秒)だけ課金。AWS Lambda に相当。

中級コスト最適化パフォーマンス効率運用上の優秀性セキュリティ
最終更新: 2026-06-03公式ドキュメント ↗
TL;DR要点だけ先に
  • 1.コードを Docker イメージ化し、イベントで自動実行。
  • 2.サーバー管理不要で自動スケール、GB秒だけ課金。
  • 3.AWS の Lambda 相当。最大 5 分で長時間処理は不向き。

解決する課題

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

  • サーバーを常時立てておくのはもったいない/面倒 → イベント時だけ動かす
  • 急なスパイクに自動でスケールしてほしい
  • 「オブジェクトがアップされたら処理」「キューにメッセージが来たら処理」を接着剤的に書きたい
  • 既存の 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 秒(5 分)(超えるなら処理を分割するか Container Instances / OKE / Batch 的な常駐基盤へ)
  • メモリは 128 / 256 / 512 / 1024 / 2048 MB の離散値から選択(任意値ではない)。メモリに比例して CPU も割り当てられる
  • 関数は コンテナイメージで提供し、OCIR に格納する。イメージサイズの上限あり
  • リクエストのペイロードサイズ上限、レスポンスサイズ上限がある
  • 同時実行・呼び出しレートはテナンシ/リージョン単位のサービス制限で管理され、引き上げ申請が可能
  • アプリケーションは VCN のサブネットに紐付き、関数はそのサブネット経由でプライベートリソースにアクセスする

内部の仕組み

OCI Functions は Fn Project をマネージド化したもので、関数は Docker コンテナとして隔離実行されます。呼び出しが来ると、対象イメージを OCIR から取得してコンテナを起動(=コールドスタート)し、処理後しばらくウォーム状態で再利用します。同時に多数のリクエストが来れば、その数だけコンテナを並列に増やして水平スケールします。

  • 各関数はアプリケーションに設定された VCN サブネットにネットワーク接続される。プライベートサブネットなら NAT/Service Gateway 経由で外部・OCI サービスへ
  • 認証は リソースプリンシパルで行うのが基本。鍵をコード内に置く必要がない
コールドスタート対策

低レイテンシを安定させたいなら 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 / セキュリティリストでネットワーク境界を制御
  • 秘密情報は Vault(Secrets) で管理し、実行時に取得する
  • 入力検証(API Gateway / イベントペイロード)でインジェクション対策を行う
アンチパターン

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

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

観点OCI FunctionsAWS Lambda
位置づけOCI のサーバーレス(Fn Project ベース)AWS のサーバーレスの代表格
デプロイ形態コンテナイメージ(OCIR に格納)ZIP またはコンテナイメージ
最大実行時間300 秒(5 分)900 秒(15 分)
メモリ指定128/256/512/1024/2048 MB の離散値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

導入後に効く点

サーバー管理不要で自動スケール、GB秒だけ課金。

先に潰すリスク

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

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

判断チェックリスト

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

次に確認する観点

コンピューティングcostperformanceoperationalsecurity

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

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