CloudWatchタイマーからのpingを処理する方法で関数をラップする最良の方法は何ですか?たとえば、以下のラムダ関数を考えます。
export const fn = (event, context, callback) => {
const { year, make, model, } = event.queryStringParameters
return otherFn({ year, make, model, })
.then(res => response(callback, res))
.catch(err => console.log(err))
}
関数をpingすると、CloudWatchリクエストにqueryStringParametersがないためエラーになります。技術的には、これでもLambda関数を暖かく保つことができます(これが私の目標です)が、不必要に長いエラーのリストを用意したくありません。
CloudWatchでは、(おそらく)Lambda関数に渡される入力を含めることができることに気付きました。
上記の関数をラップしてpingを受け入れることができる最も賢い方法は何ですか?理想的には次のようになります。
export const fn = (event, context, callback) => {
if (event.ping) return ping(callback) // the ping function is an import to stay DRY
const { year, make, model, } = event.queryStringParameters
return otherFn({ year, make, model, })
.then(res => response(callback, res))
.catch(err => console.log(err))
}
次のように、イベントを変更できるようにするJSONを渡します。
{ "ping": true }
入力のドキュメントを読みましたが、さまざまな入力タイプの意味や使用方法がまったくわかりません...
入力オプション[定数(JSONテキスト)]を選択すると、入力ボックスがすぐ下に表示されます。 json {"ping": true}
を入力する必要があります。関数はjsonをevent
オブジェクトとして取得し、コードと同じようにevent.ping
にアクセスできます。
サーバーレスフレームワークを使用している場合は、AWSコンソールでこれを行う代わりに、関数のスケジュールイベントを追加できます。これは、既存のhttpイベントに追加されます。次のように、スケジュールされたイベントの入力セクションの下にping: true
パラメータを追加できます。
scheduledFunction:
handler: index.handler
events:
- schedule:
rate: rate(1 minute)
enabled: true
input:
ping: true
これにより、指定されたスケジュールでcloudwatchログイベントが作成および有効化され、ping
オブジェクトで入力パラメーターevent
が送信されます。