AWS初心者によるAWSでの定期実行処理

## はじめに
どうも、こんにちは。今回は、AWSで定期実行処理を行う方法を紹介したいと思います。今回の記事には、超絶初歩的なことしか書いてないです。AWS玄人の方からすれば鼻で笑われても仕方ないような内容になりますが、最後までお付き合いいただけると幸いです。
AWSのアカウントをまだ作っていないよ～、って人は公式のドキュメントを参考に作ってみてください。

https://aws.amazon.com/jp/register-flow/

## lambdaの設定
具体的にどのような処理を実装するのかというと、AWSのlambdaとCloudWatchを使って、一分毎に「hello world」と出力するプログラムを作ってみようと思います。
まずは、lambdaで「hello world」と出力する処理を作ります。AWSのマネジメントコンソールに移動したらlambdaを選択してください。トップページにlambdaが表示されていない方は、検索バーでlambdaと検索すると出てくると思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2359210/c0a3a949-495f-311a-1864-f2b7dd7ed1a4.png)

lambdaを選択してこのような画面が表示されたら、関数の作成をクリックしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2359210/82ae9cd8-0de4-4055-9d78-95c0cae4cd3a.png)

関数名は適当にhelloWorldとかにして、関数を記述する際に使用する言語を指定しましょう。今回はPythonを使用するのでPythonを選択します。バージョンは別になんでも大丈夫です。設定が完了したら関数の作成をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2359210/b3ec5892-0efb-3016-6922-2c07841b69cc.png)

このような画面が表示されれば、OKです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2359210/30ab4db5-003e-4ee3-d747-95b07ecf6e0a.png)

ここまでできたら、コードを以下のように書き換えて、デプロイをクリックします。コードを変更したら、毎回デプロイするのを忘れずに。
本来は使用するファイルをzip形式でアップロードしたり、S3から読み込んだりするのがスタンダードらしいのですが、今回は簡単な処理なので直接プログラムを書き込んでしまいましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2359210/a317be61-c651-9d46-8165-326b1b5ce315.png)

それでは一度、テストをしてみましょう。テストをクリックして、イベント名に適当な名前を付けて作成をクリックします。このような画面が表示されればしっかりと実行できています。「hello wolrd」という文字列が出力されていますね。これでlambdaの作成は完了になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2359210/64e1a98c-3f65-a07a-a73f-4f961f0254ed.png)

## CloudWatchの設定
次に、CloudWatchの設定をしていきましょう。ページ上部にある検索バーに「CloudWatch」と入力して、CloudWatchにアクセスします。このようなページに移動出来たら大丈夫です。そしたら、ページの左側にあるイベントの「ルール」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2359210/ec679307-1b73-4cc1-d193-6c683b5e3a03.png)

そうすると、Amazon EventBridgeへのアクセスページが表示されますので、クリックしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2359210/7e5d1ebd-664e-e621-bfe7-e67cb9e61e99.png)

それでは、ルールを作成をクリックして定期実行処理の設定をしましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2359210/74aa3412-1939-2343-8f45-e345f68810a8.png)

適当なルール名をつけます。ルールの説明に関しては任意なので、書かなくても大丈夫です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2359210/7616f1f6-fcee-9853-d68a-dabed498931a.png)

パターンを定義から、イベントの実行タイミングを設定します。今回は一分毎に「hello world」と出力したいので、スケージュールをチャックして、「固定速度ごと」という項目を1分にします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2359210/85c3e3fe-cce8-4233-06c9-9b98067e578e.png)

ターゲットを選択から、先ほど作成したlambdaのhelloWorld関数を選択したら、ページ下部の作成をクリックします。ここまで出来たらルールの作成は完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2359210/e6553184-04cc-508b-1ef1-7834224f3a52.png)


作成が完了するとAmazon EventBridgeのトップページに移動すると思います。作成したルールがEnabledになっていたらOKです。それでは、正常に実行されているのか確認していきます。検索バーにCloudWatchと入力して、CloudWatchのトップページに移動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2359210/d8bc7a34-504a-b437-7a92-1579de4e03ce.png)

画面左側にあるログの欄から、「ログループ」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2359210/49b58f52-ea84-6334-7ccf-8d06d2e01cae.png)

ログループを確認できる画面に移ると思うので、そこから先ほど作成したlambda関数のログを確認していきます。先ほど作成したlambdaの関数名のログをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2359210/7bfe92b4-4347-2a6b-d790-a6f388fd7e91.png)

ちゃんとログが作成されていますね。正常に動作しているか、ログの中身を確認してみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2359210/e380bb8d-c34b-2df4-f2f9-10c920c6fe49.png)

「hello world」と一分毎に出力されていますね。これでAWSを用いた簡単な定期実行処理を実装できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2359210/fb75ea2f-ee48-919e-db92-7b20d7234d30.png)

## 定期実行処理の停止（超重要）
ここからが超重要です。というか、ここをすっ飛ばすと後から、大量の請求が来るという恐ろしい事態に発展してしまうかもしれません...
今回作成した「1分毎にhello worldと出力する処理」は、あくまでもAWSでの定期実行処理の実装方法を確認するためのものです。そのため、確認が済んだら定期実行処理を停止してしまいましょう。検索バーに「EventBridge」と入力して、Amazon EventBridgeのトップページに移動します。このような画面が表示されると思うので、画面左側の「ルール」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2359210/db0ef8b8-dfc4-2be5-aef7-e8a104ca5f27.png)

先ほど作成した「test-hello-world」というルールをチェックして、「無効にする」をチェックして、ルールを無効化してください。これでルールを無効化できました。心配な方はもう一度、CloudWatchのログループから定期実行処理が停止されていることを確認してみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2359210/6e59d1fd-94b9-b215-e704-b767e328c117.png)

1日に1回とか、1時間に1回ぐらいの定期実行処理なら、わざわざルールを無効化する必要もないかもしれませんが、1分に1回実行は流石に怖いですよね...

## 最後に
以上がAWSを使った簡単な定期実行処理の実装方法です。どうでしたか？できる限りかみ砕いて説明したつもりなので、少しでもお役に立てたら幸いです。次回は、ニュースデータを一定の間隔で取得して、Amazon S3というストレージに格納していくシステムを実装していきたいと思います。lambdaとS3の接続に関しては、私自身本当に躓きました。私が躓いたポイントも含めてできる限り分かりやすく、説明していきたいと思います。
それではまた。