すべてのプロダクト
Search
ドキュメントセンター

Function Compute:公式パブリックレイヤーの使用例

最終更新日:Aug 28, 2024

一部の一般的なシナリオでは、Function Computeが提供する公式のパブリックレイヤーを使用して、コードパッケージのサイズを縮小できます。 カスタムレイヤーと比較して、Function Computeの公式パブリックレイヤーは使いやすくなっています。 標準ランタイムと共通依存関係パッケージは、さまざまなプログラミング言語に対して事前設定されます。 基になる環境の設定について心配する必要はありません。 該当するパブリックレイヤーを直接選択して、関数にバインドすることができます。 このトピックでは、公式パブリックレイヤの使用例を示します。

使用上の注意

の最新バージョンと公式の一般的なレイヤーの使用方法については、「awesome-layers」をご参照ください。

例1: Node.js 16とPuppeteerに基づいてwebページのスクリーンショットをキャプチャする

Puppeteerは、Chrome (またはChromium) を制御して、webページのスクリーンショットキャプチャ、PDF生成、自動フォーム送信、自動UIテスト、キーボード入力シミュレーションなど、さまざまな自動プロセスを実装できます。 基本的に、PuppeteerはNode.jsに基づくヘッドレスChromeブラウザを実装しています。

この例では、Puppeteerを使用して、webページのスクリーンショットをキャプチャするサンプルプログラムを実装します。

  1. イベント関数を作成します。

    [関数の作成] ページで、次のパラメーターを設定し、他のパラメーターにはデフォルト値を使用します。 詳細については、「イベント関数の作成」をご参照ください。

    • 関数タイプとして [イベント関数] を選択します。

    • ランタイム: ドロップダウンリストから [Node.js 16] を選択します。

    • メモリ容量を1024 MBに設定します。

  2. 関数コードを編集します。 関数の詳細ページで、[コード] タブをクリックし、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);
      }
    };

    説明:

    1. クエリパラメーターを解析して、スナップショットのURLを取得します。 解析が失敗すると、Serverless Devsホームページが自動的に使用されます。

    2. Puppeteerを使用して、webページのスクリーンショットを撮ります。 スクリーンショットを実行中のインスタンスの /tmp/exampleフォルダーに保存し、HTTPリクエストの戻り本文としてパスを返します。

  3. 関数のPuppeteer publicレイヤーを設定します。

    詳細については、「Function Computeコンソールでの共通レイヤーの設定」をご参照ください。 Puppeteer17x公式パブリックレイヤーを選択します。

    image

  4. HTTPトリガーを作成します。 トリガーの [設定] 列で、[パブリックエンドポイント] の値を表示およびコピーします。 次に、エンドポイントをブラウザに貼り付けてテストを実行します。

    HTTPトリガーの作成方法の詳細については、「トリガーの作成」をご参照ください。

    image

    テスト後、Serverless Devs webページのスクリーンショット (PNG形式) がキャプチャされ、オンプレミスマシンに自動的にダウンロードされます。

例2: 実装a. パブリックレイヤに基づくNET 6カスタムランタイム

  1. web関数を作成します。

    [関数の作成] ページで、次の図に示すようにパラメーターを設定します。 他のパラメーターのデフォルト値を保持します。 詳細については、「web関数の作成」をご参照ください。

    image

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

    • ①: この関数は0.0.0.0 9000ポートをリッスンします。 カスタムランタイムによって開始されるサービスは、0.0.0.0:CAPortまたは *:CAPortでリッスンする必要がありますが、127.0.0.1またはlocalhostではリッスンできません。 詳細については、「原則」をご参照ください。

    • ②: ルート /を追加し、「Hello World! 」文字列.

    • ③: イベントハンドラーのパスを使用する /invokeルートを追加します。 詳細については、「Web関数」をご参照ください。

    • ④: 関数のInitializerフックに対応するパスである /initializeルートを追加します。 Initializerフックは、サンプルプログラムの初期化中に1回実行されます。 詳細については、「関数インスタンスのライフサイクルフック」をご参照ください。

  2. 関数をテストします。

    1. トリガーの [設定] 列で、[パブリックエンドポイント] の値を表示およびコピーします。 次に、エンドポイントをブラウザに貼り付けてテストを実行します。 この場合、パス情報は付加されない。

      image

      実行が完了すると、添付ファイルは自動的にオンプレミスマシンにダウンロードされます

    2. curlを使用して、前の手順で取得したパブリックエンドポイントに /invokeまたは /initializeパスを追加します。 ルーティング方法はPOSTです。 curl -XPOSTコマンドを実行してテストを実行できます。

      実行結果を次の図に示します。

      image