TerraformでWebスクレイピングbotをサーバーレス化してみた

こんにちは。ギークフィードの飛信隊(社長室)所属、ippei(@ippei2480)です。

今、IaC(Infrastructure as Code)が盛り上がっていますね。

複雑化していくクラウド環境構築において、コードで設定値を管理し、安全に変更を行うことができること、コードを使い回す再現性があることが大きなメリットです。

今後デファクトスタンダードになっていくかもしれないですね。

 

ギークフィードでも多分に漏れずIaCブームが来ており、ツールとしてTerraformを採用しています。

私の所属する社長室では、社内システムをAWS上で構築、運用管理していますが、それらをTerraformで管理するために日々四苦八苦勉強しています笑。

 

今回はまずは簡単なところからやってみようということで、以前ブログで紹介した「ギークブログ更新通知botスクリプト」をTerraformを使って、サーバー上のcronで動かす構成から、EventBridge + Lambdaのサーバーレス構成に移行したいと思います。

 

全体構成

 

EventBridgeのスケジュールイベントでLambdaを実行します。

LambdaはPythonプログラムを実行し、Beautiful Soupでギークブログのスクレイピングを行い、記事更新がある場合にはSlack通知を行います。

Terraformで管理するのはEventBridgeとLambdaがメインで、Lambda実行IAMロール等も含まれます。

 

 

ソースコード

 

今回作成したもののコードはこちらからダウンロードできます!

 

Terraformのコード、Lambdaのコードいずれも上記のGitHubにて公開しているのでそちらを参照ください。

 

ソースディレクトリ構成

 

 

ディレクトリ構成はとてもシンプルです。

下記のLambdaコードを格納するディレクトリ以外は、Terraformコードをモノリスで配置しています。

 

  • src/scraping_gf_blog
    • requirements.txt
    • scraping_gf_blog.py

 

 

ポイント解説

main.tf

 

実は何も書いていないです。

provider情報をbackend.tfに記述したからです。

tfstateのバックエンド情報をbackend.tfに、provider情報をmain.tfに記述するのがベストプラクティスなのかも・・・?

 

event_bridge.tf

 

EventBridgeのスケジュールイベントでは、

 

  • EventBridgeのルール本体
  • ルールとターゲットの紐付け
  • EventBridgeからLambdaを実行する権限を付与する

 

の3つのリソースを定義する必要があります。オプションも少ないので簡単です。

 

 

lambda.tf

 

AWS Lambda Terraform mooduleを使用しました。とても簡単にLambdaが作れてしまいます!

モジュールのReadmeを見て、必要なパラメーターのみ指定しています。

 

Lambdaの環境変数では通知先SlackチャンネルのWebHook URLを指定しています。

 

このモジュールのすごいところは、”soruce_path”で指定したLambdaディレクトリ内のソースコードを自動でS3へアップしてくれるところです。

ですので、terraform applyするだけでソースコードを含むインフラ構築ができてしまいます。

 

今回は基本的な実行権限を持つLambdaで良いので追加の権限設定を行っていませんが、実行IAMロールに追加がある場合はパラメーターで指定します。

 

 

scraping_gf_blog.py

 

以前のブログとの違いは、「WebHook URLをLambdaの環境変数指定に変更」と「Lambdaのハンドラーを追加」のみです。

 

 

おわりに

 

とてもシンプルな構成ですが初のTerraformプロジェクトをデプロイすることができました。

Terraformで驚いたことはデプロイの速度がとても早いことです。Cloudformation比較で数倍のスピードです。

ちょっとした変更をすぐに試して確認することができるため、開発をスムーズに進めることができます。

 

より複雑なアーキテクチャをデプロイしたらまたブログにしようと思います!

以上、ギークフィードの飛信隊(社長室)所属、ippei(@ippei2480)でした。

 

AWS、Terraformエンジニアを募集中!

 

ギークフィードではAWSエンジニアを募集しています。

AWS、IaCに興味がある方はぜひ一緒に働きましょう!

AWS・開発エンジニア募集

 

 

参考文献

How to invoke an AWS Lambda Function at scheduled intervals with AWS EventBridge Rule using Terraform

TerraformでLambdaのScheduled Eventを使う

EventBridge Lambda & Scheduled Events Example

この記事が気に入ったら
いいね ! しよう

Twitter で

【採用情報】一緒に働く仲間を募集しています

採用情報
ページトップへ