byClassmethod検索AWSAlexaモバイルビッグデータサーバーレスTableauAlteryxイベントLambdaから起動するバッチ処理の作成Lambda2016年07月20日t.honda(144)17この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。はじめに定型的な処理をミス無くこなす事が苦手なt.hondaです。そんな私の元に、毎月一回手動でスクリプトを実行しなければならない運用がありました。今回はこれをLambdaとEC2の組み合わせで自動起動するバッチ処理化してみました。実装言語はPythonとなります。処理概要LambdaとEC2を組み合わせについて以下のメリットを考慮し、LambdaとEC2を組み合わせることにしました。処理としては単純で実行するスクリプトをEC2内で実行するようにするそのEC2はLambdaの定期実行にて起動するようにするLambdaより起動する際、スクリプトにパラメータを渡せるようにするスクリプトの実行後、EC2を終了するとしました。図にすると以下のようになります。実装についてでは実装についてです。Functionです。このLambdaがスケジュールで定期的に起動すること(今回は月一回)で、バッチ処理全体が起動します。None)このプログラムの「start_lambda_handler」メソッドをLambdaのイベントハンドラーとしてスケジュールに登録します。処理としては「send_message」メソッドでSNSへのメッセージを送信、「ec2_start」メソッドでEC2を起動しています。SNSへのメッセージはスクリプトへ渡すパラメータとしていますが、今回は処理日の年月としました。Lambdaのスケジュール登録については以下のリンクを参考にしてください。上記図の「2.SNSからSQSにパラメータを伝達する」についてです。LambdaからSQSへ直接書き込まずにSNSを経由した理由は以下のブログの内容を考慮したためです。上記図の「4.SQSより取得したパラメータを渡し、スクリプトを起動する」「5.SNSに終了メッセージを送信する」についてです。以下の「starter.py」をEC2の起動時に実行するようにcronで設定します。main()Messageの「get_target_month」メソッドを呼び出し、SQSよりパラメータの年月を取得しています。既存スクリプトを起動後、Messageの「send_stop_ec2」メソッドを呼び出してSNSへEC2を終了するメッセージを送信しています。既存スクリプトの起動については業務ロジックなのでここには書きませんが、SQSより取得したパラメータを渡す事、処理の終了と同期できるように呼び出すことを考慮してください。Messageについては以下のようになります。resp)SQSよりパラメータを取得する「get_target_month」メソッドと、EC2終了のためSNSにメッセージを送信する「send_stop_ec2」メソッドです。こちらは定義値をapplication.confに記述していますが、以下のようになります。上記図の「6.SNSよりLambdaを発火する」「7.EC2を終了する」についてです。今回はSNSとLambdaを組み合わせてEC2を終了していますが、EC2内から(上記「starter.py」)直接終了してもいいかもしれません。SNSからLambdaを呼び出す設定については割愛します。Functionです。None)このプログラムの「stop_lambda_handler」メソッドをLambdaのイベントハンドラーとしてスケジュールに登録します。EC2の起動に失敗するケースがありました。以下、そのケースについてです。具体的には、マネージメントコンソール上でステータスチェックが全て有効にならない状態のままとなってしまう事象です。これが発生すると上記の処理フロー図の「3.EC2を起動する」の状態で止まり続け、次の実行が行われない。EC2も(ステータスチェックがエラーのまま)起動し続ける。SQSにもキューが残り続ける。これを防ぐために以下の設定を行いました。EC2のステータスチェックアラームで、EC2を終了するLambdaを呼ぶ。SQSにキューが残るのを防ぐため、キューの有効時間を設定する。これらの設定により、EC2のステータスがエラーの場合はシャットダウンされ、またキューも残らないため、次の定期的な実行にて再トライすることになります(条件によっては同じ結果が出力されるとは限らないですが)。まとめ以上で定期的に実行するスクリプトを、実行時のみEC2内で処理するバッチ化することができました。今まで手動で定期的に実行していたスクリプトを自動化することで、日常の業務が捗ることなどもあるかと思います。そのような時の参考になれば幸いです。1,440,216手を動かす(プログラムを組む)ことで技術を理解するプログラマです。ソースコードから理解する技術、について書いていきたいと思います。リモート】クラスメソッドの会社説明会を開催しますクラスメソッドでは、AWS・AI・ビッグデータ・モバイルなどの技術職や営業のメンバーとして一緒にお仕事をする仲間を大募集しています。#cmdevio新型コロナウイルスの感染拡大を受け、本イベントを延期させていただくことになりました(開催時期未定)。お申し込みいただいた皆様には大変申し訳ございませんが、何卒ご理解いただけますようよろしくお願いいたします。AWSについてライトに色んな情報交換をしましょう。濱田孝治411re:Invnetの動画検索でもめちゃくちゃ便利ですが、その他ブログやホワイトペーパーやGitHubも横断検索できるので、是非一度使ってみてください。CAFEの他、NTTデータとセブンイレブンの取り組みや、サインポスト、Zippinなどの各社と流通・小売業との連携を業界マップに作成してみました。泰雨108皆さん、こんにちは。コンサル部のテウです。2020年もあっという間に2ヶ月が経ちました。今年こそ機械学習に入門しようぜ!!って決心された方もいらっしゃると思います。入門できる方法をご紹介させて頂きたいと思います。本記事の手順通り、ランチタイム等の時間を活かして、手軽に入門してみてください。夏目祐樹413こんにちは、CX事業本部の夏目です。MacのタッチバーのタッチIDが非常に便利なのですが、Terminalでsudoを叩かないと行けないときに使えたらなぁと思ったので、情報を共有します。濱田孝治411re:Invnetの動画検索でもめちゃくちゃ便利ですが、その他ブログやホワイトペーパーやGitHubも横断検索できるので、是非一度使ってみてください。臼田佳祐296ワークフロー自動化OSSのn8nをAWS環境で建てて検証してみました。非常に期待できるサービスです。Fargateの勉強をしています。使ってみたい方は参考にしてください。洋介257SnowflakeがAWSの東京リージョン上で稼働するようになりました。データを日本に置けます。クラスメソッド株式会社が運営するAWS・iOS・HTML5に関する技術情報サイトです。