めんどくさいことは何でも自動化!n8n.ioで不意を付かれたアクションまで自動化しよう!
システム開発部の前野です。いつもウェブネーションのコーポレートサイトへご訪問頂きありがとうございます。
みなさんChatGPT活用していますか?うちの社内はCopilot派とGemini派に分かれるようです。AIの高度化により一昔はRPAと呼ばれたタスク自動化も少しずつ進化を遂げています。例えばWindowsでCopilotの搭載により●●のサイトをクロールして、結果をCSVにまとめてみたいな複雑なタスクもPower Automate Desktopでは実現できるようになりました。
しかしながら、人が何か指示を与える(トリガー)がなければ、実現できないのも現実です。そこで今回紹介したいのがn8n.ioを組み合わせたワークフローの自動化です。
n8n.ioはノーコードによるワークフローの自動化ツールで、近いイメージとしてIFTTTが挙げられます。
ワークフローの自動化で実現できることとして、以下の例が挙げられます。
1. SNSで自社製品のキーワードを取り上げてくれたら(トリガー)
2. キーワードに対するリアクションを指数化(クレンジング)
3. 良い反応であればいいね!をする、フォローする(アクション)
・・・と言ったことが可能になります。
AWSだとこういう機能が満載になっていて、例えばコンソールからポチポチ操作できるケースとしてはRDS(Aurora)だとオートスケール機能がこのような仕組みです。
実際に使うためには、更新系と参照系を負荷分散するため、PostgreSQLの場合、pgpool-IIとの組み合わせをアプリケーションとDBの間に挟む工夫は必要になりますが、オートスケールを設定すると裏では以下の様なことが行われます。
1. Cloudwatchでモニタリングし、CPU負荷 or DB接続数が一定値を超えたら(トリガー)
2. 連続して●●分閾値を超過した場合(クレンジング)
3. リードレプリカを1台追加する(アクション)
また逆のケース(スケールダウン)も同様で、
1. Cloudwatchでモニタリングし、CPU負荷 or DB接続数が一定値を下回ったら(トリガー)
2. 連続して●●分閾値を超過した場合(クレンジング)
3. 追加したリードレプリカを削除する(アクション)
うまく活用することで、更新系1台+参照系N台の組み合わせで運用し、●●砲による不意を突いた大量リクエストに対して参照系を増やしてリクエストをカバーすると共に、閾値を下回ったらサーバーを削除してコストとパフォーマンスを両立することが可能です。
もっとも(AZを跨ぐ場合、0.01ドル/GBのトラフィック料金がかかるので)どのAZに配置するかとか、RIと組み合わせて工夫点を挙げるとキリが無いですが、予測できないワークアウトに対してのアプローチができます。
n8n.ioを立ち上げてみる
前置きが長くなりましたが、n8n.ioはオープンソースで提供されていますので、自前でサービスを立ち上げることが可能です。アプリケーションはnode.jsで動いており、DBはPostgreSQLかMySQLを選ぶことができます。
docker-compose.ymlが最新のGitから削除されていたので、あまり良いサンプルが手元に残ってないですが、以下のような形で動かすことができます。
docker run -it –rm \
(参考)https://docs.n8n.io/hosting/installation/docker/#using-alternate-databases
–name n8n \
-p 5678:5678 \
-e GENERIC_TIMEZONE=”Asia/Tokyo” \
-e TZ=”Asia/Tokyo” \
-e DB_TYPE=postgresdb \
-e DB_POSTGRESDB_DATABASE=<POSTGRES_DATABASE> \
-e DB_POSTGRESDB_HOST=<POSTGRES_HOST> \
-e DB_POSTGRESDB_PORT=<POSTGRES_PORT> \
-e DB_POSTGRESDB_USER=<POSTGRES_USER> \
-e DB_POSTGRESDB_SCHEMA=<POSTGRES_SCHEMA> \
-e DB_POSTGRESDB_PASSWORD=<POSTGRES_PASSWORD> \
-v n8n_data:/home/node/.n8n \
docker.n8n.io/n8nio/n8n
実際に動いているサンプル
移行してから最近は使用していないのですが、昔の名残で未だに連携は取っている実例をここでは紹介します。
弊社ではスキルタウンというeスポーツに特化した講師と生徒を繋げるマッチングサービスを運営していますが、銀行の利用はあまり多くなく、API連携を行っておらず、入金確認と反映は手作業となっています。
そこでいち早く入金情報を察知するために、以下のことを行っています。
1. Gmail APIを使って新着メールをチェック(トリガー)
2. APIで取得した新着メールの中に入金に関する文字列が含まれていた場合(クレンジング)
3. Webhookを使ってチャットワークに通知を送信(アクション)
上記はシンプルな方法ですが、n8nはノードという形で多数のサービスに連携する機能を持っており、組み合わせも自由です。
例えばサーバー障害のアラートでも、受け取った内容を解析し521エラー(CDNからエッジサーバー接続失敗)なのか、429エラー(接続多すぎによる拒否)なのかでクリティカルか否かの障害に応じてアクションを分岐したり、1つのノードから複数のデバイスに通知したりすることもできます。
webhookに対応していれば大体何でもできますが(DiscordやSlack、Chatwork、Mattermostとの連携など)、複雑なこととしては、以下のようなことも自動でできます。
1. Zoomでミーティング終了後にミーティング録画の保存を検知したらn8nへデータを送信
2. n8nが受信したらYoutubeにアップロードして限定公開保存
3. 2が完了したら、ミーティング終了をチャットツールに通知して共有
このような形でどんどん自動化が進んで何もしなくてもお金がもらえるより高度なことにチャレンジできる時代になるといいですね!