ヤマムギ

growing hard days.

*

Feedlyのフィードを自動でSlackへ投稿する(AWS Lambda , Amazon DynamoDB)

   

やりたいこと

Feedlyで共有したいフィードに特定のタグを付けます。
特定のタグがついたフィードは自動的にSlackへ投稿されます。

実現方法

FeedlyのAPIを使ってダイレクトでSlackへ投稿すればいいのですが、単純にそれをすると投稿が重複する可能性があるので、間にAmazon DynamoDBを挟みました。

(1) 5分ごとにAmazon CloudWatchスケジュールで実行されるLambdaが過去30分にFeedlyで特定のタグがつけられたフィードを取得して、Amazon DynamoDBに格納します。

(2) Amazon DynamoDBのストリームにより実行されたLambdaがレコードを受け取って、Slackへ投稿します。

パーティションキーをFeedlyのfeed_idにすることで同じフィードがDynamoDBに格納されないようにしました。

この方法だと、RSSリーダーを変更するときや増やすときは、(1)の機能だけ変更するか追加するかでいいので変化を考えやすいと思いました。

動作

例えばスマートフォンアプリのFeedlyでフィードに特定のタグを付けると、

5分間隔ぐらいでSlackに投稿されます。

ソースコード

  • Python 3.6.1

ソースコードはGitHubにあります。

2つのディレクトリにLambda_Functionをそれぞれ入れているので、ご利用される場合はそれぞれでzipを作成して、Lambda関数を設定してください。

feedly_to_dynamo

Feedlyで特定のタグがつけられたフィードを取得して、Amazon DynamoDBに格納します。

環境変数

  • FEEDLY_URL : FeedlyのAPI URLです。
  • FEEDLY_TOKEN : Feedlyのトークンです。
  • DYNAMO_TABLE : Amazon Dynamodbのテーブル名
  • INTERVAL_MINUTE : 何分前に登録されたフィードから取得するか、指定しない場合は7日前から取得します。
  • FEED_COUNT : 取得するフィードの最大数を指定。指定しない場合は100。
  • ERROR_SLACK_URL : エラー発生時に通知したいSlackのWebhook Incoming URL
  • ERROR_SLACK_CHANNEL : エラー発生時に通知したいSlackのチャンネル
  • LOG_LEVEL : ログレベル。指定しない場合はERROR。
FeedlyのAPI URLの例

https://cloud.feedly.com/v3/streams/contents?streamId=user/userid/tag/tagname
詳しくはFeedlyのAPIのドキュメントを見てください。

Feedlyのトークン

FeedlyのAPIのドキュメント Developer Access Token内のStart hereリンクから取得してください。

コード抜粋 Feed取得

コード抜粋 DynamoDB格納

dynamo_to_slack

Amazon DynamoDBのストリームにより実行されたLambdaがレコードを受け取って、Slackへ投稿します。

環境変数

  • SLACK_URL : 投稿先のSLACKのWebhook Incoming URL
  • SLACK_CHANNEL : 投稿先のSlackのチャンネル
  • ERROR_SLACK_URL : エラー発生時に通知したいSlackのWebhook Incoming URL
  • ERROR_SLACK_CHANNEL : エラー発生時に通知したいSlackのチャンネル
  • LOG_LEVEL : ログレベル。指定しない場合はERROR。

コード抜粋

DynamoDBの設定

  • パーティションキー : id

トリガー

トリガーにLambda関数を指定します。

参考 DynamoDB ストリーム イベント


最後までお読みいただきましてありがとうございました!

「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト - プロフェッショナル 改訂第2版」という本を書きました。

「AWS認定資格試験テキスト AWS認定クラウドプラクティショナー 改訂第3版」という本を書きました。

「AWS認定資格試験テキスト AWS認定AIプラクティショナー」という本を書きました。

「ポケットスタディ AWS認定 デベロッパーアソシエイト [DVA-C02対応] 」という本を書きました。

「要点整理から攻略するAWS認定ソリューションアーキテクト-アソシエイト」という本を書きました。

「AWSではじめるLinux入門ガイド」という本を書きました。

 - AWS, Python , , , ,

  関連記事

VPC内のLambdaからVPCエンドポイント経由でSecrets Managerを使う

InternetGatewayのないVPCでMySQLに対して一日数回のレポーテ …

AWS DeepLensセットアップの儀

AWS DeepLensのセットアップを開始します。 AWS DeepLensを …

Redmine REST APIを操作するpython_redmineを試してみた

Redmine のGUIの登録が面倒なのでコマンドで登録、更新、時間の記録が出来 …

AWS EC2 Amazon Linuxにmauticをインストールする(Sendgrid, Nginx, MySQL on RDS)

mauticをAmazon LinuxとNginx,MySQL on RDSにイ …

cfn-signalの認証とネットワーク

AWS CloudFormationヘルパースクリプトのcfn-signalがC …

AWS Transit GatewayをResource Access Managerで他アカウントと共有

AWS Transit Gatewayを他アカウントに共有しました。 画面画像で …

CloudFrontのVPCオリジンを使用してApplication Load Balancerをプライベートサブネットで起動する

このブログのApplication Load Balancerはパブリックサブネ …

AWS WAFをSIEM on Amazon OpenSearch Serviceで可視化

SIEM on Amazon OpenSearch Serviceを構築の環境に …

Former2で既存リソースのCloudFormationテンプレート出力を試してみた

JAWS DAYS 2020の資料確認のお手伝いを少ししてまして、「ゼロからはじ …

ALBの重み付けルーティングでカナリアリリースをしてみました

当ブログのAMIの更新と、ALBターゲットグループのヘルスチェックを変更したかっ …