ヤマムギ

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認定クラウドプラクティショナー 改訂第2版」という本を書きました。

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

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

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

 - AWS, Python , , , ,

ad

ad

  関連記事

Amazon InspectorによるLambda関数の脆弱性検出結果を確認しました

AWS re:Invent 2022期間内に発表されましたAmazon Insp …

ブログの画像を別アカウントのS3に移動するためにIAMロールでクロスアカウントアクセス

ずっと先延ばしにしていたのですが、このブログの画像はEC2から直接配信しています …

X-Ray SDK for Python でライブラリへのパッチ適用

boto3でのAWS呼び出しとrequestsでの外部API呼び出しにパッチ適用 …

EC2インスタンスWindowsでセッションマネージャーを使う

WindowsのEC2インスタンスでセッションマネージャーを使ってみたことがない …

AWS CLIを使用せずにCodeCommitへhttpsで接続する

AWS CLIやアクセスキーID、シークレットアクセスキーなどを開発環境にセット …

AWS Trusted Advisorの2023/11/17発表のAPI

2023/11/17に発表されたAWS Trusted Advisor の新しい …

GoogleフォームからAPI Gatewayで作成したREST APIにPOSTリクエストする

「API GatewayからLambdaを介さずにSNSトピックへ送信」の続きで …

JAWS-UG関西「AI で人を笑わせてみよう!ハンズオン」に参加しました

AI で人を笑わせてみよう!ハンズオン 灼熱の7月最終日にJAWS-UG関西のオ …

feedlyでタグ付けした記事を自動でメール配信する

feedlyを使っていて、良記事や知っておいて欲しい記事とかを部門とかチームとか …

Systems Manager パッチマネージャでベースラインを作成して適用する

ベースラインの作成 Systems Managerのパッチマネージャーでパッチベ …