【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のポリシーが付与されていないと、このエラーが発生するようだ。