TL

Cloud Service

OCI Queue

フルマネージドのメッセージキュー。送信側と処理側を疎結合化し、スパイクをバッファして取りこぼさない。AWS の Amazon SQS に相当する。

中級信頼性パフォーマンス効率コスト最適化運用上の優秀性
最終更新: 2026-06-03公式ドキュメント ↗
TL;DR要点だけ先に
  • 1.仕事を一旦ためる箱で送信側と処理側を疎結合にするキュー。
  • 2.急増してもバッファして取りこぼさず、リクエスト課金で従量。
  • 3.at-least-once 配信なので処理は冪等に作るのが鉄則。

解決する課題

物理的なメッセージブローカー(Kafka や RabbitMQ など)を自前で構築・運用せずに、疎結合な非同期連携をすぐに始められます。

  • アクセス急増でバックエンドが詰まる → キューでバッファ
  • 送信側(プロデューサ)と処理側(コンシューマ)を疎結合にして独立にスケールしたい
  • 失敗したジョブを安全に退避・再試行したい(DLQ)
  • 標準の HTTP/REST API で言語を問わず連携したい

主要概念と用語

  • キュー(Queue): メッセージを格納するエンドポイント。作成時にメッセージエンドポイントの FQDN が払い出される
  • プロデューサ / コンシューマ: メッセージを送る側 / 取り出して処理する側
  • PutMessages / GetMessages / DeleteMessages / UpdateMessages: メッセージの送信・取得・削除・可視性更新を行う REST 操作
  • 可視性タイムアウト(Visibility timeout): GetMessages で取り出したメッセージを一時的に他のコンシューマから隠す時間。既定 30 秒
  • デッドレターキュー(DLQ): 配信試行回数(delivery count)が上限を超えたメッセージの退避先
  • チャネル(Channel): キュー内の論理的なサブグループ。channelId を指定して送受信すると、特定チャネルのメッセージだけを順序付きで扱える(関連メッセージのグルーピングに利用)
  • コンシューマグループ(複数コンシューマ): 同一キューを複数のコンシューマで並列に GetMessages して水平にスケール

仕様・制限・クォータ

  • メッセージ保持期間は 最大 7 日(既定値、キュー作成時に設定)
  • メッセージ最大サイズは 既定 128 KiB(キュー単位で設定可能。大きいデータは Object Storage に置き参照を渡す)
  • 可視性タイムアウトは既定 30 秒、最大 12 時間(43,200 秒)
  • ロングポーリングは GetMessages の timeoutInSeconds で指定(最大 30 秒)
  • プル型(コンシューマが GetMessages でポーリング)
  • 順序保証はチャネル単位で行われる(チャネルを使わない場合は標準キュー同様、ベストエフォート)
  • アクセスは REST API / OCI SDK / OCI CLI から。データプレーン操作はメッセージエンドポイント、管理操作(作成・削除)はコントロールプレーン

内部の仕組み

コンシューマがキューを GetMessages でポーリングしてメッセージを取得すると、可視性タイムアウトの間そのメッセージは他のコンシューマから見えなくなり、同時に各メッセージへ一時的な receipt(レシート) が払い出されます。処理が成功したら receipt を使って DeleteMessages で削除、処理が長引く場合は UpdateMessages で可視性タイムアウトを延長します。可視性タイムアウトが切れると再び見えるようになり、別のコンシューマに再配信されます。

メッセージごとに 配信回数(delivery count) がカウントされ、設定した上限(maximum delivery attempts)を超えると DLQ へ自動的に移動します。OCI Queue は at-least-once(最低1回)配信のため、同じメッセージが2回以上配信される可能性があり、コンシューマ側の冪等な処理が前提になります。

二重処理に備える

OCI Queue は「最低1回」配信なのでまれに重複します。処理は冪等に作るのが鉄則です。関連メッセージの順序が必要なら channelId(チャネル) を使い、同一チャネルのメッセージを順序付きで1つずつ処理します。

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

  • Queue + Functions: メッセージ到着を OCI Functions(FaaS)で処理するワーカー(Connector Hub 連携やポーリングで起動)
  • キューの深さでスケール: 滞留メッセージ数に応じてコンシューマ(OKE の Pod や Compute)の台数を増減
  • DLQ で失敗を退避し、原因調査・再投入する
  • 大きいペイロードは Object Storage に置き、キューにはオブジェクト参照(URI)だけを載せる
  • ロングポーリングtimeoutInSeconds を長め)で空ポーリングのリクエストを減らす
  • 関連イベントは チャネル でグルーピングし、エンティティ単位の順序を担保する

