前の記事までで、プログラムに必要な部品は完成しました。この記事から、プログラムを定期的に実行します。
Q. 定期的にPythonプログラムを実行するには何を使えばいい? A. 例えばPythonファイルをAWS Lambdaに置いて…
Q. AWS Lambdaって何? A. サーバーのことを考えずにコードを実行できるサービス
「プログラムの定期実行 slack」で検索し、【Slack自動保存】サーバーレスでCronのように定期的にプログラムを実行しよう | 株式会社ココナラを見つけました。「定期でコマンド実行させるには」にAWS の LambdaとAmazon CloudWatch Eventsを使うと良さそうだと書いてあります。
まずはAWSにログインします(本当はアカウント作成から書こうと思ったんですが、会社でAWSアカウントが与えられているのでアカウントにログインできる状態まではVPoEがやってしまったので割愛します)。Lambdaってなんだろう…とAWS内部でlambdaと検索すると、わかりやすそうな文章と共に出てきます。
サーバーのことを考えずにコードが実行できるんですか? じゃあそれでまずはHello Worldを実行してみます。
Q. Lambdaを作るにはどうすればいいの? A. (ほとんど)公式ページ通りに進めよう
AWSのLambdaでPythonコードを実行したいので、「aws lambda python」で検索すると、Python による Lambda 関数の構築 - AWS Lambdaが見つかります。「Python 関数を作成するには」に作り方が書いてあるのでその通りに従いますが、色々省略されており初めてだとまだ調べることがあります。原文はPython による Lambda 関数の構築 - AWS Lambdaですが、調べながら進めた結果を下に書きます。書き足した部分はイタリックにしています。
- Lambda コンソールを開きます。
- 色々見て回った後だからか、リンクを開いたらアプリケーションのページを開いてしまいました。その場合は左のカラムから「関数」を選ぶと次の作業に進めました。
- [Create function] (関数の作成) をクリックします。
- 以下の設定を行います。
- 名前 –
my-function
。 - ランタイム - Python 3.9。(Pythonでコードを書いたので)
- ロール – 既存のロールを選択します。
- 既存のロール –
lambda-role
。- ここは、Lambda 実行ロール - AWS Lambdaを見て作らなければいけませんでした。デベロッパーガイドは上から順に実行することを前提としているらしいです。そこを見るとまたたくさんのやることが増えます。でも仕方ないのでやります。
- IAM コンソールの[Roles (ロール)] ページを開きます。
- [ロールの作成]を選択します。
- [一般的なユースケース] で、[Lambda] を選択します。
- [Next: Permissions (次へ: アクセス許可)] を選択します。
- [アクセス許可ポリシーのアタッチ] で、[AWSLambdaBasicExecutionRole] および [AWSXRayDaemonWriteAccess] AWS 管理ポリシーを選択します。
- AWSLambdaBasicExecutionRoleなどは検索窓に入れると出てきますが、いちいちフィルタから消さないとand条件になるので注意します
- [次へ: タグ] を選択します。
- [Next: Review] を選択します。
- この作業はありませんでした。
- [ロール名] に「
lambda-role
」と入力します。 - [ロールの作成] を選択します。
- ここまでやって、既存のロールの右にある更新ボタンを押すとロールが出てきます。
- 名前 –
- [Create function] (関数の作成) をクリックします。
- テストイベントを設定するには、[テスト] を選択します。
- テストイベントを設定したいのか分からないので「テストイベント lambda」で検索してコンソールでの Lambda 関数のテスト - AWS Lambdaを見つけます。読んだところコンソールで Lambda 関数をテストするために必要らしいです。関数をテストしてみたいので選択しました。
- [イベント名] で、「
test
」と入力します。 - [Save changes] (変更の保存) をクリックします。 私の環境では「保存」でしたがそれを押しました。
- [Test] (テスト) を選択して関数を呼び出します。
実行できたらしいです。
公式の説明とは異なる挙動もありましたが、自分の端末ではなく、AWSで関数が実行できました。
次の記事では、Hello World!の代わりに、自作の575判定コードを実行しようとします。