AWS Lambdaでコードミス無いのにエラーになる時

AWS Lambdaで、予期せぬエラーが発生します。どうみてもコードは間違っていません。もしもコード修正してから、デプロイするまでの時間が短い場合、最後のコード修正が反映されていない可能性があります。

分かりやすい例としては以下のようなエラー。

デプロイしたコードは以下のとおりです。

たしかにデプロイ直前に、BSキーで、”lsp”→”ls”にしました。表示上の修正と、デプロイ内容に時間差があるようです。とりいそぎコメント行を少し変えて、デプロイボタンを有効化し、再デプロイします。

コードが少量で、文字列部などなら気付きやすいですが、コードがおおくて制御コード部だと何が起こったのか気付きにくいです。以下の習慣を身に着ける必要があるようです。

「修正した行から、一旦カーソル移動させて、一呼吸まってデプロイする」

でもすぐに忘れて、同じ過ちを繰り返してしまいます。

AWS S3でテンポラリファイルを自動削除する

AWSのストレージ、Lanbdaのストレージメニューから誘われ「EFS」を使おうとしましたが、「EFS」のための別機能の設定に次ぐ設定の輪廻にはまり、最終的にエラーで続行不能。別のストレージ機能「S3」があることを知り、素直に使えてびっくりです。

「S3」は、WEBからのダウンロードファイルの生成場所に適当です。しかし、ユーザのダウンロード済みを検出して、削除するのは面倒です。

S3には、「ライフサイクル」タブがあり、バケットに以下のような設定を行うと自動削除ができました。ただし削除されるまでの最小時間は1日です。

その他、以下の設定も必要でした。

AWS LambdaでTypeError: Failed to fetch がたまに出る

AWSのサーバ内部プログラムであるLambda。WEBページを構築する場合、通常は以下の手順となります。

  1. ブラウザから、Lambda関数に割当てられたAWS Gateway のURLを呼出し。
  2. そのLambda内でDynamoDBにアクセス。
  3. Lambda内で、HTTPレスポンスを編集し返却。
  4. プラウザ側でそのレスポンスを受信。

AWS Gatewayを呼び出すには、以下のようにJavascriptのfetch()を使います。(CGIとしてcallも可能でしたがブラウザから警告がでました。)

var myHeaders = new Headers();
myHeaders.append("Content-Type", "application/json");
var raw = JSON.stringify( { 
	 "パラメタ名" : パラメタ値,
          中  略
} );
var requestOptions = {
 	method: 'POST',
        headers: myHeaders,
        body: raw,
        redirect: 'follow'
};
fetch( "https://xxxxxxxxxx.execute-api.ap-northeast-1.amazonaws.com/dev", requestOptions )
    	.then( response => response.text() )
        .then( result => procResponce( result ) )
    	.catch( error => fetch_error( error ) );

fetchのエラーを、fetch_error()関数でキャッチしているのですが、たまに”TypeError: Failed to fetch”が出ます。

うまく呼べるときは呼べるのですが、割とサーバへリクエストする間隔が短いとき発生する感じです。Lambda関数が何処まで実行されているかは、普通の作込みではわかりません。HTTPレスポンス(procResponce()の関数の呼出し)が得られていないで、途中で停止したのでしょうか?

原因は簡単でした。Lambda関数のメモリ容量が少なすぎました。デフォルト128MBはいくら何でも小さすぎます。調整箇所は下図です。

Lambda関数のタイムアウト値は下図のように直ぐエラーがでるので気付きやいすですが、メモリ使用量(しかもまさかの小容量)は気付きにくいです。

弊方は2048までUP。これでレスポンスも含め、すごく調子よくなりました。Lambda関数生成時に、指定項目になってくれるとGoodですね。

AWS DynamoDBでBackupスケジュールを設定する

癖のあるDynamoDBですが、使いやすい一面もあります。

Backupスケジュールが手軽に設定できます。

テーブルの管理画面から、バックアップのタブを選びます。

「バックアップ作成」→「バックアップのスケジュールを設定」からバックアップのプラン選択句に移ります。

細かい操作は割愛しますが、週一回のバックアップが仕込めました。

バックアップ状況が一覧でみれます。なんか二重にバックアップファイルができますが、これはよくわかりません。

RDBのバックアッブコマンドを、ジョブスケジューラに登録したりしなくてよいです。ストレージも勝手に割り当ててくれるようです。

e-eovで返戻し文書を修正するには

社会保険の申請ができるe-eovですが、カナの姓名間にスペースが半角などなど、申請時に判別てきそうな誤りを、申請後に指摘されてしまい、いつも何回か再申請を繰り返しがちです。おまけに、e-taxとは異なり、入力内容は自動保存されません。再申請の度、全入力していました。

どうしたものかと思案していましたが、再申請は以下のようにするようです。

1) メイン画面のスクロールして見えない部分に、「作成済み申請書の読込」を選択します。なぜこんな重要なものを一番下に置いているのか不思議すぎです。

2) 申請時にダウンロードして保存しておいたzipを読込ます。

これで前回の申請内容を修正して提出ができます。

しかし申請時に、申請内容のzipをダウンロードしていないと出来ません。

このダウンロードを行うよう画面に表示はされていますが、重要なもので「保存しますか?保存しないと再申請できません…」と問合せメッセージを出してほしいです。落とし穴です。