はじめに
この記事は、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 KinesisやAmazon 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.json
のAuthRoleName
とUnauthRoleName
にIAMロール名が記載されています。IAMマネジメントコンソールにアクセスし、このIAMロールに以下のポリシーを追加します。
参考 : Amplify Docs : Storing analytics data
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"firehose:PutRecord",
"firehose:PutRecordBatch"
],
"Resource": "デリバリーストリームARN"
}
]
}
許可するアクションはfirehose:PutRecord
とfirehose: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の導入は成功です。
以上、ありがとうございました。