平野重利(21)13こんにちは、平野です。基本的には同じくらいのサイズのファイルが対象になるかと思います。メモリサイズもそれに見合った量を設定することで、無駄な課金を防ぐことができます。設定したメモリ量では処理が失敗してしまうことになります。一定以上だったら大きめのメモリを確保しておいたLambda関数で実行するような仕掛けを作ってみました。いくつか覚えておいた方が良さそうなことがあったのでブログにします。容量が大きな場合は通常の10倍程度の量まで想定されるようなケースでした。結局管理面でアドバンテージがあるかもしれません。一度メモリを上げてみて、処理時間が短縮されて料金的に相殺されるケースでないか確認してみることをオススメします。アプリケーションとしては、pythonで動くコードをServerlessFrameworkを使ってデプロイしています。lambda_handler自体は一つで、それをメモリサイズだけ異なる2パターンの関数としてデプロイするようにしました。ロールが付与されていることを確認してください。コードServerless.ymlServerless.ymlの内容としては以下のようになります。50ハンドラとなるpythonコードsample_app.pyは1つで、メモリサイズだけを変更して2つの関数を配置します。Key=key)['ContentLength']lambda_handlerの直後で、関数名によって場合分けをしています。いうコードになっています。ファイルサイズをチェックして、閾値を超えていたら別のLambda関数を呼びます。注意点としては、関数の呼び出しタイプとしてInvocationType="Event"と指定することです。デフォルトでは同期呼び出しになってしまうため、呼び出し先の関数が終わるまで待機してしまいます。呼び出し元の関数側でタイムアウトが発生したら、呼び出し先関数も一緒に終了してしまいます。いうことで、必ず呼び出しタイプはEventを指定しましょう。eventの渡し方としてはPayload=json.dumps(event))のようにします。すれば、eventをそのまま渡すことができます。VPCLambdaの場合VPC内ではないLambda関数の場合は上記の方法で良いのですが、VPC内Lambda関数の場合には一工夫が必要です。Gatewayの設置されていない)VPC内で実行されるLambda関数の場合、Lambda関数を呼び出すAPIを実行することができません。一度インターネットを経由しなければならないためです。今回はVPCエンドポイントが設定されたSNSが既にあったので、SNSを経由してLambda関数を呼び出す方法を取りました。Gatewayが既に設置されている場合はそれを利用した方が無駄なお金はかからずに済みます。SNSのVPCエンドポイントを作成する方法は下記のブログを参照してみて下さい。セキュアに使えるようになりました!Serverless.ymlSNSを経由する場合のServerless.ymlの例としては以下のようになります。Lambda関数からはそのARNにpublishを行うという流れになります。vpc_lambda_invoke_topic_namevpc_lambda_invoke_topic_nameがSNSトピック名なので、適宜変更してください。環境変数のトピックARNを指定しています。Subjectはなんでも良い(カラ文字列はダメ)ので、適当な文字列を入れます。Messageに元のeventを渡します。json.loads(event['Records'][0]['Sns']['Message'])のように、SNSで送られてくる形式から、オリジナルのeventの情報を取り出す必要があります。呼び出される側のタイムアウト時間に気をつける必要があります。SQSの可視性タイムアウト時間は、それと紐づいたLambda関数のタイムアウト時間よりも長く設定する必要があります。マネジメントコンソールから設定する際には、この関係性がチェックされます。この条件を満たさない場合、処理が走っている間に別のLambda関数が処理を開始してしまう可能性があるからです。呼び出される側のLambda関数はSQSと直接紐づいている訳ではないため、このチェックが働きません。呼び出される側のLambdaのタイムアウト時間も、SQSの可視性タイムアウトをオーバーしないように気をつけてください。DynamoDBを使って処理中のファイルを記録しておくなどの処置が必要になるかと思います。処理対象のファイルのサイズによって大きなメモリの関数に処理を委譲する時のポイントをいくつか紹介しました。自分とほぼ同じ関数を呼ぶため、少しの間違いでも、自分自身を呼ぶ無限ループに入ってしまう可能性があります。そのせいでLambda関数の同時起動数制限に引っかかって他の関数に影響が出てしまったりするかと思います。単純にメモリ設定を大きくしてしまうとお金がもったいないですので、こんな方法もあるよ、という話でした。誰かの参考になれば幸いです。社内でツッコミが入った後にこう書いています。私自身はまだ「○○と言ったら××」というストックが少ないです。210,817DI部の平野です。インドアに住んでいます。リモート】クラスメソッドの会社説明会を開催しますクラスメソッドでは、AWS・AI・ビッグデータ・モバイルなどの技術職や営業のメンバーとして一緒にお仕事をする仲間を大募集しています。#cmdevio新型コロナウイルスの感染拡大を受け、本イベントを延期させていただくことになりました(開催時期未定)。お申し込みいただいた皆様には大変申し訳ございませんが、何卒ご理解いただけますようよろしくお願いいたします。AWSについてライトに色んな情報交換をしましょう。濱田孝治416re:Invnetの動画検索でもめちゃくちゃ便利ですが、その他ブログやホワイトペーパーやGitHubも横断検索できるので、是非一度使ってみてください。CAFEの他、NTTデータとセブンイレブンの取り組みや、サインポスト、Zippinなどの各社と流通・小売業との連携を業界マップに作成してみました。泰雨111皆さん、こんにちは。コンサル部のテウです。2020年もあっという間に2ヶ月が経ちました。今年こそ機械学習に入門しようぜ!!って決心された方もいらっしゃると思います。入門できる方法をご紹介させて頂きたいと思います。本記事の手順通り、ランチタイム等の時間を活かして、手軽に入門してみてください。濱田孝治416re:Invnetの動画検索でもめちゃくちゃ便利ですが、その他ブログやホワイトペーパーやGitHubも横断検索できるので、是非一度使ってみてください。夏目祐樹414こんにちは、CX事業本部の夏目です。MacのタッチバーのタッチIDが非常に便利なのですが、Terminalでsudoを叩かないと行けないときに使えたらなぁと思ったので、情報を共有します。臼田佳祐296ワークフロー自動化OSSのn8nをAWS環境で建てて検証してみました。非常に期待できるサービスです。Fargateの勉強をしています。使ってみたい方は参考にしてください。洋介257SnowflakeがAWSの東京リージョン上で稼働するようになりました。データを日本に置けます。クラスメソッド株式会社が運営するAWS・iOS・HTML5に関する技術情報サイトです。