質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
AWS Lambda

AWS Lambdaは、クラウド上でアプリを実行できるコンピューティングサービス。サーバーのプロビジョニングや管理を要せず複数のイベントに対してコードを実行します。カスタムロジック用いた他AWSサービスの拡張やAWSの規模やパフォーマンスを用いたバックエンドサービスを作成できます。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

Q&A

0回答

1778閲覧

例外を補足してログを記録しました。 その後の異常終了方法について相談させてください

m0a

総合スコア708

AWS Lambda

AWS Lambdaは、クラウド上でアプリを実行できるコンピューティングサービス。サーバーのプロビジョニングや管理を要せず複数のイベントに対してコードを実行します。カスタムロジック用いた他AWSサービスの拡張やAWSの規模やパフォーマンスを用いたバックエンドサービスを作成できます。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

1グッド

1クリップ

投稿2018/06/04 11:27

編集2018/06/04 11:39

node.js(10.3)を使っています。
私自身が使いやすいのでサンプルコードはTypeScriptで記載させていただいています。

AWS Lambda環境において例外を補足してログを記録したいと考えていますが、
その後の方針について悩んでいます。

基本的には異常終了させたいのですが、異常終了の仕方についてご相談させてください。

PTN1 補足した例外を記録後再throwする。

let someLogPtn1 = (e: Error) => { // some log code; console.log("logging:" + e.message); throw e; }

補足したerrorを再放流しています。別な箇所でまたログを記録してしまい、二重ログになる可能性があります。

PTN2 新しいエラーを作って返すことにより、ログの二重記録を防ぐ

let someLogPtn2 = (e: Error) => { if (e instanceof LoggerError) { return; } // some log code; console.log("logging:" + e.message); throw new LoggerError(e.toString()); }

懸念点: 新規に関わった開発者に説明が必要になる。

PTN3 エラーをthrowする以外の方法で終了する

例えば、process.exit(1);で終了させます。
AWS Lambdaにおいて使おうとしていますが、これによる影響が読めず悩んでいます。

let someLogPtn3 = (e: Error) => { // some log code; console.log("logging:" + e.message); // とにかく異常終了させる process.exit(1); }

まとめ

自分はPTN3がいいような気がしますが、Lambdaで使う上での懸念点や、そもそも
process.exit(1); 以外の推奨方法はありますでしょうか?

以下がSampleコード全体となります。

let main = () => { try { runAndError(); } catch (e) { errorHandler(e); } } main(); let runAndError = () => { throw new Error("someError"); } class LoggerError extends Error { constructor(e: string) { super(e); } } // ptn1: そのまま返す // 懸念点: また上位の階層でlogに記録してしまうんじゃないか? let someLogPtn1 = (e: Error) => { // some log code; console.log("logging:" + e.message); throw e; } // ptn2: 新しいエラーを作って返す。それによってそれによってログの二重記録を防ぐ // 懸念点: 新規に関わった開発者に説明が必要になる。 let someLogPtn2 = (e: Error) => { if (e instanceof LoggerError) { return; } // some log code; console.log("logging:" + e.message); throw new LoggerError(e.toString()); } // ptn3: エラーををthrowする以外の方法で終了する // これがいいような気がしますが、予想がつかず let someLogPtn3 = (e: Error) => { // some log code; console.log("logging:" + e.message); // とにかく異常終了させる process.exit(1); } let errorHandler = (e: Error) => { // ptn1: そのまま返す // 懸念点: また上位の階層でlogに記録してしまうんじゃないか? someLogPtn1(e); // ptn2: 新しいエラーを作って返す。それによってそれによってログの二重記録を防ぐ // 懸念点: 新規に関わった開発者に説明が必要になる。 someLogPtn2(e); // ptn3: エラーををthrowする以外の方法で終了する // これがいいような気がしますが、予想がつかず someLogPtn3(e); }
takyafumin👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問