運用・監視

  • OCI Monitoring のメトリクス名前空間 oci_queue を使用。主な指標は以下
    • Messages(可視メッセージ数)/ InFlightMessages(処理中のメッセージ数)
    • DeadLetterMessages(DLQ 滞留数)
    • GetMessages / PutMessages などの API 呼び出し数
  • 滞留増 → コンシューマ不足やダウンストリーム障害を疑う
  • DLQ に溜まる → 処理ロジック / 権限(IAM ポリシー)/ メッセージフォーマットを確認
  • 操作監査は OCI Audit ログ、メトリクスのしきい値超過は Alarm で通知

コスト

リクエスト課金が中心です。空ポーリングを減らすほど安くなります。

課金要素内容コスト最適化のポイント
メッセージ操作(リクエスト)PutMessages / GetMessages / DeleteMessages などの API 呼び出し数で課金ロングポーリングで空ポーリングを削減し、バッチで複数メッセージをまとめて送受信
DLQDLQ のメッセージも通常メッセージとして扱われる原因を早期に解消し DLQ を溜めない
プロビジョニングキャパシティの事前確保は不要(サーバーレス)使った分だけ。アイドル時のコストを気にしなくてよい

セキュリティ

  • IAM ポリシーでアクセス制御。manage queues(管理)と、データプレーン操作の use queues / read queues などを最小権限で付与する
  • 通信は TLS(HTTPS) で暗号化。保存時はサービスによる暗号化に加え、カスタマー管理キー(OCI Vault の鍵) を指定可能
  • メッセージエンドポイントへのアクセスはネットワークポリシー(プライベートアクセス)で制限する
アンチパターン

コンシューマやプロデューサに**広すぎる権限(テナンシ全体の manage queues)**を付けるのは NG。ワーカーには対象キューへの use queues(送受信のみ) に絞った動的グループ + IAM ポリシーを割り当て、管理操作と権限を分離します。

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

観点OCI QueueAmazon SQS
位置づけOCI のフルマネージドメッセージキューAWS のフルマネージドメッセージキュー
配信モデルプル(GetMessages でポーリング)プル(ポーリング)
配信保証at-least-once(最低1回)標準=最低1回 / FIFO=exactly-once
順序付けチャネル(channelId)単位で順序保証FIFO キューで順序保証
メッセージ非表示可視性タイムアウト(既定30秒)可視性タイムアウト
失敗の退避DLQ(最大配信回数で移動)DLQ(maxReceiveCount で移動)
最大保持期間最大7日最大14日
インターフェースREST API / SDK / OCI CLIAWS API / SDK / CLI

ハンズオン / CLI例

# キューを作成(コンパートメント指定。可視性タイムアウト等は作成後に設定可)
oci queue queue-admin create \
  --compartment-id "$COMPARTMENT_OCID" \
  --display-name jobs

# 作成したキューのメッセージエンドポイントを確認
oci queue queue-admin get --queue-id "$QUEUE_OCID" \
  --query "data.\"messages-endpoint\"" --raw-output

# メッセージを送信(データプレーン: --endpoint にメッセージエンドポイントを指定)
oci queue messages put-messages \
  --endpoint "$MESSAGES_ENDPOINT" \
  --queue-id "$QUEUE_OCID" \
  --messages '[{"content":"{\"id\":\"job-1\"}"}]'

# メッセージを受信(ロングポーリング: timeout-in-seconds=20)
oci queue messages get-messages \
  --endpoint "$MESSAGES_ENDPOINT" \
  --queue-id "$QUEUE_OCID" \
  --visibility-in-seconds 30 \
  --timeout-in-seconds 20

# 処理完了後、レシートで削除
oci queue messages delete-message \
  --endpoint "$MESSAGES_ENDPOINT" \
  --queue-id "$QUEUE_OCID" \
  --message-receipt "$RECEIPT"

OCI Service

OCI Queueを実務で読む

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

解決すること

アプリ統合

比較で見る軸

クラウド: OCI / カテゴリ: アプリ統合 / 難易度: intermediate

導入後に効く点

急増してもバッファして取りこぼさず、リクエスト課金で従量。

先に潰すリスク

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

数字・仕様の読み方
クラウド
OCI
カテゴリ
アプリ統合
難易度
intermediate
関連資格
設計柱
reliability / performance / cost / operational

判断チェックリスト

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

次に確認する観点

アプリ統合reliabilityperformancecostoperational

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

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