mcpField
C
cloud-functions

cloud-functions

github.com/tencentcloudbaseクラウド・DevOps791.2k 回インストール今日更新
リポジトリ

cloud-functions について

cloud-functionsは、CloudBaseのイベント関数とHTTP関数の作成、デプロイ、確認、デバッグを支援する開発スキルです。コーディングエージェントが関数の種類を選び、実装資料を参照し、安全なデプロイ手順に従えるよう案内します。

主な機能

  1. 01イベント関数とHTTP関数のガイダンス
  2. 02関数のデプロイとデバッグ手順
  3. 03実装詳細の参照先案内
  4. 04デプロイ安全性とデータ保護の確認

活用シーン

  1. 01実行時ロジックに適した関数形式の選択
  2. 02関数ログやトリガーのデバッグ
  3. 03CloudBase SDKを使うHTTP関数の準備
  4. 04カスタムイメージ関数のデプロイと検証

MCP 対応

関数操作やデプロイ状況のポーリングに使うmanageFunctionsやqueryFunctionsなど、CloudBase MCPツールについて説明します。

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/tencentcloudbase/skills --skill cloud-functions

インストール後、Claude Code で/cloud-functionsを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

checklist.md
LICENSE.md
references.md
references/
event-functions.md
http-function-credentials.md
http-functions-custom-image.md
http-functions.md
operations-and-config.md
vpc-and-tcp-database.md

詳細

関連スキル(ローカルのみ)

関連する CloudBase スキルは、このスキルと同じ場所に配置されています。../auth-tool-cloudbase/SKILL.md のようなローカルの相対パスを使用してください。

参照先の関連スキルファイルがこの環境にない場合は、CloudBase プラグイン一式(または不足しているスキル)をインストールするようユーザーに依頼してください。リモートのスキルやプロトコルの Markdown を HTTP で取得して、エージェントのコンテキストに読み込んではいけません。

横断的なプロトコル(コード変更またはデプロイの前に必須):

  • 変更安全性プロトコル:../cloudbase-platform/references/protocols/change-safety-protocol.md
  • デプロイゲート:../cloudbase-platform/references/protocols/deployment-gate.md
  • センシティブなランタイムデータの保護:../cloudbase-platform/references/protocols/sensitive-runtime-data-protection.md

Cloud Functions の開発

有効化の条件

まずこのスキルを使用する場合
  • アプリケーションのランタイムロジックを提供する CloudBase Event Function または HTTP Function の作成、更新、デプロイ、調査、デバッグがタスクである場合。
  • リクエストに関数のランタイム、関数ログ、scf_bootstrap、関数トリガー、または関数ゲートウェイへの公開が含まれる場合。
コードを書く前に読む場合
  • Event Function と HTTP Function のどちらを使うか、まだ判断する必要がある場合。
  • タスクで manageFunctions、queryFunctions、manageGateway、または従来の関数ツール名に言及されている場合。
  • ログまたはゲートウェイの設定に、代替手段として callCloudApi が必要になる可能性がある場合。
  • HTTP Function から @cloudbase/node-sdk または @cloudbase/manager-node を介して CloudBase リソースを呼び出す場合 → ./references/http-function-credentials.md を読んでください。HTTP Function では認証情報を明示的に指定する必要があります。Event Function のパスワードレスなランタイム経路に依存してはいけません。
例外のみ(デフォルトでは読まないでください)
  • クラシックな TCP DB クライアント(DATABASE_URL / Prisma / mysql2 / pg / Redis)をすでに使用している既存アプリを移行する場合 → ./references.md 経由で ./references/vpc-and-tcp-database.md を読んでください。新しいビジネスデータの CRUD では、TCP の代わりに CloudBase ネイティブ SDK(app.database() / app.rdb())または MCP SQL ツールを優先してください。
