年中アイス

いろいろつらつら

CloudWatch LogsからKinesis Firehoseに送る時にはまったエラー

ECSコンテナのログをCloudWatch Logsに出力しており、そこからS3に保存しようとした時に、Kinesis Firehoseを使って行える例があったので試してみました。その時にしょうもないミスではまったのでメモです。

この例をもとに試していましたが、Firehose --(delivery stream)-> S3へ転送の設定が終わった後に、12のCloudWatchLogsのSubscription filterを使って、Firehoseへ流す設定を追加しようとしたら以下のエラーが出ました。

An error occurred (InvalidParameterException) when calling the PutSubscriptionFilter operation:
Could not deliver test message to specified Firehose stream.
Check if the given Firehose stream is in ACTIVE state.

そのまま読むと、「テストメッセージの転送に失敗しました。Firehose streamがアクティブになっているか確認してください」です。しかし、streamはすでにActiveステータスになっており、Firehoseにあるテストメッセージの送信を行うと、ちゃんとS3にテストデータが出力されていました。*1

状況的にはSubscription filter設定の何かが悪い、おそらく権限なのでIAMだろうと考えました。そしてよくみていくと、 10. Create a permissions policy to ...で設定するIAM Policyでregionを書き換えるところがap-northeast1(-忘れ)になっており、それを修正したら無事動作しました。

しょうもないミスなんですが、このエラーメッセージからは読み取りにくかったです。streamがActiveじゃないのが結構あるエラーなのか、確認してみてねがミスリードを誘うことに。

参考

*1:Firehose側はAWSコンソールでテストデータの送信ができます。バッファリングがデフォルトで5分なので、すぐ出てこない点に注意が必要です。