AWS Glue 実践入門:AWS Glue Data Catalogへのアップグレード方法

AWS GlueがGAになってから、Amazon Athena や AWS Glueの画面の先頭に、Upgrede to AWS Glue Data Catalog というメッセージがトップに表示されていると思います。本日、AWS Glue Data Catalogのアップグレードについて解説します。

Amazon Athena または Redshift Spectrum から AWS Glueによって作成されたテーブルとパーティションをクエリーするには、AWS Glue Data Catalogにアップグレードする必要があります。このアップグレード作業はウィザードを用いて、一度の実行するだけで済みます。

尚、執筆時点では東京リージョン(ap-north-east-1)では、Glueがサービス開始していませんので、バージニア(us-east-1)、オハイオ(us-east-2)、オレゴン(us-west-2)のいずれかのリージョンでご利用ください。

Data Catalog の解説

Data Catalogとは、データベース、テーブル、パーティションに関する情報(メタデータ)を保存するものです。Amazon Athena や Amazon Redshift Spectrum ではこのメタデータを Apache Hive 互換のメタストアに保存します。よって、「Apache Hive メタストア」と呼ばれます。Apache Hive メタストアはHive、Presto、Spark、Pigで利用される Hadoopの世界では標準的なメタストアです。

AWS環境では、AWSアカウントかつリージョン毎にApache Hive メタストアが提供されています。アップグレード前でも、Amazon AthenaのテーブルをAmazon Redshift Spectrum、Amazon EMRから参照できるのはそのような理由です。

アップグレードの目的

今後、リージョン内のAmazon Athena、Amazon Redshift Spectrum、Amazon EMR、AWS Glueは、共通の Apache Hive メタストアにメタ情報を保存します。そうすることで、AWS GlueでETLしたデータをシームレスにAmazon Athena、Amazon Redshift Spectrum、Amazon EMRからクエリーできるようになります。

20170919-aws-glue-architecture

つまり、今回のアップグレードは、これまでAmazon Athena、Amazon Redshift Spectrum、Amazon EMR の用途に利用してきたApache Hive メタストアをAWS Glueでも利用できるように変換するという目的のアップグレードになります。

アップグレードの手順

Data Catalog のアップグレードは、AWS Glueの画面に表示される以下のAthena Consoleというリンクをクリックすると、アップグレード用のウィザードが画面に遷移します。

20170919-aws-glue-data-catalog-upgrade1

そして、次の Upgrade to AWS Glue Data Catalog という画面の一番下のUpgradeボタンを押すと完了です。

20170919-aws-glue-data-catalog-upgrade2

補足:アップグレードによる変更点

Glueを利用したいだけの方は、読み飛ばして構いません。ウィザードが自動でアップグレードした変更点について、主にインフラエンジニア向けに解説します。アップグレードは、以下の3つのステップからなります。

  • Step 1a: Update user-managed IAM policies
  • Step 1b: Allow the upgrade action
  • Upgrade the Catalog

Step 1a: Update user-managed IAM policies

このステップでは、ユーザーが管理しているIAMポリシーをアップデートします。ユーザーが管理しているIAMポリシーにAWS Glueへのアクセスを許可する権限を追加します。標示された変更前後のポリシーは以下のとおりです。実際には、管理ポリシー AmazonAthenaAullAccess が Version 1 から Version 3 の内容に更新されることのようです。

  • 変更前
{
  "Version": "2012-10-17",
  "Statement": [
    {
    "Effect": "Allow",
    "Action": [
       "athena:*",
     ],
    "Resource": [
        "*"
     ]
    }, 
    {
    "Effect": "Allow",
    "Action": [
       "s3:GetBucketLocation",
       "s3:GetObject",
       "s3:ListBucket",
       "s3:ListBucketMultipartUploads",
       "s3:ListMultipartUploadParts",
       "s3:AbortMultipartUpload",
       "s3:CreateBucket",
       "s3:PutObject",
     ],
    "Resource": [
        "arn:aws:s3:::aws-athena-query-results-*"
     ]
    }, 
  ]
}
  • 変更後
{
  "Version": "2012-10-17",
  "Statement": [
    {
    "Effect": "Allow",
    "Action": [
       "athena:*",
     ],
    "Resource": [
        "*"
     ]
    }, 
    {
    "Effect": "Allow",
    "Action": [
       "s3:GetBucketLocation",
       "s3:GetObject",
       "s3:ListBucket",
       "s3:ListBucketMultipartUploads",
       "s3:ListMultipartUploadParts",
       "s3:AbortMultipartUpload",
       "s3:CreateBucket",
       "s3:PutObject",
     ],
    "Resource": [
        "arn:aws:s3:::aws-athena-query-results-*"
     ]
    }, 
    {
    "Effect": "Allow",
    "Action": [
       "glue:CreateDatabase",
       "glue:DeleteDatabase",
       "glue:GetDatabase",
       "glue:GetDatabases",
       "glue:UpdateDatabase",
       "glue:CreateTable",
       "glue:DeleteTable",
       "glue:BatchDeleteTable",
       "glue:UpdateTable",
       "glue:GetTable",
       "glue:GetTables",
       "glue:BatchCreatePartition",
       "glue:CreatePartition",
       "glue:DeletePartition",
       "glue:BatchDeletePartition",
       "glue:UpdatePartition",
       "glue:GetPartition",
       "glue:GetPartitions",
       "glue:BatchGetPartition",
     ],
    "Resource": [
        "*"
     ]
    } 
  ]
}

Step 1b: Allow the upgrade action

次のポリシーは、Glue Data Catalogにアップグレードする権限を与えています。 管理ポリシーを使用する場合でも、このポリシーを追加する必要があります。 この操作が許可されているIAMユーザーは、すべてのユーザーに影響を与えるAWSアカウントのカタログ全体をアップグレードできます。

{
  "Version": "2012-10-17",
  "Statement": [ 
    {
      "Effect": "Allow",
      "Action": [ 
        "glue:ImportCatalogToGlue"
      ],
      "Resource": [ "*" ]
    }
  ]
}

Upgrade the Catalog

これまでのポリシーの更新を行ったら、アップグレードを開始できます。 ほんの数分しかかかりません。 問題が発生した場合やアップグレードをロールバックしたい場合は、サポートケースを開いてください。

最後に

これで AWS Glueが使える準備が整いました。更新前後の Anamzon Athenaのサンプルテーブル(sampledb.elb_logs)のテーブル定義を参照しても特に変更はありませんので、Anamzon Athena や Amazon Redshift Spectrum の動作には影響ありません。このData Cataogのアップデートがもたらす、AWS環境におけるビックデータ環境の今後についても理解できることを期待しています。