コンテナの起動時間を短縮する
Contrastエージェントをインストールしたアプリケーションを起動すると、アプリケーションおよびアプリケーションがロードする依存関係のあるコードの両方にコード変換が適用されます。このコード変換が行われるため、Contrastエージェントを使用したアプリケーションの起動時間が長くなります。
Node.jsエージェントのバージョン4.x以降、アプリケーションを起動する前にプリコンパイルできるコマンドラインユーティリティを提供するようになりました。Contrastエージェントを有効にしてプリコンパイルされたアプリケーションを起動すると、変換済みファイルがディスクからロードされて起動時間が大幅に改善されます。
リライタCLIを使用する
Node.jsエージェントの設定ファイル(
contrast_security.yaml
)で以下を行います。リライタのキャッシュを有効にし、キャッシュのパスを指定します。
ログレベルを指定します。
注記
CLI変数または環境変数を指定してリライタを起動して、YAML設定をオーバーライドすることができます。例えば、標準出力(stdout)やディスクへのログ出力を防ぐ場合に、次の様にオーバーライドします。
npx -p @contrast/agent --no contrast-transpile index.js --agent.logger.stdout false --agent.logger.path /dev/null;
npxコマンドがContrast Securityからのものであり、サプライチェーン攻撃を試みる悪意のある人物からではないことを確認するために、
-p @contrast/agent --no
オプションを使用することが重要です。-p
は、--package
の省略形で、@contrast/agent
パッケージにのみコマンドを使用するようnpxに指定します。--no
は、 非推奨となった--no-install
オプションの新しいオプション名で、 コマンドのバイナリが見つからない場合にnpmからインストールを行わないようnpxに指定します。npxコマンドを実行する前に、Contrastエージェントとnpxバイナリが正常にインストールされていることを想定しています。
また、ProtectかAssessを明示的に有効にする必要があります。
例:
agent: logger: level: info path: ./node-contrast node: rewrite_cache: enable: true path: ./rewrite_cache assess: enable: true protect: enable: false
アプリケーションのエントリポイント(例えば、
index.js
)を指定して、実行ファイルを起動します。例:npx -p @contrast/agent --no contrast-transpile index.js --agent.logger.level trace; ... trace: 2021-07-12T18:31:15.128Z 2934603 contrast:rewrite - successfully rewrote code for /path/to/app/index.js trace: 2021-07-12T18:31:15.186Z 2934603 contrast:rewrite - successfully rewrote code for /path/to/app/node_modules/koa/lib/application.js trace: 2021-07-12T18:31:15.251Z 2934603 contrast:rewrite - successfully rewrote code for /path/to/app/node_modules/koa-router/lib/router.js trace: 2021-07-12T18:31:15.314Z 2934603 contrast:rewrite - successfully rewrote code for /path/to/app/node_modules/@koa/router/lib/router.js ... info: 2021-07-12T18:31:41.608Z 2946030 contrast:cli-rewriter - rewriting complete [26.625s]
注記
現在、Node.jsエージェントのリライタCLIは、Assessを有効にして実行するアプリケーションのプリコンパイルのみをサポートしています。ProtectとAssessのどちらが有効であるかによって、エージェントがソースコードを変換する方法は異なります。Protectでは、Assessよりも必要なソース変換が少なく、同じ起動遅延が発生することはありません。
リライタ処理が完了したら、通常と同じようにContrastを有効にしてアプリケーションを起動します。 (例、
node --import @contrast/agent index.js
)