19

私は AWS Lambda を使用しています。これには、フォルダーを含む node.js スクリプトのアーカイブを作成し、それをnode_modulesインフラストラクチャにアップロードして実行します。

これは、(node-gyp を使用して) ネイティブ バインディングを持つノード モジュールの場合を除いて、正常に機能します。バインディングがコンパイルされ、プロジェクトがローカル コンピューター (OS X) にアーカイブされたため、AWS (Amazon Linux) サーバーとは互換性がありません。

ノード モジュール (具体的にはnode-sqlite3 )をクロスコンパイル/インストールして、別のサーバー アーチにアップロードすると実行されるようにするにはどうすればよいですか?

4

4 に答える 4

9

問題の実際の解決策ではありませんが、非常に簡単な回避策は、Linux マシンでネイティブ アドオンをコンパイルすることです。

あなたの特定の状況では、Vagrantを使用します。Vagrant は仮想マシンを作成し、数秒で構成できます。

  1. Amazon の Linux ディストリビューションに似た OS イメージを見つけます (Fedora、CentOS、その他yumパッケージ マネージャーとして使用するもの - Wikiを参照) 。
  2. マシンの起動時に Vagrant によって実行されると実行される単純な構成スクリプトを使用しますnpm install(オプションで、確実にクリーン インストールする前にnode_modulesフォルダーを削除することもできます)。
  3. さらに快適にするために、スクリプトは展開用の zip ファイルを作成することもできます
  4. インストールが完了すると、スクリプトは VM をシャットダウンして、システム リソースの不必要な消費を回避します。
  5. 配備!

リンクされたライブラリがターゲットマシンの同じ場所にない場合は、調整が必要になる場合がありますが、一般的にはこれが最善かつ最速のソリューションのように思えます。

于 2015-05-25T14:05:25.743 に答える
2

Vagrant を使用してアプリをインストールするだけで十分な場合もありますが、Lambda の Amazon Linux AMI にできるだけ近いLinux でアプリをビルドする必要があることがわかりました。

ここで元の回答を読むことができます: https://stackoverflow.com/a/34019739/303184

それを機能させるための手順:

  1. 新しい EC2 インスタンスを生成します。AWS Lambda ランタイムとまったく同じイメージに基づいていることを確認してください。Lambda 環境の詳細は、http: //docs.aws.amazon.com/lambda/latest/dg/current-supported-versions.htmlで確認できます。私たちの場合、それはamzn-ami-hvm-2015.03.0.x86_64-gp2と呼ばれる Amazon Linux AMI でした。

  2. nvmAWS Lambda と同じバージョンの Node.js をインストールして使用します。これを書いている時点ではv0.10.36 でした。http://docs.aws.amazon.com/lambda/latest/dg/current-supported-versions.htmlをもう一度参照して確認してください。

  3. おそらく、EC2 に git & g++ コンパイラをインストールする必要があります。これを実行できます

    sudo yum install git gcc-c++
  4. 最後に、アプリを新しい EC2 に複製し、アプリの依存関係をインストールします。

    nvm use 0.10.36
    npm install --production
    
  5. その後、などを使用して node_modules を簡単にダウンロードできますscp

于 2015-12-01T11:54:00.790 に答える
1

ロバートの回答と同じ行です。別の OS で MAC を操作しなければならなかったとき、Oracle の無料のバーチャライザー VirtualBoxのような vm ware を使用して、Mac に Linux をインストールしました。費用はかかりません。または、新しい AWS アカウントにサインアップすると、マイクロを 1 年間無料で入手できます。それを使用してLinuxボックスを取得し、そこで必要なことを何でもしてください。

于 2015-05-25T15:06:07.160 に答える