これはなに?
Qiitaのトレンドを取得するLambda関数を作成したのでそのメモを兼ねた記事です。
TypescriptでLambdaを書いています。
開発環境
バックバックエンド
TypeScript@4.9.5
- @types/node
- axios
- nodemailer
クラウド
AWS
- Lambda
- Eventbrige
何がしたかったのか?
- 朝通勤する時間など隙間時間で技術記事に触れる習慣を作りたいと思った。
- TypeScriptをバックエンドで使って練習したい。
- Lambdaを使った開発をやってみたかった。
作成した機能の概要
TypeScript側
Qiitaトレンドを取得できるAPI(リンク先の記事で紹介されているもの)からJSONを取得し、記事のタイトルとURLを取得する。メールで送信するために成形する。nodemailerを利用してgmailで送信する。
Lambda側
TypeScript側で作成した関数等をzip化してLambdaにデプロイ。
EventBridgeをトリガーにして、指定した時間にLambda関数を実行するように設定。
デプロイについて
#!/bin/sh
# distフォルダ
rm -rf ./dist
# TypeScriptビルド
tsc -p tsconfig.json
# package.jsonをdistにコピー
cp -f ./package.json ./yarn.lock ./dist
cd dist
# packageのインストール
yarn install --production
# uploadするためにzip化
# zip -r ./lambda.zip ./
powershell -c Compress-Archive -Path "./*" -DestinationPath lambda.zip
# zipデータをlambdaにアップロード
aws lambda update-function-code \
--function-name qiitatrend \
--zip-file fileb://lambda.zip
シェルで実行します。
aws-cliを事前にインストールし、aws configureコマンドでアクセスキーやデプロイ先のリージョンを指定しておく必要があります。
GitHubリポジトリ
https://github.com/ryosuke-horie/functions-for-self-learning-
改善点などがあればぜひコメントなどをお願いします。
この関数を作ったことでQiita記事を読む習慣は身についたのか?
後日記載します。
参考文献
lambdaにTypeScriptをデプロイする手順(zip) - Qiita
zip形式でのデプロイ方法について解説された記事。今回は最もシンプルな形で動くものを作ることが優先だったのこちらを参考にしました。
【AWS】Lambdaでtime out after 3.00 secondsが出たときの対処法 - Qiita
デプロイした後実行した際にtime out after 3.03 secondとあったため確認。lambdaの設定でタイムアウトする時間を変更可能
AWS Lambda 環境変数の使用 - AWS Lambda
メールアドレスなどコードに書いておきたくなかったので環境変数を利用する方法で実装。こちらもlambdaの設定>環境変数から確認可能
Netlify Functions を使って Qiita のトレンド API を非公式で作ってみた - Qiita
Qiitaトレンドを取得するためのAPIを公開されていたので利用させていただきました。