api以前作成した映画情報取得用スクリプトのようにblog.honjala.net定期的に実行したいスクリプトを作成した場合、そのスクリプトをどこで動かすか、というのが悩みどころになる。いくつか方法はあるのだけど、ローカルのPCでタスクスケジューラなりcronなりで動かす方法は無料だし手軽にできるけど、実行したい時間にPCを起動しておく必要がある。安心して使える環境を作るまでのハードルが結構高い。今はそんな時のためのサーバーレス(=サーバ管理のいらない)なサービスが使える。作成したスクリプトを定期実行する環境を作ってみたい。上記の説明に記載があるとおり、なにがしかのスクリプトを作って、それを実行する条件となるトリガーを設定しておくと、そのトリガーが発動した時にスクリプトを実行してくれるサービス。「指定したテーブルのデータが更新された」「指定した日時になった」みたいなものが多数用意されているので、そこから選択する。呼び出されて初めて起動し、実行される。イベントが発生しなければ費用も発生しない。場合は100万回/月の実行まで無料で利用可能。月に数回から数十回定期的に実行するようなスクリプトなら無料枠内で試せるので、自動化を始めるには非常に適したサービスになっている。慣れるまで何をどうしたらよいか分からない、というところくらい。操作用のIAMアカウントを作成し、AWSのサービス管理画面にログインするところまで頑張ろう。下記の手順で関数を実行できる環境を作る。関数作成画面で直接編集する方法と、ローカルで作成して必要なファイルをzipでまとめてアップロードする方法がある。標準以外のライブラリを使用する場合は後者のzipアップロードの方法を使う必要があるので、こちらで進める。イベントハンドラとなる関数を定義しておくことで、トリガーが発火した時にその関数を実行してくれる仕組みになっている。実行する場合は下記のようにメイン関数をexportする形のメイン実行用ファイルを作成する。};}このファイルを「lambda.js」として作成したとしよう。作成したら、これを必要なファイルとともにzipファイルにまとめる。必要なのは、自作のjsファイルとnode_modulesフォルダ。Macなら下記のようなコマンドで「fetch_tv_movies.zip」というファイルを作成できる。node_modulesうまく実行できなかったら何度もzip化することになるので、シェルスクリプトにでもまとめておく。zipファイル名は適当で良いけどlambda関数名と合わせておくのが良いかも。マネジメントコンソールにIAMアカウントでログインして登録処理を行う。管理画面に遷移して「関数の作成」ボタンをクリックすると関数の作成画面に遷移する。「lambda_basic」みたいな名前をつけて関数を作成する。関数の作成に成功すると、トリガーやスクリプトの登録ができる設定画面に遷移する。必要なのが関数コードの登録。ここでzipファイルをアップロードする。その際、ハンドラには先程作成したメイン実行用ファイル名(lambda.jsのlambda)とハンドラ名(exports.handlerのhandler)を組み合わせて「lambda.handler」を設定しておく。「基本設定」でタイムアウトを「30秒」に延ばしておく。テストするトリガーを追加する前にアップロードしたスクリプトがちゃんと実行できるか、テストしておこう。テストは「テストイベント」設定でスクリプトに渡すパラメータを指定しておき、それを実行する形で行う。画面右上の「テスト」メニューでテストイベントの設定ができる。「NoParamTest」みたいな名前で「{}」を保存しておけばOK。「NoParamTest」を選択して「テスト」ボタンを実行すると関数が実行される。それで成功メッセージが表示されてSlackに投稿が行われたら問題なし。トリガーを追加する最後に、この関数を実行するためのトリガーを登録する。「指定時実行」と「URLアクセス時の実行」の2つの方法を押さえておけば大抵事足りると思うので、この2つの方法について書いておく。トリガーの登録は編集画面上部の「トリガーの追加」ブロックで行う。Events」を選択する。選択すると下に編集フォームが表示されるので、ここで細かい設定を行う。「毎週月曜0時0分」に実行したい場合、下記のように設定する。ルール名は分かりやすい名前をつけておく。時間はUTCなので実際に必要な時間の9時間前にセットしておく。月曜0時なら日曜15時かな。スケジュール式の設定方法は下記のヘルプページに記載されている。Eventsこれで追加しておけばOK。Gateway」を使用する。選択すると下記のような編集フォームが表示される。API項目で「新規APIの作成」を選択するとセキュリティ項目が表示され、APIへのアクセスにどのような認証を必要とするかを選択できる。「AWSIAM」はIAM認証だと思うけど試してない。「オープン」は認証なし。APIのURLにアクセスするだけで実行できる。「APIキー使用でのオープン」は正しいAPIキー付きでアクセスした場合だけ実行できる。今回は「APIキー使用でのオープン」を選択するとする。アクセス用のURLとAPIキーは追加時に生成される。APIキー付きのアクセスはリクエスト時のヘッダーに「x-api-key」という名称でAPIキーをつけてアクセスする。'x-api-key:<APIキー>'これで実行してSlackに投稿されたら登録に成功してる。これでトリガー登録完了で、Lambda関数の登録完了。おわり説明は長くなったけど、1つ作ってしまえば他のスクリプトの登録もそんなに難しくないと思う。データベースにデータを保存したり、ファイルを入出力する場合は追加の設定が必要だけど、ちょっとしたデータ収集、変換と通知なら対応できるはず。ブロック崩しゲーム(自動版)を作る数当てゲーム、マインスイーパーに続き、Vue.jsでこども向けゲ...2018-08-17node.jsでWebスクレイピングして取得データを保存するnode.jsでデータ収集のためのWebスクレイピングを行う。はてなブログProおいしいものを食べてぐーたらすることしか考えていない、2児の父。noteにもエッセイを載せてます。Versionnoteはてなブログをはじめよう!piro_sukeさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。