ablog

不器用で落着きのない技術者のメモ

QuickSight で S3 のデータを参照しようとすると「マニフェストファイルを有効な JSON として解析することはできません。」と怒られる

事象

  • QuickSight で [新しい分析]-[新しいデータセット] で S3 のデータを参照しようとすると「マニフェストファイルを有効な JSON として解析することはできません。」と怒られる

f:id:yohei-a:20200704194043p:plain

原因

  • ファイルが BOM付き UTF8 になっていたため。
$ file test.json
test.json: UTF-8 Unicode (with BOM) text, with CRLF line terminators

解決策

  • BOM を削除して再試行するとエラーが解消した。
$ nkf -Lw test.json > test_utf8.json
$ file test_utf8.json
test_utf8.json: ASCII text, with CRLF line terminators

補足

  • CSV はBOM付きでも問題なく参照できた。

参考

マニフェストファイルが有効であることを確認することを強くお勧めします。Amazon QuickSight によりファイルを解析できない場合、"We can't parse the manifest file as a valid JSON" または "We can't connect to the S3 bucket" のようなエラーが表示されます。

マニフェストファイルを確認するには

  1. マニフェストファイルを開きます。これは、Amazon S3 コンソール (https://console.aws.amazon.com/s3/) で行うことができます。マニフェストファイルに移動し、[Open] を選択します。
  2. マニフェストファイル内で指定されている URI または URL が、接続先のファイルを示していることを確認します。

;ファイルをアップロードするのではなく、マニフェストファイルへのリンクを使用する場合は、マニフェストファイルが正しく形成されていることを確認します。リンクには、.json という単語の後に追加のフレーズを含めるべきではありません。S3 コンソールの詳細で [リンク] の値を見ることで、S3 ファイルへの正しいリンクを得ることができます。

  1. https://jsonlint.com にあるような JSON バリデーターを使用して、マニフェストファイルの内容が有効であることを確認してください。
  2. バケットまたはファイルに対するアクセス権限を確認します。https://console.aws.amazon.com/s3/ で、Amazon S3 バケットに移動し、[アクセス権限] タブを選択して、適切なアクセス権限を追加します。アクセス権限のレベルが適切である (バケットに対するもの、またはファイルに対するもの) であることを確認します。
  • https:// ではなく s3:// プロトコルを使用している場合は、バケットを直接参照していることを確認します。たとえば、s3://s3-us-west-2.amazonaws.com/awsexamplebucket/myfile.csv ではなく s3://awsexamplebucket/myfile.csv を使用します。s3:// と s3-us-west-2.amazonaws.com を使用して Amazon S3 を二重に指定すると、エラーが発生します。マニフェストファイルと Amazon S3 への接続の詳細については、「Amazon S3マニフェストファイルでサポートされている形式」を参照してください。

さらに、Amazon S3 データセットが「Amazon S3 ファイルを使用したデータセットの作成」のステップに従って作成されたことを確認します。
Athena を使用して Amazon S3 に接続する場合、「Amazon Athena に接続できない」を参照してください。

Amazon S3 に接続できない - Amazon QuickSight