API
Cloud Runの呼び出し
概要
このブロックは、Cloud Run functionsやCloud Runをはじめとする各種HTTPベースのサービスやAPIを、指定したHTTPメソッドを使用してHTTPリクエストによって呼び出します。
このブロックは、Cloud Functionsだけでなく、Cloud Runにホストされたサービスやその他のHTTPエンドポイントにも対応しています。対応するHTTPメソッドは以下のとおりです。
- GET
- POST
- PUT
- DELETE
- OPTIONS
このブロックで呼び出すCloud Run functionsは、HTTPトリガータイプとしてデプロイされている必要があります。このデプロイ方法については、Googleのドキュメント「HTTPトリガー」を参照してください。
このブロックでは、認証あり・認証なしのどちらにも対応しています。認証ありの場合は、認証をパスできるGCPサービスアカウントを準備してください。具体的には、Cloud Run functionsやCloud Runなどのサービスに対して、適切な権限(例:Cloud Functions 起動元やCloud Run 起動元など)を持つサービスアカウントを使用して認証を実施します。
実行時間の制限
- Cloud Run functions: 最大9分に延長された関数を実行可能
- Cloud Run: 最大60分に延長されたサービスを実行可能
エラーハンドリング
HTTPレスポンス時のステータスコードが、400番台および500番台の場合、ブロックの実行は失敗とみなされます。
注意
Google CloudのプロジェクトIDにコロン(:)が含まれている場合、当該プロジェクトの関数やサービスは呼び出せません。
プロパティ
| プロパティ名 | 説明 | ||||||
|---|---|---|---|---|---|---|---|
| ブロック名 |
ブロックの名前を指定します。この名前はブロックに表示され、フロー内でブロックを識別するために使用されます。わかりやすい名前を設定することで、フローの可読性が向上します |
||||||
| GCPサービスアカウント |
このブロックで使用するGCPサービスアカウントを選択します。 認証ありでサービスや関数を呼び出す場合は、認証をパスできるGCPサービスアカウントを準備し、選択してください。具体的には、Cloud Run functionsやCloud Runなどのサービスに対して、適切な権限(例: |
||||||
| HTTPメソッド |
HTTPメソッドを選択します。選択可能なHTTPメソッドは以下のとおりです。
|
||||||
| URL |
呼び出す関数やサービスのHTTPエンドポイントを指定します。
例:
https://us-central1-MY_PROJECT.cloudfunctions.net/addMessage
HTTPエンドポイントをコピー&ペーストで貼り付ける際は、前後に無駄な空白が付かないように注意してください。前後に空白が含まれると、本ブロックの実行時に以下のエラーが発生します。 URI::InvalidURIError:bad URI(is not URI?) |
||||||
| コンテンツタイプ |
コンテンツタイプ(Content-Type:送信するデータの種類)を以下のいずれかから選択します。
|
||||||
| パラメーター |
関数に送信するデータを指定します。データは、キーとバリューの組合せで指定します。バリューには、変数展開および%形式の文字列書式を使用できます。 |
||||||
| リクエストボディを指定する変数 |
HTTPリクエストのボディを使ってデータを送信したいときに、データが格納された変数を指定します。 このプロパティを設定すると、コンテンツタイププロパティとパラメータープロパティの設定内容は無視されます。この際のコンテンツタイプは、コンテンツタイププロパティの選択内容に関わらず、application/json固定となります。 |
||||||
| ブロックメモ |
ブロックに対するコメントを指定します。フローの管理やメンテナンス時に役立ちます。 |
||||||
| エラー時の繰り返し回数 | エラー時の繰り返し回数を指定します。 | ||||||
| 繰り返し間隔 | エラー時の繰り返し間隔を秒単位で指定します。 | ||||||
| レスポンスを格納する変数 | extractResult | ||||||
| リクエストヘッダー |
関数呼び出し時に追加したいHTTPリクエストのヘッダーをキーとバリューの組合せで指定します。バリューには、変数展開および%形式の文字列書式が記述できます。 |
使用例
この例では、PDFファイルのBase64エンコードデータを含む変数をCloud Runにデプロイされたテキスト抽出サービスに送信し、抽出されたテキストとメタデータを受け取ります。この実践的な例を通して、「リクエストボディを指定する変数」と「レスポンスを格納する変数」の効果的な使い方を見ていきましょう。
前提条件
- 以下のようなPDFテキスト抽出サービスがCloud Runにデプロイされていること
- PDFファイルがGCS上に保存されていること
PDFテキスト抽出サービスの実装例(Node.js)
以下はCloud Runにデプロイできる簡単なPDFテキスト抽出サービスです。
const express = require('express');
const { PDFDocument } = require('pdf-lib');
const app = express();
app.use(express.json({ limit: '50mb' }));
// PDFからテキストを抽出する関数
async function extractTextFromPdf(pdfBase64) {
try {
// Base64データをバイナリに変換
const pdfBuffer = Buffer.from(pdfBase64, 'base64');
// PDFドキュメントの読み込み
const pdfDoc = await PDFDocument.load(pdfBuffer);
// ページ数を取得
const pageCount = pdfDoc.getPageCount();
// PDFのメタデータを取得
const title = pdfDoc.getTitle() || '不明';
const author = pdfDoc.getAuthor() || '不明';
const subject = pdfDoc.getSubject() || '不明';
const keywords = pdfDoc.getKeywords() || '';
const creator = pdfDoc.getCreator() || '不明';
const producer = pdfDoc.getProducer() || '不明';
const creationDate = pdfDoc.getCreationDate()
? pdfDoc.getCreationDate().toISOString()
: '不明';
// ※実際のテキスト抽出はより複雑です。
// 実用的な実装ではpdf.js、pdf-parse、pdfjs-extractなどのライブラリを使用します。
// ここでは簡略化のため、ダミーテキストを返します。
const extractedText = `これはPDFから抽出されたテキストの例です。(実際の実装では、PDFの内容に応じたテキストが抽出されます)`;
return {
success: true,
metadata: {
pageCount,
title,
author,
subject,
keywords,
creator,
producer,
creationDate
},
text: extractedText,
processedAt: new Date().toISOString()
};
} catch (error) {
return {
success: false,
error: error.message
};
}
}
app.post('/extract', async (req, res) => {
const { pdfData } = req.body;
if (!pdfData) {
return res.status(400).json({
success: false,
error: 'PDFデータが提供されていません'
});
}
try {
const result = await extractTextFromPdf(pdfData);
res.json(result);
} catch (error) {
res.status(500).json({
success: false,
error: '処理に失敗しました',
message: error.message
});
}
});
const PORT = process.env.PORT || 8080;
app.listen(PORT, () => {
console.log(`Server running on port ${PORT}`);
});
フロー全体の流れ
今回の例では、以下の順序でブロックを設定し、PDFからテキストを抽出します。
- 「GCSから変数へロード」ブロック:GCSからPDFファイルを読み込みBase64エンコードして変数に格納
- 「変数設定」ブロック:Cloud Run呼び出し用のリクエストボディを準備
- 「Cloud Runの呼び出し」ブロック:PDFテキスト抽出サービスを呼び出し
Step 1: PDFデータの準備
PDFデータを変数に読み込むには、「GCSから変数へロード」ブロックを使用します。このブロックでは、「ファイル形式」プロパティを「バイナリ(Base64)」に設定することで、PDFファイルを適切にBase64エンコードデータとして読み込めます。
「GCSから変数へロード」ブロックの設定例:
| プロパティ名 | 値 |
|---|---|
| ブロック名 | PDFファイルの読み込み |
| 読込データのファイルGCS URL | gs://my-bucket/document.pdf |
| ファイル形式 | バイナリ(Base64) |
| 結果を格納する変数 | pdfData |
この設定により、PDFファイルがBase64エンコードされて「pdfData」変数に格納されます。ただし、このブロックでは以下のような構造の変数が作成されることに注意してください。
{
"gcs_url": "gs://my-bucket/document.pdf",
"timestamp": 1624856789.0,
"content": "JVBERi0xLjUKJYCBgoMKMSAw... (Base64エンコードされたPDFデータ) ..."
}
Step 2: リクエストボディ変数の準備
「変数設定」ブロックを使用して、Cloud Runサービスへのリクエストボディを準備します。このステップでは、PDFのBase64エンコードデータを適切な形式でリクエストボディに含めます。
「変数設定」ブロックの設定例:
| プロパティ名 | 値 |
|---|---|
| ブロック名 | PDFテキスト抽出リクエスト準備 |
| 変数 | pdfRequest |
| データ | { "pdfData": ${pdfData.content} } |
ここで「pdfData.content」と指定している点が重要です。「GCSから変数へロード」ブロックでは、ファイル内容はJSONの「content」フィールドに格納されるため、Base64エンコードされたデータ部分だけを取り出すために「.content」を付ける必要があります。
Step 3: Cloud Runサービスの呼び出し
準備した「pdfRequest」変数を使って、Cloud Runにデプロイされたテキスト抽出サービスを呼び出します。
| プロパティ | 設定値 |
|---|---|
| ブロック名 | PDFテキスト抽出 |
| GCPサービスアカウント | (Cloud Runサービスにアクセス権を持つサービスアカウントを選択) |
| HTTPメソッド | POST |
| URL | https://pdf-extractor-abcd123-uc.a.run.app/extract |
| リクエストボディを指定する変数 | pdfRequest |
| レスポンスを格納する変数 | extractResult |
実行結果例
上記の設定で Cloud Runサービスを呼び出すと、「extractResult」変数には以下のようなJSONが格納されます。PDF文書のメタデータと抽出されたテキストが含まれています。
{
"success": true,
"metadata": {
"pageCount": 3,
"title": "四半期報告書",
"author": "株式会社サンプル",
"subject": "2023年第2四半期業績報告",
"keywords": "業績, 四半期, 財務",
"creator": "Microsoft Word",
"producer": "Adobe PDF Library 15.0",
"creationDate": "2023-07-15T09:30:00.000Z"
},
"text": "これはPDFから抽出されたテキストの例です。(実際の実装では、PDFの内容に応じたテキストが抽出されます)",
"processedAt": "2023-08-01T12:34:56.789Z"
}