その後、以下も読んでください
  • 詳細な参照先の案内 → ./references.md
  • 認証の設定またはプロバイダー関連のバックエンド作業 → ../auth-tool-cloudbase/SKILL.md
  • CloudBase Integration Center で生成された WeChat Pay または Official Account の関数 → ../cloudbase-wechat-integration/SKILL.md(公式ドキュメント:https://docs.cloudbase.net/integration/introduce.md)
  • 関数での AI 利用 → ../ai-model-nodejs/SKILL.md
  • 長時間稼働するコンテナーサービスまたはエージェントのランタイム → ../cloudrun-development/SKILL.md
  • クライアントまたはスクリプトから CloudBase 公式プラットフォーム API を呼び出す場合 → ../http-api-cloudbase/SKILL.md
使用しない場合
  • CloudRun コンテナーサービス。
  • Web 認証 UI の実装。
  • データベーススキーマの設計または一般的なデータモデルの作業。
  • CloudBase 公式プラットフォーム API のクライアント、またはプラットフォームのエンドポイントのみを利用する生の HTTP インテグレーション。
  • 推測した API を使った Integration Center インスタンスの作成。WeChat Pay または Official Account の生成関数については、ビジネス上の仕様に cloudbase-wechat-integration を使用し、このスキルは関数の操作にのみ使用してください。
  • CloudBase JS SDK で直接処理できるタスク — 簡単なデータの読み書き、ランキング、ファイルのアップロード、リアルタイムクエリ。関数を作成する前に、該当する SDK の機能を優先してください。確認済みの NoSQL コレクションには db.collection(...).get/add/update のみを使用し、CloudBase PG テーブルには app.rdb().from(...) を使用してください。関数を使うと、SDK なら完全に不要にできるデプロイの複雑さ、CORS 設定、HTTP ゲートウェイのバインドが増えます。
よくある間違い/注意点
  • 間違った関数タイプを選び、後から補おうとすること。
  • CloudBase 公式 API クライアントでの作業と、独自の HTTP 関数の構築を混同すること。
  • Event Function のコード形式(exports.main(event, context))と、HTTP Function のコード形式(ポート 9000 での req / res)を混在させること。
  • HTTP Access を HTTP Functions の実装モデルとして扱うこと。HTTP Access は Event Functions 用のゲートウェイ設定であり、HTTP Function のランタイムモデルではありません。
  • db.collection("name").add(...) を実行すれば、存在しないドキュメントデータベースのコレクションが自動作成されると思い込むこと。コレクションの作成は別途管理する必要があります。
  • デプロイパッケージに静的コンテンツを埋め込むこと — メディアファイル、ユーザーアップロード、または独自のサイクルで変更されるアセット。 パッケージはデプロイのたびにアップロードされ、関数パッケージには厳格なサイズ上限があります。そのため、大容量のコンテンツや個別に変更されるコンテンツは、デプロイを毎回遅くし、パッケージが上限を超える原因にもなります。
    • メディアファイル(*.mp4、大きな画像、フォント)— パッケージに含めず、クラウドストレージに置いて URL で参照します。
    • 関数のローカルファイルシステムに書き込むユーザーアップロード — 関数は一時的なもので、/tmp の容量は小さく、共有もされません。アップロードはクラウドストレージに保存します。
    • 頻繁に更新される静的リソースをパッケージにバンドルすること — 変更のたびに関数全体の再デプロイが必要になります。関数は コード が変更されたときだけ再デプロイされるよう、静的リソースはクラウドストレージから配信します。
  • 作成後にランタイムを変更できないことを忘れること。
  • Web ログインに対する最初の解決策としてクラウド関数を使うこと。
  • HTTP Functions には scf_bootstrap を同梱し、ポート 9000 でリッスンさせ、依存関係も含める必要があることを忘れること。
  • HTTP Function で CloudBase SDK を使うのに明示的な認証情報が不要だと思い込むこと。デフォルトの一時認証情報の経路は HTTP Functions では信頼できず、認証情報のローテーションによって実行中のサービスが停止する可能性があります。@cloudbase/node-sdk には CloudBase サーバー API Key または Tencent Cloud キーペアを使用し、@cloudbase/manager-node には Tencent Cloud キーペアを使用してください。references/http-function-credentials.md を参照してください。
  • HTTP Function へのアクセス方法を忘れること。認証情報なしの呼び出しは 401 MISSING_CREDENTIALS で失敗し、認証情報があっても許可されていない呼び出しは 403 EXCEED_AUTHORITY で失敗します。ブラウザー、ゲーム、アプリのクライアント向けには、関数のセキュリティルールを緩和するのではなく、ゲートウェイルート(manageGateway(action="createRoute", auth: false))を追加してください。PostgreSQL 環境では、このルールは環境全体に適用される authz.user.rego ドキュメントにあるため、編集すると環境全体のポリシーが上書きされます。references/http-functions.md を参照してください。
  • InsufficientBalance による呼び出し失敗を、アカウントの問題として捉えること。 クラウド関数はこのコードで HTTP 410 を返し、コード上はアカウント残高不足のように見えますが、実際に不足しているのは環境のリソースポイントです。これはアカウント残高より先に消費され、チャージしても復元されません。原因は4つ(トライアルポイントの枯渇/プランポイントの枯渇/プランの期限切れ/アカウントの未払い)で、それぞれ対処方法が異なり、チャージが関係するのは最後のケースだけです。そのため、案内する前に manageEnv(action="usage") とアカウント残高を確認して原因を診断してください。../cloud-api-operations/references/recipes/credits-exhaustion.md を参照してください。
  • scf_bootstrap の Node.js バイナリパスと関数ランタイムを一致させないこと(例:runtime: "Nodejs16.13" を設定しているのに /var/lang/node18/bin/node を使用する)。
  • Custom Image HTTP Functions で、TCR、CloudApp ビルド、SCF を同じリージョンに配置する必要があることを忘れること、latest の代わりに一意のタグを使わないこと、またはリクエスト駆動のポート 9000 のイメージモデルと、注入された PORT でリッスンする長時間稼働の CloudRun コンテナを混同すること。
  • MCP ですべてのイメージパイプラインをカバーできると思い込むこと。manageFunctions は runtime: "CustomImage" と imageConfig による SCF イメージのデプロイ(Stage B)をカバーしますが、CloudApp のカスタムビルドから TCR へのプッシュ(Stage A)は Tencent Cloud API を直接呼び出す必要があります。callCloudApi にフォールバックする前に、公式ドキュメントでアクション名とパラメーターを確認してください。
  • Change Safety Protocol(cloudbase-platform/references/protocols/change-safety-protocol.md)に従う前に、コードや設定を変更すること。
  • cloudbase-platform/references/protocols/deployment-gate.md のチェックを完了する前に、関数を公開したりデプロイしたりすること。
  • req.headers、process.env、event、context をそのまま返すこと — ゲートウェイによっては x-cloudbase-context(base64 形式の一時認証情報)が注入されることがあります。このヘッダーをエコーしたり、認証情報を含む環境変数をクライアントに出力したりしないでください。../cloudbase-platform/references/protocols/sensitive-runtime-data-protection.md に従ってください。
  • 環境をまたいでレイヤー名(例:common)をそのまま使うこと。 SCF の LayerName はアカウント単位で共有される名前空間です。同じ名前を使うと、バージョン番号も共有されます。新しいレイヤーは固定形式 {layerName}_{当前envId}(例:common_cloud1-d9ghadgak3edf6b36)で作成してください。layerName には完全な名前を指定し、自動サフィックスを独自に付けないでください。MCP レイヤーの warnings はソフトアドバイザリとして扱ってください(操作自体は成功します)。詳細は ./references/operations-and-config.md を参照してください。
  • 実行時間の長い MCP イメージデプロイでは、ワークフローを最後まで完了させる必要があります:実際の cloud または local デプロイに manageFunctions の deployFunction を使用する場合は、1回の Tool Call を長時間ブロックしないよう、wait=false を優先してください。ツールが taskId を返した場合、ステータスが running の間はワークフローを終了したり、成功を報告したり、ユーザーに待つよう求めたりしないでください。queryFunctions(action="getFunctionDeployStatus", taskId="...") を自動的に呼び出し、報告された進捗に従ってステータスが succeeded または failed になるまでポーリングを続けてください。妥当な回数ポーリングしても完了しない場合に限り、デプロイが進行中であることを報告してください。その際は taskId、現在のステージ、最新の進捗を含めてください。成功した場合は、イメージ URI またはビルド ID、関数のステータス、Gateway URL を報告してください。失敗した場合は、失敗したステージ、エラーコード、リクエスト ID、診断方法を報告してください。ステータスが expired の場合は、ローカルのタスク記録が保持期間を超えたことを説明してください。クラウド側ではデプロイがまだ進行中の可能性があるため、失敗として扱うのではなく、getFunctionDetail を呼び出して実際のクラウド側のステータスを確認してください。
最小チェックリスト
  • デプロイまたはランタイムの変更を行う前に、Cloud Functions Execution Checklistをお読みください。
  • 対象がイベント関数、HTTP 関数、または実際には CloudRun のいずれなのかを判断してください。
  • 静的コンテンツと動的コンテンツを分けてください:メディア、ユーザーのアップロード、頻繁に更新されるアセットは、関数パッケージではなくクラウドストレージに配置します。
  • 実装コードを書く前に、references.mdから詳細なリファレンスファイルを選んでください。

ポーリングを伴う MCP イメージのデプロイ

実際の cloud または local カスタムイメージのデプロイでは、次を優先してください。

{
  "action": "deployFunction",
  "dryRun": false,
  "confirm": true,
  "wait": false,
  "deployConfig": {}
}

wait フィールドは、現在の MCP ツール呼び出しでデプロイが完了するまで待機するかどうかを制御します。

  • wait=true:マネージャーのデプロイが最終結果に到達するまで待機し、その結果を返します。
  • wait=false:デプロイが MCP のバックグラウンドで続行される間に、taskIdを速やかに返します。

wait=falseでtaskIdが返された場合、デプロイのワークフローは完了していません。action="getFunctionDeployStatus"とそのtaskIdを指定して、自動的にqueryFunctionsを呼び出してください。ステータスがrunningの間は呼び出しを続け、succeededまたはfailedになった時点でのみ終了してください。最初の追加クエリの前に約5秒待ち、返された進捗状況とnextActionsに従って、過度な頻度でポーリングせずに続行してください。ユーザーに再度尋ねるよう伝えたり、最終ステータスが返される前に成功を示唆したりしないでください。expiredステータスは、タスクが最大保持期間を超過し、ローカルで強制終了されたことを意味します。クラウドでのデプロイはまだ進行中の可能性があるため、失敗と報告するのではなく、getFunctionDetailで実際の状態を確認してください。

妥当なポーリング回数の上限に達した場合は、タスクがまだ実行中であることのみを報告し、taskId、現在のステータス、現在のステージ、最新の進捗状況を含めてください。最終結果が得られた場合は、デプロイ戦略、アクション、イメージ URI/ダイジェスト、ビルド ID、関数のステータス、Gateway URL、または失敗したステージ、エラーコード、リクエスト ID、診断の次の手順を報告してください。

Personal-tier TCR 認証情報 — パスワードをツールの引数に入れないでください

Personal-tier のイメージビルド(imageConfig.imageType="personal"とlocal/cloudの組み合わせ)には、TCR へのプッシュ用認証情報が必要です。ツールの引数ではなく、MCP プロセスの環境から読み取ってください。

  • MCP サーバーのenvブロックにTCB_TCR_USERNAMEとTCB_TCR_PASSWORDが設定されている場合は、func.imageConfig.build.registryCredentialをリクエストに含めないでください。TENCENTCLOUD_SECRETIDと同様に、MCP が自動的に補完します。
  • パスワードをチャットに貼り付けるようユーザーに求めないでください。また、ツールの引数に書き込まないでください。 引数に入れた情報はすべて、モデルのコンテキストとツール呼び出し履歴に含まれます。
  • デプロイがCLOUD_REGISTRY_CREDENTIAL_MISSINGまたはCLOUD_REGISTRY_CREDENTIAL_INVALIDで失敗した場合は、ユーザーにMCP設定のenvブロックへこの2つの変数を追加し、MCPサーバーを再起動するよう案内してください。認証情報をインラインで渡して回避してはいけません。
  • ユーザー名はTencent CloudアカウントのUINであり、それ自体は秘密情報ではありません。必要であれば明示的に渡せます。フィールドごとに明示的な引数が優先されるため、ユーザー名を引数で渡し、パスワードを環境から取得する組み合わせも有効です。

その環境経路を利用できない場合を把握してください。 これは、クライアント設定でカスタムenvブロックを公開するローカルのstdio MCPサーバーでのみ機能します。一部のGUIクライアントはシェルのエクスポートを継承せず、IDEに組み込まれたMCPサーバーでは通常、ハードコードされた許可リスト(多くの場合はTENCENTCLOUD_*のみ)から認証情報が挿入されるため、ユーザーが任意の変数を設定できない場合があります。こうしたユーザーに「MCPのenvブロックに設定してください」と伝えても、実行できない指示になります。エンタープライズレジストリ(固定パスワードの代わりに有効期間の短いTCRトークンを発行するimageType="enterprise")を案内するか、すでにプッシュ済みのイメージを指定してbuildStrategy="image"を使用してください。

エンタープライズティアのビルドには、CAM 権限を持つログイン状態が必要です

cloud / local のビルドでエンタープライズレジストリを使用する場合、CAM 経由で TCR トークンが発行されます(autoGrant も同様です)。環境レベルの API Key と OAuth で発行された STS 認証情報には CAM ポリシーが付与されていないため、これらの呼び出しは UnauthorizedOperation で失敗します。MCP は実際のエンタープライズビルドを開始する前にログイン状態を確認し、途中で失敗するのではなく、事前に拒否します。このエラーは再試行可能な障害ではなく、ルーティングの判断材料として扱ってください。

  • アカウントレベルの TENCENTCLOUD_SECRETID / TENCENTCLOUD_SECRETKEY ペアでサインインする、または
  • buildStrategy="image" に切り替え、別の場所でプッシュしたイメージをデプロイする、または
  • パーソナルティアのレジストリを使用する — 静的パスワードは CAM に触れずにそのまま docker login に渡されるため、API Key ユーザーが利用できる唯一のビルド方法です。

作成モードの概要

  • リクエストが SDK 呼び出し、タイマー、またはイベント駆動型ワークフローの場合は、exports.main = async (event, context) => {} を使った イベント関数を作成します。
  • リクエストが REST API、ブラウザー向けエンドポイント、SSE、または WebSocket の場合は、ポート 9000 で req / res を使う HTTP 関数を作成します。
  • Node.js の HTTP 関数では、ユーザーが Express、Koa、NestJS、または別のフレームワークを明示的に指定しない限り、ネイティブの http モジュールをデフォルトで使用します。
  • HTTP 関数でカスタムシステムライブラリや任意のランタイムが必要でも、SCF のリクエスト駆動型でスケール・トゥ・ゼロの構成を維持したい場合は、TCR イメージから カスタムイメージ HTTP 関数(Runtime: CustomImage)としてデプロイします。コンテナは固定ポート 9000 で引き続きリッスンします。./references/http-functions-custom-image.md を参照してください。これは、注入された PORT でリッスンし、長時間稼働する CloudRun コンテナとは異なります。
  • Dockerfile がある HTTP ステートレスサービスでは、クラウドホスティングではなく HTTP クラウド関数を優先して検討できます — Dockerfile があるだけでは CloudRun を使う理由にはなりません。サービスがステートレスで、長時間接続/カスタムランタイム/VPC データベースアクセスを必要としないリクエスト駆動型 HTTP サービスであれば、HTTP 関数(またはカスタムイメージ HTTP 関数)を優先してください。デプロイが速く、費用も安く、CloudRun 環境の初期化も不要です。WebSocket/SSE の長時間接続、安定した独立プロセス、カスタムシステム依存関係、または VPC DB アクセスが必要な場合にのみ、CloudRun(../cloudrun-development/SKILL.md)を選択してください。
  • 既存のイベント関数への HTTP アクセスについてユーザーから言及があった場合は、イベント関数のコード構成を維持し、ゲートウェイアクセスを別途追加します。

HTTP Function の作成ルール

関数コード自体を記述する際は、次のルールに従ってください。

  • HTTP Function を exports.main(event, context) として記述しないでください。これは Event Function のコントラクトです。
  • 関数は、ポート 9000 でリッスンする必要がある標準的な Web サーバープロセスとして扱ってください。
  • Node.js では、ランタイムのコントラクトを明確に保つため、デフォルトで http.createServer((req, res) => { ... }) を使用してください。
  • Node.js のネイティブ http モジュールでは、Express のようなヘルパーが存在すると想定しないでください。req.body、req.query、req.params は自動的に提供されません。
  • Node.js の HTTP Functions では、最初にモジュールシステムを一つ選び、一貫して使用してください。特に理由がなければ、シンプルな関数では CommonJS(require(...) を使用し、package.json に "type": "module" を指定しない)をデフォルトにしてください。
  • ES Modules("type": "module" と import ...)を選ぶ場合は、require(...)、module.exports、単独の __dirname など、CommonJS 専用のグローバルや API を混在させないでください。ESM では、必要な場合に限り、import.meta.url から fileURLToPath(...) を使ってファイルパスを取得してください。
  • ネイティブの http モジュールでは、new URL(...) を使って req.url を自分で解析し、ストリームからリクエスト本文を収集してから JSON.parse を呼び出してください。本文が空の場合は、常に JSON が存在すると想定せず、明示的に処理してください。
  • JSON API では application/json; charset=utf-8 などの Content-Type を含め、res.writeHead(...) と res.end(...) でレスポンスを明示的に返してください。
  • CORS ヘッダーを処理してください。ただし、まず誰が CORS を処理するか確認してください。 HTTP ゲートウェイ経由で呼び出される関数は、Access-Control-Allow-Origin を設定してはいけません。ゲートウェイは環境のセキュリティドメイン許可リストからすでにこの値を設定しており、値が二重になると <origin>,* となり、ブラウザーに拒否されます。その結果、すべてのリクエストが、サービスが停止しているように見える CORS エラーで失敗します。CORS ヘッダーを設定するのは、ゲートウェイを介さず関数が直接呼び出される場合に限ってください。
    • OPTIONS プリフライトには、空の 204 で応答してください。
    • Access-Control-Allow-Origin は、ゲートウェイを介さない直接の呼び出し元に限って含めてください。
    • 必要に応じて Access-Control-Allow-Methods: GET, POST, OPTIONS を含めてください。
    • JSON リクエストには Access-Control-Allow-Headers: Content-Type を含めてください。
  • ルーティングとメソッドの処理を明示してください。不明なパスには 404 を返し、既知のパスで未対応のメソッドが使われた場合は、通常 405 を返してください。
  • ゲートウェイの設定とセキュリティルールの変更は、ランタイムコードとは分けてください。これらはアクセスに影響しますが、HTTP Function のプログラミングモデルには影響しません。
  • 作業が HTTP Function 自体の作成だけである場合は、HTTP アクセスサービスの設定を追加しないでください。ゲートウェイのパスやカスタムドメインは、アクセス層に関する別の作業です。公開呼び出しの要件は、関数のセキュリティルールのワークフローで対応してください(注:匿名ログインはデフォルトで無効です)。
  • HTTP Function から @cloudbase/node-sdk または @cloudbase/manager-node を介して CloudBase を呼び出す場合は、デプロイ前に ./references/http-function-credentials.md に記載された明示的な認証情報の確認手順を完了してください。関数パッケージに認証情報をハードコードしないでください。
  • 機密性の高いランタイムデータを絶対にそのまま返さないでください。 レスポンスで req.headers、process.env、x-cloudbase-context を返さないでください。デバッグ用エンドポイントでは、機密性のない値を明示的に許可リストで指定してください。../cloudbase-platform/references/protocols/sensitive-runtime-data-protection.md を参照してください。

クイック判断表

質問選択
SDK 呼び出しやタイマーによってトリガーされますか?イベント関数
ブラウザーからアクセスできる HTTP エンドポイントが必要ですか?HTTP 関数
SSE または WebSocket サービスが必要ですか?HTTP 関数
カスタムシステムライブラリや任意のランタイムが必要であり、SCF のリクエスト駆動型+ゼロスケールを維持しますか?Runtime: CustomImage を指定した HTTP 関数(TCR イメージからデプロイ)
Dockerfile はありますが、ステートレスな HTTP サービス(長時間接続/カスタムランタイム/VPC DB は不要)ですか?HTTP 関数(またはカスタムイメージの HTTP 関数)— CloudRun ではありません
長時間稼働するコンテナランタイムまたはカスタムシステム環境が必要ですか?CloudRun
既存のイベント関数への HTTP アクセスだけが必要ですか?イベント関数+ゲートウェイアクセス

このスキルの使い方(コーディングエージェント向け)

  1. まず適切なランタイムモデルを選択します

    • イベント関数 -> exports.main(event, context)
    • HTTP 関数 -> ポート 9000 で Web サーバーを起動
    • 要件が実際にはコンテナサービスの場合は、早い段階で CloudRun に切り替えます
  2. 統合された MCP の入口を使用します

    • 読み取り -> queryFunctions、queryGateway
    • 書き込み -> manageFunctions、manageGateway
    • 旧名称をそのままコピーせず、操作する前に新しい名称に置き換えます
  3. コードを書いてデプロイし、ローカルファイルだけで終わらせないでください

    • 作成には manageFunctions(action="createFunction") を使用します
    • コードの更新には manageFunctions(action="updateFunctionCode") を使用します
    • 設定の更新(timeout、memorySize、envVariables)には manageFunctions(action="updateFunctionConfig") を使用します
    • カスタムイメージの HTTP 関数の場合は、func.runtime="CustomImage" と imageConfig(タグ付きの imageUri、エンタープライズ TCR の場合は registryId)を指定して manageFunctions(action="createFunction") を呼び出します。その後の更新では manageFunctions(action="updateFunctionCode") と imageConfig を使用します。コードはイメージ内にあるため、functionRootPath は不要です。./references/http-functions-custom-image.md を参照してください。
    • functionRootPath には、関数フォルダーを直接含むディレクトリ(例:cloudfunctions/ または functions/)を指定します。プロジェクトルートや関数サブディレクトリ自体は指定しないでください
    • 利用可能な場合は MCP を優先してください — このセッションでこれらのツールが利用できる場合は、manageFunctions と queryFunctions を使用します
    • MCP がない場合は CLI にフォールバックします — 関数ツールが読み込まれていない場合(初回セッション/再起動前)は、次回に備えて MCP を設定してから、../cloudbase-cli/SKILL.md の tcb fn deploy を使用します(ガイドライン tooling-fallback.md を参照)。再起動を待って処理を止めないでください
    • ランタイムにシェルがない場合、CLI を作り出さないでください — MCP のみがあり、正常に動作する場合は MCP を使い続けます。どちらも動作しない場合は、その不足を報告します
    • 複数の関数を一括更新する場合は、関数ごとに個別に manageFunctions(action="updateFunctionConfig") を呼び出します — MCP には CLI のような --all 一括処理パラメーターはありません
    • HTTP 関数が @cloudbase/node-sdk を使用する場合は、manageAppAuth(action="createApiKey", keyType="api_key") で作成したサーバー API Key を優先し、CLOUDBASE_APIKEY として注入します。Tencent Cloud の SecretId/SecretKey もサポートされています
    • HTTP 関数が @cloudbase/manager-node を使用する場合は、Tencent Cloud の SecretId/SecretKey を注入します。CloudBase API Key で Manager SDK を初期化できると説明しないでください
    • 認証情報の環境変数は、関数の環境変数全体を置き換えるのではなく、既存の関数設定にマージします
  4. ドキュメントを優先してフォールバックします

    • タスクで callCloudApi にフォールバックする場合は、まずそのアクションに関する公式ドキュメントまたはナレッジベースの項目を確認します
    • 呼び出す前に、正確なアクション名とパラメーターの仕様を確認します
    • 記憶を頼りにクラウド API の生のペイロードを推測しないでください
  5. 適切な詳細リファレンスを確認します

    • イベント関数の詳細 -> ./references/event-functions.md
    • HTTP 関数の詳細 -> ./references/http-functions.md
    • HTTP 関数の CloudBase SDK 認証情報 -> ./references/http-function-credentials.md
    • コンテナイメージから作成する HTTP 関数(Runtime: CustomImage、TCR イメージパイプライン) -> ./references/http-functions-custom-image.md
    • ログ、ゲートウェイ、環境変数、レイヤー({layerName}_{当前envId})、旧名称のマッピング -> ./references/operations-and-config.md

データベースへの書き込みに関する注意

  • 関数が CloudBase ドキュメントデータベースに書き込む場合は、コンソールまたは管理ツールを使って、対象のコレクションを先に作成します。
  • db.collection("feedback").add(...) は既存のコレクションにのみデータを挿入します。コレクションが存在しない場合に feedback を自動作成することはありません。
  • 要件に「存在しない場合は作成する」とある場合は、ランタイムの書き込み呼び出しで作成されると想定せず、最初の書き込み前に明示的なコレクション管理の手順を実装します。

関数タイプの比較

機能イベント関数HTTP 関数
主なトリガーSDK 呼び出し、タイマー、イベントHTTP リクエスト
エントリーポイントの形式exports.main(event, context)req / res を使うウェブサーバー
ポートポート不要9000 でリッスンする必要があります
scf_bootstrap不要必須
依存関係package.json から自動インストールされます関数コードに含める必要があります
最適な用途サーバーレスハンドラー、スケジュール済みジョブAPI、SSE、WebSocket、ブラウザー向けサービス

最小限のコードスケルトン

イベント関数の Hello World

cloudfunctions/hello-event/index.js

exports.main = async (event, context) => {
  // Do not return event/context/process.env — they may contain platform secrets.
  const name = typeof event?.name === "string" ? event.name : "world";
  return {
    ok: true,
    message: `hello ${name} from event function`,
  };
};

cloudfunctions/hello-event/package.json

{
  "name": "hello-event",
  "version": "1.0.0"
}
HTTP 関数の Hello World

cloudfunctions/hello-http/index.js

const http = require("http");
const { URL } = require("url");

// CORS: leave this empty when the function is reached through the HTTP gateway.
// The gateway already fills Access-Control-Allow-Origin from the environment
// security-domain allowlist; adding a second value makes the header illegal
// ('<origin>,*') and browsers block every request. Only set CORS headers here
// when the function is called directly, outside the gateway.
const CORS_HEADERS = {};

function sendJson(res, statusCode, data) {
  res.writeHead(statusCode, {
    "Content-Type": "application/json; charset=utf-8",
    ...CORS_HEADERS,
  });
  res.end(JSON.stringify(data));
}

function sendOptions(res) {
  res.writeHead(204, CORS_HEADERS);
  res.end();
}

function readJsonBody(req) {
  return new Promise((resolve, reject) => {
    let raw = "";
    req.on("data", (chunk) => { raw += chunk; });
    req.on("end", () => {
      if (!raw) { resolve({}); return; }
      try { resolve(JSON.parse(raw)); } catch (e) { resolve({}); }
    });
    req.on("error", reject);
  });
}

const server = http.createServer(async (req, res) => {
  // Handle CORS preflight
  if (req.method === "OPTIONS") {
    return sendOptions(res);
  }

  const url = new URL(req.url || "/", "http://127.0.0.1");

  if (req.method === "GET" && url.pathname === "/") {
    sendJson(res, 200, { ok: true, message: "hello from http function" });
  } else if (req.method === "POST" && url.pathname === "/") {
    const body = await readJsonBody(req);
    sendJson(res, 200, { received: body });
  } else {
    sendJson(res, 404, { error: "Not Found" });
  }
});

server.listen(9000);

ルーティング、メソッドのチェック、エラー処理を含む、より完全な例については、./references/http-functions.md を参照してください。

cloudfunctions/hello-http/scf_bootstrap

#!/bin/bash
/var/lang/node18/bin/node index.js

scf_bootstrap のバイナリパスはランタイムに合わせる必要があります。対応表の全体については、./references/http-functions.md を参照してください。

cloudfunctions/hello-http/package.json

{
  "name": "hello-http",
  "version": "1.0.0"
}

推奨ツールマップ

関数の管理
  • queryFunctions(action="listFunctions"|"getFunctionDetail")
  • manageFunctions(action="createFunction")
  • manageFunctions(action="updateFunctionCode")
  • manageFunctions(action="updateFunctionConfig")
レイヤー(SCF Layer)

レイヤーは環境単位ではなく、アカウント単位です。MCP の manageFunctions / queryFunctions によるレイヤーのガイダンスに従ってください。

  • 命名(新しいレイヤーでは必須): {layerName}_{当前envId} — 例:common_cloud1-d9ghadgak3edf6b36。別の環境で common のような環境 ID のない名前を再利用しないでください。
  • 作成: queryFunctions(action="listLayers") で重複を確認してから、manageFunctions(action="createLayerVersion", layerName="…_{envId}", …) を実行します。名前に現在の envId が含まれていない場合、MCP はソフトな warnings エントリーを返すことがありますが、名前は書き換えません。
  • 参照: queryFunctions(action="listLayers"|"listLayerVersions"|"getLayerVersionDetail"|"listFunctionLayers") — リストの結果はアカウント単位のビューであり、別の環境で作成されたレイヤーが含まれる場合があります。
  • バインド/解除/置き換え: manageFunctions(action="attachLayer"|"detachLayer"|"updateFunctionLayers")
  • バージョンの削除: manageFunctions(action="deleteLayerVersion") — バージョンを削除すると、そのバージョンをバインドしているすべての環境に影響する場合があります。
  • 詳細な仕様と警告の意味 → ./references/operations-and-config.md
ログ

クエリ関数のログ — queryFunctions ツールを使用します。

  • queryFunctions(action="listFunctionLogs", functionName="xxx") — 特定の関数の実行ログを一覧表示します
  • queryFunctions(action="getFunctionLogDetail", requestId="xxx") — 1 件のログエントリの詳細を取得します

queryFunctions と queryLogs の違い:

  • queryFunctions は単一のクラウド関数の実行ログをクエリし、functionName が必要です
  • queryLogs は CLS(クロスサービスログ集約)を CLS クエリ構文で検索します

例:

// List recent logs for cloud function "my-function"
queryFunctions(action="listFunctionLogs", functionName="my-function", limit=10)

// Inspect the log detail for a specific request id
queryFunctions(action="getFunctionLogDetail", requestId="abc-123")

// Cross-service error search via CLS
queryLogs(action="searchLogs", queryString='(src:app OR src:system) AND log:"ERROR"', service="tcb")

queryLogs の queryString は CLS 構文に従います(https://cloud.tencent.com/document/api/876/128127 を参照)。以下の例は出発点です。クエリ対象の具体的なログ内容に合わせて調整してください。

  • 関数ログ:(src:app OR src:system) AND log:"START RequestId"
  • 関数リクエストステータスの集約:| select request_id, max(status_code) as status where ((request_id='xxxx' AND retry_num=0) AND retry_num=0) AND status_code!=202 group by request_id, retry_num
  • ドキュメントデータベース(NoSQL):module:database
  • ドキュメントデータベースのスロークエリーイベント:module:database AND eventType:(MongoSlowQuery) — MongoSlowQuery はドキュメントデータベースのスロークエリーイベントです
  • リレーショナルデータベース(MySQL):module:rdb
  • リレーショナルデータベース(MySQL)のイベント:module:rdb AND eventType:(MysqlFreeze OR MysqlRecover OR MysqlSlowQuery) — MysqlFreeze = フリーズ、MysqlRecover = 復旧、MysqlSlowQuery = スロークエリー
  • ワークフロー(承認フロー):module:workflow
  • データモデル:module:model
  • ユーザー権限:module:auth
  • LLM トレースログ:module:llm AND logType:llm-tracelog
  • ゲートウェイアクセスログ:logType:accesslog
  • アプリの公開/削除イベント:module:app AND eventType:(AppProdPub OR AppProdDel) — AppProdPub = アプリの公開、AppProdDel = アプリの削除

これらを利用できない場合は、callCloudApi によるフォールバックを行う前に ./references/operations-and-config.md を読んでください

ゲートウェイの公開
  • queryGateway(action="getRoute") / listRoutes / listCustomDomains
  • manageGateway(action="createRoute") — HTTP 関数には upstreamResourceType="WEB_SCF" を、Event 関数には upstreamResourceType="SCF" を渡します。domain を省略すると、HTTP ゲートウェイの IsDefault ドメイン(通常は *.{region}.app.tcloudbase.com)にルートが追加されます(DomainType=HTTPSERVICE)
  • IsDefault と静的ホスティング CDN の違い: 環境には、別の IsDefault STATIC_STORE ドメイン(*.tcloudbaseapp.com)も公開されていることがよくあります。domain を省略しても、その静的ホスティング CDN エントリには紐付けられず、STATIC_STORE アップストリームの紐付けでもありません(これには upstreamResourceType="STATIC_STORE" が必要です)。queryGateway(action="listRoutes") で確認し、Domain / DomainType / Path / UpstreamResourceType をチェックしてください
  • manageGateway(action="updateRoute") / deleteRoute / enableRoute / disableRoute / bindCustomDomain / deleteCustomDomain
  • ルートまたは静的ホスティングのデフォルトドメインを無効にする場合: manageGateway(action="disableRoute", domain=..., path=...) を優先してください(既存のルートを検索し、ModifyHTTPServiceRoute を介して Routes[].Enable=false を設定します)。updateRoute で enable=false / route.enable=false を渡すこともできます。*.tcloudbaseapp.com を閉じるには、ルートを一覧表示し、STATIC_STORE の IsDefault ドメインを取得してから、その domain と通常は path="/" を指定して disableRoute を実行してください。manageHosting や ModifyGatewayRoute は使用しないでください
  • ツールの結果に accessUrl / accessUrls が含まれる場合は、それらを直接優先して使用してください(ゲートウェイのカスタムドメイン URL はデフォルトドメインより優先されます)
  • 非推奨の GWAPI アクション(CreateCloudBaseGWAPI など)を callCloudApi 経由で呼び出さないでください

関連スキル

  • cloudrun-development -> コンテナサービス、長時間稼働するランタイム、エージェントのホスティング
  • http-api-cloudbase -> CloudBase HTTP API の直接呼び出しパターン
  • cloudbase-platform -> CloudBase プラットフォーム全般の選択
  • ops-inspector -> AIOps 形式のサービス横断的な調査とログ検索

リファレンス一覧

スキルの到達性チェックに必要な、パッケージに含まれるすべてのリファレンスファイル:

コメント