LambdaでNode.jsアプリを作ります。AWSマネジメントコンソールでいきなりコードを書き始めることは少なく、ローカル開発環境で動作を確認してからLambda化すると思います。このときソースコードをアップロードする方法を共有します。Lambda関数の作り方がわかります。Lambda関数でNode.jsのアプリを動かす方法がわかります。Lambdaで動かす方法がわかります。installしたモジュールをLambdaで使う方法がわかります。環境変数の設定方法がわかります。【AWS入門】電車遅延をSMS通知してくれるアプリを作成した(TwitterAPI利用)AWSサービスを使ってみよう。EventBridge+Lambda+AmazonSNSを使ってアプリを作成。https://bunsugi.com/train-delay-check-app前提AWSのアカウントがあること。ローカルにNode.jsがインストールされていること。私は仮想環境(VirtualBox/ubuntu64_18)で実施しています。全体の流れLambda関数を作成ローカルで関数を開発S3にアップロードS3からLambda関数へアップロードこのような流れで説明していきます。Lambda関数を作成Lambda関数の箱を作ります。「一から作成」を選びます。新しいロールを作成hello-world関数の確認・テスト既に、簡単なアプリが記載されたindex.jsが用意されています。「テスト」タブからテストを実行すると、結果ログが返ってきます。テスト実行ログローカルでNode.jsアプリを作る初期設定ローカルでいつも通りNode.jsアプリを作成します。installGitHubとも連携しておきます。mainNode.jsアプリ作成アプリを作成します。twitterのAPIを呼び出して、「直近30分」と「昨日の同じ時間」に特定の言葉が呼び出された数を取得し、数を比較する関数です。フォルダ構成フォルダ構成は以下のようになります。utils.jsソースコード全文は最下部に記載します。indexモジュールインストール必要なモジュールをインストールします。ここでインストールしたnode_modulesフォルダもS3アップロード対象となります。今回、2つのモジュールを利用します。axios:APIの呼び出しに利用します。dotenv:環境変数の呼び出しに使用します。開発環境でインストールしておきます。APIにはAPIアクセスキーが必要ですが、秘密情報はGitHub等にpushしてはいけないので、環境変数化します。TwitterのAPIに限らず、非公開の情報はここに追加していきます。※.gitignoreに.envが含まれることを忘れずに確認する。ローカルでお試し実行index.jsの最下部にindex()を一時的に追加し、ローカルで実行してみます。console.logでログが出力された昨日のカウント:14確認用のconsole.logが問題なく実行されていることがわかります。開発環境で作成した関数をLambdaで実行するS3へコードをアップロード以下の5つのファイル/フォルダをzip化します。index.jsnode_modulespackage-lock.jsonpackage.jsonutilszip化は右クリックでもよいですが、面倒なのでコマンドを用意しておきます。[ファイル名]zip化できたら、S3に適当なフォルダを作成してアップロードします。CLIをインストールすればコマンドでアップロード可能です。s3://{バケット名}/ローカルでインストールしたモジュールの反映方法node_modulesフォルダをzipファイルに一緒に入れることで、インストールが必要なモジュールを利用できます。S3からLambdaへアップロードS3のURLをメモしておきます。マネジメントコンソールのLambda関数管理画面に戻ります。S3の場所」とし、URLを指定します。これでソースコードをLambdaに設定するができました。「設定」タブから環境変数を設定します。Lambda実行テストテストタブからテストを実行すると、ログを確認することができます。欲しい値(関数の返り値)を取得することができました!!完了です。つまづいたところここまで来るのにつまづいた3点の注意喚起です。外部モジュールの入れ方がわからないイベントハンドラが無い環境変数を間違えた外部モジュールが無い解決策:圧縮ファイルにnode_modulesフォルダを入れる圧縮ファイルにnode_modulesフォルダを入れない場合、外部モジュール(ここではaxiosが存在しないエラーが出ました。]}イベントハンドラが無いLambdaは、アップロードされたソースコードの中からhandlerという関数を探して実行してくれます。正しい名前で、関数としてエクスポートしないとエラーが発生します。解決策:index.jsで関数を定義し、handlerという名前でエクスポートする。indexこの定義が無いと以下のようなエラーが出ます。]}環境変数の大文字小文字まちがい環境変数の大文字小文字を間違いって入れておりました。解決策:環境変数を大文字小文字まで正しく入れる。APIの認証キーを取得できなかったため、axiosで「認証エラー」が出ました。}}まとめソースコードをS3にアップロードしてLambda関数を実行する方法を試しました。今のままでは手動実行しかできないので、Lambda関数を実行するトリガーを設定する必要があります。トリガーにも様々ありますが、EventBridgeによる定期実行手順を行ないます。【AWS】Lambdaで作成したサーバレスな処理を、定期的に起動させる方法を解説します。メジャーな方法としてEventBridge+Lambdaを使います。事業会社のシステム部門で働きはじめて5年目の会社員。システム企画/要件定義/システムアーキテクチャ等。Twitter→@bun_sugi過去の記事についてはてなブログに掲載の記事(主にプログラミングメモ)についてはこちらに掲載しております。エンジニアを目指す日常ブログお問い合わせ|プライバシーポリシ。