一部の一般的なシナリオでは、Function Computeが提供する公式のパブリックレイヤーを使用して、コードパッケージのサイズを縮小できます。 カスタムレイヤーと比較して、Function Computeの公式パブリックレイヤーは使いやすくなっています。 標準ランタイムと共通依存関係パッケージは、さまざまなプログラミング言語に対して事前設定されます。 基になる環境の設定について心配する必要はありません。 該当するパブリックレイヤーを直接選択して、関数にバインドすることができます。 このトピックでは、公式パブリックレイヤの使用例を示します。
使用上の注意
の最新バージョンと公式の一般的なレイヤーの使用方法については、「awesome-layers」をご参照ください。
例1: Node.js 16とPuppeteerに基づいてwebページのスクリーンショットをキャプチャする
Puppeteerは、Chrome (またはChromium) を制御して、webページのスクリーンショットキャプチャ、PDF生成、自動フォーム送信、自動UIテスト、キーボード入力シミュレーションなど、さまざまな自動プロセスを実装できます。 基本的に、PuppeteerはNode.jsに基づくヘッドレスChromeブラウザを実装しています。
この例では、Puppeteerを使用して、webページのスクリーンショットをキャプチャするサンプルプログラムを実装します。
イベント関数を作成します。
[関数の作成] ページで、次のパラメーターを設定し、他のパラメーターにはデフォルト値を使用します。 詳細については、「イベント関数の作成」をご参照ください。
関数タイプとして [イベント関数] を選択します。
ランタイム: ドロップダウンリストから [Node.js 16] を選択します。
メモリ容量を1024 MBに設定します。
関数コードを編集します。 関数の詳細ページで、[コード] タブをクリックし、index.jsファイルの関数コードを編集し、[デプロイ] をクリックします。
次のサンプルコードは例を示しています。
const fs = require('fs'); const puppeteer = require('puppeteer'); function autoScroll(page) { return page.evaluate(() => { return new Promise((resolve, reject) => { var totalHeight = 0; var distance = 100; var timer = setInterval(() => { var scrollHeight = document.body.scrollHeight; window.scrollBy(0, distance); totalHeight += distance; if (totalHeight >= scrollHeight) { clearInterval(timer); resolve(); } }, 100); }) }); } exports.handler = async (event, context, callback) => { console.log('Node version is: ' + process.version); try { const browser = await puppeteer.launch({ headless: true, args: [ '--disable-gpu', '--disable-dev-shm-usage', '--disable-setuid-sandbox', '--no-first-run', '--no-zygote', '--no-sandbox' ] }); let url = 'https://www.serverless-devs.com'; if (event.queryStringParameters && event.queryStringParameters.url) { url = event.queryStringParameters.url; } if (!url.startsWith('https://') && !url.startsWith('http://')) { url = 'http://' + url; } const page = await browser.newPage(); await page.emulateTimezone('Asia/Shanghai'); await page.goto(url, { waitUntil: 'networkidle2' }); await page.setViewport({ width: 1200, height: 800 }); await autoScroll(page); let path = '/tmp/example'; let contentType = 'image/png'; await page.screenshot({ path: path, fullPage: true, type: 'png' }); await browser.close(); const screenshot = fs.readFileSync(path); const response = { statusCode: 200, headers: { 'Content-Type': contentType }, body: screenshot.toString('base64'), isBase64Encoded: true }; callback(null, response); } catch (err) { const errorResponse = { statusCode: 500, headers: { 'Content-Type': 'text/plain' }, body: err.message }; callback(null, errorResponse); } };説明:
クエリパラメーターを解析して、スナップショットのURLを取得します。 解析が失敗すると、Serverless Devsホームページが自動的に使用されます。
Puppeteerを使用して、webページのスクリーンショットを撮ります。 スクリーンショットを実行中のインスタンスの /tmp/exampleフォルダーに保存し、HTTPリクエストの戻り本文としてパスを返します。
関数のPuppeteer publicレイヤーを設定します。
詳細については、「Function Computeコンソールでの共通レイヤーの設定」をご参照ください。 Puppeteer17x公式パブリックレイヤーを選択します。

HTTPトリガーを作成します。 トリガーの [設定] 列で、[パブリックエンドポイント] の値を表示およびコピーします。 次に、エンドポイントをブラウザに貼り付けてテストを実行します。
HTTPトリガーの作成方法の詳細については、「トリガーの作成」をご参照ください。

テスト後、Serverless Devs webページのスクリーンショット (PNG形式) がキャプチャされ、オンプレミスマシンに自動的にダウンロードされます。
例2: 実装a. パブリックレイヤに基づくNET 6カスタムランタイム
web関数を作成します。
[関数の作成] ページで、次の図に示すようにパラメーターを設定します。 他のパラメーターのデフォルト値を保持します。 詳細については、「web関数の作成」をご参照ください。

関数の作成後、WebIDEでProgram.csサンプルコードを表示できます。 説明:

①: この関数は
0.0.0.09000ポートをリッスンします。 カスタムランタイムによって開始されるサービスは、0.0.0.0:CAPortまたは*:CAPortでリッスンする必要がありますが、127.0.0.1またはlocalhostではリッスンできません。 詳細については、「原則」をご参照ください。②: ルート /を追加し、「Hello World! 」
文字列.③: イベントハンドラーのパスを使用する /invokeルートを追加します。 詳細については、「Web関数」をご参照ください。
④: 関数のInitializerフックに対応するパスである /initializeルートを追加します。 Initializerフックは、サンプルプログラムの初期化中に1回実行されます。 詳細については、「関数インスタンスのライフサイクルフック」をご参照ください。
関数をテストします。
トリガーの [設定] 列で、[パブリックエンドポイント] の値を表示およびコピーします。 次に、エンドポイントをブラウザに貼り付けてテストを実行します。 この場合、パス情報は付加されない。

実行が完了すると、添付ファイルは自動的にオンプレミスマシンにダウンロードされます
curlを使用して、前の手順で取得したパブリックエンドポイントに
/invokeまたは/initializeパスを追加します。 ルーティング方法はPOSTです。 curl -XPOSTコマンドを実行してテストを実行できます。実行結果を次の図に示します。
