【AWS Athena】HIVE_CANNOT_OPEN_SPLITが発生する
課題
Glueでparquet.snappyにしたファイルを、Athenaで検索している。 これを定期実行するために、Lambdaを使いたい。 しかし、LambdaからAthenaにクエリを投げると、以下のエラーが発生する。
Your query has the following errors:HIVE_CANNOT_OPEN_SPLIT: Error opening Hive split s3://BUCKET_NAME/part-00000-feda4fa5-d862-48ba-88ad-3a468e234a27-c000.snappy.parquet (offset=0, length=7791): com.amazonaws.services.s3.model.AmazonS3Exception: Forbidden (Service: Amazon S3; Status Code:403; Error Code: 403 Forbidden; Request ID: 028A0DA47697C2D7;(以下略)
これがエラーコードで検索をかけても引っかからない。
気がかりな点は、rootで実行するとこのエラーは発生しない点だ。つまり、IAMポリシーが原因である可能性が高い。 なお、このエラーが最初に発生した際のIAMポリシーは以下のように設定していた。
Policies: - Version: '2012-10-17' Statement: - Effect: Allow Action: - s3:PutObject - s3:GetBucketLocation - s3:ListBucket - s3:ListBucketMultipartUploads - s3:ListMultipartUploadParts - s3:AbortMultipartUpload Resource: "*" - Effect: Allow Action: - logs:CreateLogGroup - logs:CreateLogStream - logs:PutLogEvents Resource: "*" - Effect: Allow Action: - "athena:GetWorkGroup" - "athena:StartQueryExecution" - "athena:GetQueryResultsStream" - "athena:CancelQueryExecution" - "athena:StopQueryExecution" - "athena:GetQueryExecution" - "athena:GetQueryResults" - "athena:BatchGetNamedQuery" - "athena:GetNamedQuery" - "athena:ListTagsForResource" - "athena:BatchGetQueryExecution" Resource: "*" - Effect: Allow Action: - glue:GetTable - glue:GetDatabase - glue:GetPartition - glue:GetPartitions - glue:BatchGetPartition Resource: "*"
結論
試行錯誤した結果、glue:GetTablesのポリシーが付与されていないと、このエラーが発生するようだ。