Amazon AppFlowでSlackのメッセージをS3に保存する

2020.04.24

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、データアナリティクス事業本部プリセールススペシャリストの兼本です。

コードを書かずにSaaSアプリケーションとのデータ連携を実現する「AWS AppFlow」がリリースされたので、早速、Slackとの連携を試してみました。

フローを作成する

AWSマネジメントコンソールのAmazon AppFlowランディングページで、フローを新規作成します。

最初の手順ではフローの名称、データ暗号化のカスタマイズ、タグの設定を行えます。
なお、Amazon AppFlow では、アクセストークン、シークレットキー、および転送中のデータと保管中のデータが暗号化されています。デフォルトでは、フロー作成アカウントの AWS 管理キーで暗号化され、別のキーを使用したい場合のみ、暗号化設定のカスタマイズが必要となります。

次にデータ送信元を選択します。連携可能なサービスの一覧からSlackを選択します。

続いてSlackへの接続の詳細を設定します。

ここでは、Slackへの接続に必要なクライアントID、クライアントシークレット、ワークスペース名を指定するのですが、これらの設定が行われていない場合、ダイアログに記載されたSlackの管理画面で必要な設定を行います。
最後の「接続」には、任意の接続名を指定することができます。

Slack側の設定

フローを作成するにあたっては、対向サービスとなるSlack側でもいくつかの準備が必要になりますので、その点にも触れておきます。

フローの作成画面でも記載のある通り、Slackのアプリ管理ページにアクセスして、「Basic Information>App Credentials」にあるClient IDとClient Secretの2つの項目をSlackに接続するための情報として入力します。(アプリを作成していない場合は新規作成が必要です)

今回はSlackのメッセージを取得したいので、アプリの設定にある「Features>OAuth Tokens & Redirect URLs」ページの「OAuth Scope」の指定でchannels:historyを許可しておきます。

それと私は少しハマったのですが、このページでAmazon AppFlowへのリダイレクトURLを指定することを忘れないようにしてください。通常は、

https://[aws region].console.aws.amazon.com/appflow/oauth

のようになります。

Slack側の設定が完了したら、フロー作成画面に戻って接続設定を完了しましょう。以下のような画面が表示されたら「許可する」を押下することで、Amazon AppFlowからSlackへのアクセスができるようになります。

送信元(Slack)の詳細設定と送信先(S3)の設定

Slackの接続を指定すると、Slackオブジェクトの選択ができるようになります。Conversationsを選択(2020年4月24日現在、選択肢はこれだけ)して、ターゲットとなるSlackチャネルを選択します。

送信先にはAmazon S3を使います。こちらはデータ送信先として使用するバケット名とフォルダパスを入力します。

フロートリガーの設定

フローを実行するタイミング(トリガー)には、以下の3つが用意されています。 - オンデマンドで実行...フローはトリガーするとすぐに実行されます。

  • スケジュール通りにフローを実行...フローは指定された時間に実行されます。

  • イベントでフローを実行...イベントが発生すると、フローが実行されます。

    今回作成したフローではイベント実行はグレーアウトされて選択できませんでした

設定が完了したら、「次へ」を押下してデータフィールドのマッピング画面に遷移します。

データフィールドをマッピング

このステップでは、送信元のフィールドを選択して、送信先のフィールドにマッピングすることができます。
フィールドを1対1でマッピングするだけでなく、式を使って複数のフィールドをひとつのフィールドにマッピングすることも可能です。

オプションとして、妥当性確認の設定ができ、数値フィールドの値が、0の場合、nullの場合、テキストを含む場合を条件として、フローを終了するかレコードを無視することができます。

フィルターの追加

次の画面では、フィルタを追加することができます。今回のフローではDate型のデータを含む「Timestamp」のみが選択可能になっており、日付を基準としてそれ以降、それ以前、範囲が指定できました。

「次へ」を押下すると設定の最終確認ページが表示されますので、これで問題なければ「フローを作成」を押下してフローを作成します。

フローの実行

フローの作成が完了したら、フロー右上にある「フローの実行」ボタンを押下することでフローを実行できます。

フローの実行が正常に終了したらS3バケットを確認します。ファイルが生成されていることが確認できました。(何度かテストしているのでファイルが複数あります)

ファイルの内容を確認すると、以下のようなJSON形式のデータが格納されていました。

ところで、このデータ、私が所属するデータアナリティクス事業本部の勤怠を報告するチャンネルのデータでして、JSONデータをAlteryxを使って紐解くとこんな感じになります。

まとめ

というわけで、Amazon AppFlowを使って、Slackのデータをコーディングなしに取り出し、Amazon S3に格納、ついでに格納されたJSONデータをAlteryxで解析してみました。
Amazon Appflowはまだリリースされたばかりで発展途上な印象ですが、可能性無限大だと思っています。今後のアップデートに期待大ですね。

以上、最後まで読んでいただきありがとうございました。