AWS Lambda で、Headless browser ヘッドレスブラウザ Chromeなど動かすにはどうしたらいい?=>puppeteer !

AWS LambdaでヘッドレスブラウザをNode.jsで実行するためには、Puppeteerというライブラリを使用することが一般的です。PuppeteerはChromeブラウザを制御し、Webページのスクリーンショットを取得したり、ページの操作を自動化したりするための便利なツールです。以下は、PuppeteerをLambdaで使用する手順です:

  1. プロジェクトのセットアップ: ローカルでPuppeteerをインストールし、依存関係をパッケージとしてデプロイするためのAWS Lambda関数をセットアップします。以下のコマンドを使用して、Puppeteerと関連するライブラリをインストールします。
npm install puppeteer-core chrome-aws-lambda

 

chrome-aws-lambda パッケージは、AWS LambdaでヘッドレスChromeを実行するためのものです。

 

Lambda関数のコード作成: Lambda関数のコードを作成し、Puppeteerを使用して必要な操作を行います。以下は、簡単な例です:

 

const chromium = require('chrome-aws-lambda');
const puppeteer = require('puppeteer-core');

exports.handler = async (event) => {
  let browser = null;
  try {
    // Puppeteerの起動
    browser = await puppeteer.launch({
      args: chromium.args,
      executablePath: await chromium.executablePath,
      headless: chromium.headless,
    });

    const page = await browser.newPage();

    // ここでページの操作を行う

    const content = await page.content();

    return {
      statusCode: 200,
      body: JSON.stringify(content),
    };
  } catch (error) {
    console.error('Error:', error);
    return {
      statusCode: 500,
      body: JSON.stringify('An error occurred.'),
    };
  } finally {
    if (browser !== null) {
      await browser.close();
    }
  }
};

 

 

3. Lambda関数のデプロイ: 作成したLambda関数のコードをAWS Lambdaにデプロイします。また、適切なIAMロールを設定して、Lambda関数が必要な権限を持つようにします。

4. Lambda関数のトリガー設定: Lambda関数をトリガーする方法を設定します。例えば、API Gatewayを使用してHTTPリクエストに応答するように設定することができます。

  1.  

これにより、AWS Lambda上でPuppeteerを使用してヘッドレスブラウザを実行し、Webページの操作を行うLambda関数を作成できます。必要に応じて、Puppeteerを使用してスクリーンショットを取得したり、データをスクレイピングしたりすることができます。

 

node.jsで、「export const handler = async (event) => {…」「exports.handler = async (event) => {…」 これらは、書き方同じ?

「export const handler = async (event) => {」と
「exports.handler = async (event) => {」は、

基本的な構文の違いがあります。Node.jsにおいて、モジュールのエクスポート方法に関連しています。

  1. export const handler = async (event) => {
    これはECMAScriptモジュール(ESM)のエクスポート構文です。ESMはNode.js 14以降でサポートされています。この形式を使用すると、モジュールのエクスポートとインポートにimportおよびexportキーワードを使用できます。
    (新しい方)
  2. exports.handler = async (event) => {
    これはCommonJSモジュールのエクスポート構文です。Node.jsの古いバージョンから使用されており、多くの既存のNode.jsコードで見られます。exportsオブジェクトを使用して、モジュールのエクスポートを行います。
    (古い方)

一般的に、新しいプロジェクトやNode.jsバージョン14以降を使用する場合、ESM構文(exportキーワード)(1の方)を使用することが推奨されています。ただし、既存のコードベースやCommonJSモジュールを使用する必要がある場合は、exports(古い方)を使用することもできます。

選択肢はどちらも正しい構文であり、どちらを選ぶかはプロジェクトの要件とNode.jsバージョンに依存します。ただし、新しいプロジェクトではESMを使用することが一般的になっています。

 
 
 
 

node.js  コマンドライン 引数の取得方法

node.jsで、コマンドで、 node test1.js aaa bbb 動かす場合、コマンドラインの引数 aaa bbb を取得する方法教えて

node.jsでコマンドライン引数を取得するには、グローバルオブジェクトのprocess.argvプロパティを利用します。

 

例えば以下のようなtest1.jsファイルがあるとします。

// test1.js

console.log(process.argv);

これをnode test1.js aaa bbbという風にパラメータ付きで実行した場合、次のような出力になります。

[
  'node',
  '/path/to/test1.js', 
  'aaa',
  'bbb'   
]

処理の内容としては、

  • process.argv[0]: nodeコマンド自身
  • process.argv[1]: 実行されたjsファイルパス
  • process.argv[2]以降: コマンドライン引数

という順に格納される配列が取得できます。

なのでコマンドライン引数はインデックス2から参照可能で、このaaaとbbbがパラメータとして渡されていることが分かります。

このprocess.argvを利用することで、node.jsのスクリプトに対して動的に引数を渡しつつ実行することができます。