AWSでプログラムを定期実行する方法

この記事を書いたチーム:frontier
AWSでプログラムを定期実行する方法 株式会社Smallit 技術ブログ

はじめに 

【エンジニア募集中】フルリモート可◎、売上/従業員数9年連続UP、平均残業8時間、有給取得率90%、年休124日以上 etc.  詳細はこちらから>

プログラムを定期的に実行したいけどサーバもないし、PCを24時間起動しておきたくない! というときに便利なAWSのサービスの組み合わせを紹介します。 

今回はS3上のテキストファイルに定期的に値を出力する処理を作成していきます。 

 環境 

AWS:Lambda 
AWS:Amazon EventBridge 
AWS:S3 
言語:Python 3.9 

 Lambdaの準備 

まずはプログラムを実行するためのLambdaを用意していきます。 下記を設定後、「関数の作成」をクリックすると関数が作成されます。 

 Amazon EventBridgeでスケジュールを作成 

Lambdaを定期実行できるようにスケジュールを作成していきます。 

※スケジュールは作成後でも変更可能です。 

スケジュールの対象としてLambdaで作成した関数を指定します。 

これ以降の設定は今回はデフォルトのままで作成しています。 

書き込み先のファイルをS3に用意 

バケットを作成し、書き込みに使用するファイルをローカルからアップロードしていきます。 

Lambdaの関数からS3上のファイルへ書き込むためのポリシーを設定 

ポリシーを設定することで読み取り書き込み等の許可を与えることができます。 

Lambdaの「設定」→「アクセス権限」→ロール名をクリック 

(ここでは「ScheduleBatTest-role-dv78p6d2」) 

デフォルトでCloudWatch logsの許可ポリシーが設定されている為、 

「編集」からS3へのアクセス権限を追加していきます。 

既存のポリシー内にS3のポリシーを追記します。 

・追記するポリシー 

Lambdaへプログラムを記入していく 

これで設定が完了したので、S3のファイルへ書き込むプログラムを作成していきます。 

 ・lambda_function.py 

※注意事項 

・「Deploy」ボタンを押下しないと修正したプログラムは反映されません。 

・Lambdaでdatetimeを使用するとUTCが設定されているため、日本時間が表示されません。 

日本時間を設定する場合は下記画像のように環境変数を設定してください。 

定期実行 

これでスケジュールされたバッチを動作させることができます。 

・定期実行後のSchduleTest.txt 

 (20分間で5分おきに実行するよう、スケジュールを設定しています) 

さいごに 

多少設定が必要ですが、シンプルな構成でバッチ実行することができるようなりました。 

また、Amazon EventBridgeはスケジュール以外にも他のAWSと連携してイベントを起こすことも可能なので、サービス内容を理解して使い分けていきましょう。 

【エンジニア募集中】フルリモートも◎(リモート率85.7%)、平均残業8時間、年休124日以上、有給取得率90% etc. 詳細はこちらから>

Smallitのサービス