5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

AWS Amplify + Kinesis Firehoseでログ記録

Posted at

はじめに

この記事は、AWS AmplifyアプリケーションにKinesis Data Firehoseを導入するための手順を解説、共有するためのものです。

対象とする読者

  • AWSを使ったことがある
  • AmplifyのGetting startedを完了した
  • 大量のログを保存する必要がある

環境

この記事では、JavaScriptベースのWebアプリケーションを対象とします。モバイルアプリケーションは対象としません。

必須となるnpmモジュールは以下の通りです。

▼package.json

"dependencies": {
  "aws-amplify": "^3.3.6"
}

パッケージのバージョンを確認してください

この記事では2020/12/04時点でのAmplifyを前提にしています。Amplifyは活発に開発が行われているため、導入手順が大きく変更されている場合があります。記事を読む前に、お手元の環境を確認してください。

AmplifyとKinesis Firehoseの解説

まず、今回利用するサービスを解説します。

Amplify

Amplifyとは、モバイル/Webアプリケーションの開発に必要なAWSサービスのパッケージです。アプリケーションに必要となるAPI/ユーザー認証/ホスティング/ユーザー分析といった機能がひとまとめにされています。

Amplify Analytics

Amplify Analyticsはユーザー分析とプロモーションのためのサービスです。ユーザーの行動を分析したり、特定のユーザーに向けてプッシュメッセージを送信したりします。

このサービスは標準ではAWS Pinpointで構成されていますが、より高度なユーザー分析のためAmazon KinesisAmazon Kinesis Data Firehoseをプラグイン形式で追加できます。

Amazon Kinesis Data Firehose

Amazon Kinesis Data Firehoseはログ情報などリアルタイムで生成されるデータを記録、変換するサービスです。

今回はFirehoseをつかって、AmplifyアプリケーションのログをS3バケットに保存します。

Amplify + Kinesis Firehoseの導入手順

Kinesis Firehoseの具体的な導入手順を解説します。

S3バケットを作成する

ログを保存するS3バケットを作成します。

バケット名は自由です。後から役割がわかりやすい名前をつけましょう。

Kinesis Firehoseデータ配信ストリームを作成する

AWSマネジメントコンソールの画面で、Kinesisのコンソール画面を呼び出します。

Kinesisのコンソール画面で、データ配信ストリームを作成します。

以下のスクリーンショットの手順にしたがって、Kinesis Firehoseデータ配信ストリームを作成します。




Kinesisのコンソール画面に戻って、Firehoseストリームが作成されていれば成功です。

IAMロールにFirehoseへの書き込み許可を与える

Webアプリケーションにアクセスしたユーザーが、Firehoseストリームにログを書き込めるよう権限を追加します。

▼amplify/team-provider-info.json

{
  "dev": {
    "awscloudformation": {
      ...
      "AuthRoleName": "amplify-<アプリケーション名>-authRole",
      ...
      "UnauthRoleName": "amplify-<アプリケーション名>-unauthRole",
    }
  },

team-provider-info.jsonAuthRoleNameUnauthRoleNameにIAMロール名が記載されています。IAMマネジメントコンソールにアクセスし、このIAMロールに以下のポリシーを追加します。

参考 : Amplify Docs : Storing analytics data

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "firehose:PutRecord",
                "firehose:PutRecordBatch"
            ],
            "Resource": "デリバリーストリームARN"
        }
    ]
}

許可するアクションはfirehose:PutRecordfirehose:PutRecordBatchです。このアクションを許可すると、WebアプリケーションからFirehoseへ書き込めます。それ以外の読み込みや削除などのアクションは実行できません。

ResourceのデリバリーストリームIDは以下の画面で確認できます。

フロントエンドJavaScriptでコンポーネントを読み込み

JavaScript内で、AnalyticsとAWSKinesisFirehoseProviderモジュールを読み込みます。

▼src/app.js

import { Analytics, AWSKinesisFirehoseProvider } from 'aws-amplify';
Analytics.addPluggable(new AWSKinesisFirehoseProvider());

Amplify.recordを実行

最後に、JavaScriptからrecord関数を呼び出します。第2引数に'AWSKinesisFirehose'を指定すればログはFirehoseへ出力されます。

▼src/app.js

Analytics.record({
    data: { 
        //ログ情報
    },
    streamName: '<Firehoseのストリーム名>'
}, 'AWSKinesisFirehose');

デフォルトの設定では、300秒後にFirehoseからS3バケットへログが出力されます。S3バケット内にログファイルが生成されればKinesis Firehoseの導入は成功です。

以上、ありがとうございました。

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?