ヤマムギ

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認定 デベロッパーアソシエイト [DVA-C02対応] 」という本を書きました。

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

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

 - AWS, Python , , , ,

ad

ad

  関連記事

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

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

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

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

Amazon FSx for Lustreのユーザーガイド入門演習

ファイルシステムの作成 FSx for Lustreを選択しました。 容量やスル …

AWS 認定クラウドプラクティショナーのサンプル問題

AWS認定クラウドプラクティショナのサンプル問題2018年9月25日現在で、英語 …

AWS Secrets Manager交代ユーザーローテーション

AWS Secrets Managerの交代ユーザーローテーションを確認してみま …

AWSアカウントrootユーザーのメールアドレスを変更

昔、うっかり会社の個人メールアドレスで作ってしまったAWSアカウントがあるのでメ …

RDSスナップショットのS3エクスポート結果確認

RDSのスナップショットをS3へエクスポートが日本語マネジメントコンソールでもで …

CloudTrailのログファイルの整合性検証をAWS CLIで実行しました

CloudTrailのログファイルの検証を「有効」にしました。 上記のようなCl …

AWS CodeBuildのチュートリアルをやってみました

こちらユーザーガイドの最初の方にあるチュートリアルです。 コンソールを使用した …

AWS Lambdaで Unable to import module エラーが発生したときは

そもそも、Pycharmのナビゲーションペインでディレクトリごとドラッグ&amp …