Cloud Service
OCI Functions
サーバー管理なしでコードをイベント実行できる OCI のサーバーレス基盤。OSS の Fn Project ベースで、関数を Docker イメージとして実行し、使った分(GB秒)だけ課金。AWS Lambda に相当。
- 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。
fnCLI でローカル開発・デプロイができる - リソースプリンシパル(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_faasでFunctionInvocationCountFunctionExecutionDurationFunctionResponseCount(エラー含む)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 Functions | AWS 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 Concurrency | Provisioned 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、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。
他クラウドの同等サービス
役割が近いサービスです。設計の置き換えや比較検討の参考に。