AWS Glue: 開発者ガイド
Copyright © 2018 Amazon Web Services, Inc. and/or its affiliates. All rights reserved.
Amazon's trademarks and trade dress may not be used in connection with any product or service that is not Amazon's, in any manner that is likely to cause confusion among customers, or in any manner that disparages or discredits Amazon. All other trademarks not owned by Amazon are the property of their respective owners, who may or may not be affiliated with, connected to, or sponsored by Amazon.
AWS Glue とは ... 1 AWS Glue が適している用途 ... 1 仕組み ... 3 独立で実行されるサーバーレス ETL ジョブ ... 3 概念 ... 4 AWS Glue の用語 ... 5 コンポーネント ... 6 AWS Glue コンソール ... 6 AWS Glue データカタログ ... 6 AWS Glue クローラおよび分類子 ... 7
AWS Glue ETL オペレーション ... 7
AWS Glue ジョブシステム ... 7
半構造化されたスキーマをリレーショナルスキーマに変換する ... 7
ご利用開始にあたって ... 9
AWS Glue の IAM アクセス許可のセットアップ ... 9
ステップ 1: AWS Glue サービスの IAM ポリシーを作成します。 ... 9
ステップ 2: AWS Glue 用の IAM ロールを作成する ... 13
ステップ 3: AWS Glue にアクセスする IAM ユーザーにポリシーをアタッチする ... 14
ステップ 4: ノートブックの IAM ポリシーを作成する ... 20 ステップ 5: ノートブック用の IAM ロールを作成する ... 23 VPC での DNS のセットアップ ... 24 データストアにアクセスするための環境のセットアップ ... 25 Amazon S3 における Amazon VPC エンドポイント ... 25 JDBC データストアに接続するための VPC の設定 ... 27 開発エンドポイント用の環境の設定 ... 29 開発エンドポイント用にネットワークを設定する ... 29 ノートブックサーバー用の Amazon EC2 の設定 ... 31 コンソールのワークフローの概要 ... 32 認証とアクセスコントロール ... 34 認証 ... 34 アクセスコントロール ... 35 アクセス管理の概要 ... 35 AWS Glue リソースおよびオペレーション ... 36 リソース所有権について ... 36 リソースへのアクセスの管理 ... 36 ポリシー要素の指定 : アクション、効果、プリンシパル ... 37 ポリシーでの条件の指定 ... 38 アイデンティティベースのポリシー (IAM ポリシー) を使用する ... 38 コンソールのアクセス許可 ... 39
AWS Glue での AWS 管理 (事前定義) ポリシー ... 39
AWS Glue API のアクセス権限リファレンス ... 40
関連トピック ... 49 AWS Glue データカタログ の入力 ... 50 AWS Glue データカタログ でテーブルを定義する ... 51 テーブルパーティション ... 51 コンソールでのテーブルの使用 ... 52 クローラを使用してテーブルを分類する ... 55 AWS Glue データカタログ でクローラを定義する ... 55 クロール可能なデータストア ... 55 包含パターンと除外パターンを使用する ... 56 クローラを実行するとどうなるか ... 59 Amazon S3 のフォルダはテーブルやパーティションとして作成されますか? ... 60
コンソールでのクローラの使用 ... 63 データカタログでのデータベースの定義 ... 65 コンソールでデータベースを使用する ... 65 クローラに分類子を追加する ... 66 分類子を使用するタイミング ... 66 カスタム分類子 ... 66 AWS Glue の組み込み分類子 ... 67 カスタム分類子の書き込み ... 69 コンソールでの分類子の操作 ... 79 データストアに接続を追加する ... 80 接続が使用されるタイミング ... 80 AWS Glue データカタログ で接続を定義する ... 80 VPC の JDBC データストアに接続する ... 81 コンソールでの接続の操作 ... 82 AWS CloudFormation テンプレートを使用したデータカタログの事前設定 ... 85 サンプルデータベース ... 86 サンプルのデータベース、テーブル、パーティション ... 87 サンプルの分類子 ... 90 サンプルの Amazon S3 クローラ ... 90 サンプルの接続 ... 92 サンプルの JDBC クローラ ... 93 Amazon S3 に書き込む Amazon S3 のサンプルジョブ ... 95 Amazon S3 に書き込む JDBC のサンプルジョブ ... 96 サンプルのオンデマンドトリガー ... 97 サンプルのスケジュールされたトリガー ... 98 サンプルの条件付きトリガー ... 98 サンプルの開発エンドポイント ... 99 ジョブを作成する ... 101 ワークフローの概要 ... 101 ジョブの追加 ... 102 ジョブプロパティの定義 ... 102 組み込み変換 ... 104 コンソールでのジョブ ... 105 スクリプトの編集 ... 108 スクリプトの定義 ... 108 コンソールのスクリプト ... 109 独自のカスタムスクリプトを提供する ... 110 ジョブのトリガー ... 111 スケジュールやイベントに基づいてジョブをトリガーする ... 111 トリガータイプを指定する ... 111 コンソールでのトリガーの使用 ... 112 開発エンドポイントの使用 ... 113 環境を管理する ... 113 開発エンドポイントを使用する ... 113 開発エンドポイントへのアクセス ... 114 チュートリアルの前提条件 ... 114 チュートリアル: ローカル Zeppelin ノートブック ... 118
チュートリアル: Amazon EC2 Zeppelin ノートブック ... 121
チュートリアル: REPL シェルの使用 ... 123 チュートリアル: PyCharm Professional を使用する ... 124 コンソールでの開発エンドポイント ... 131 実行とモニタリング ... 135 自動化ツール ... 136 ジョブとクローラの時間ベースのスケジュール ... 136 cron 式 ... 136 ジョブのブックマーク ... 138 CloudWatch イベント による自動化 ... 139
AWS Glue ログファイル ... 140 トラブルシューティング ... 142 AWS Glue トラブルシューティング情報の収集 ... 142 接続の問題のトラブルシューティング ... 142 エラーのトラブルシューティング ... 143 エラー: リソースを利用できません。 ... 143 エラー: VPC の subnetId に S3 エンドポイントまたは NAT ゲートウェイが見つかりませんでし た ... 143 エラー: 必要なセキュリティグループのインバウンドルール ... 143 エラー: 必要なセキュリティグループのアウトバウンドルール ... 144 エラー: カスタム DNS 解決の失敗 ... 144 エラー: ロールにロール継承アクセス権限を付与する必要がある AWS Glue サービスが渡されて いるため、ジョブの実行に失敗しました ... 144 エラー: DescribeVpcEndpoints アクションが許可されていません。VPC ID vpc-id を検証できま せん ... 144
エラー: DescribeRouteTables アクションが許可されていません。VPC id (vpc-id) の Subnet Id (subnet-id) を検証できません。 ... 145 エラー: ec2:DescribeSubnets の呼び出しに失敗しました ... 145 エラー: ec2:DescribeSecurityGroups の呼び出しに失敗しました ... 145 エラー: AZ のサブネットが見つかりませんでした ... 145 エラー: 複数のサブネットまたは AZ のある接続リストのジョブ実行の例外 ... 145 エラー: JDBC ターゲットへの書き込み時のジョブ実行の例外 ... 145 エラー: Amazon S3 タイムアウト ... 146 エラー: Amazon S3 アクセスが拒否されました ... 146 エラー: Amazon S3 アクセスキー ID が存在しません ... 146
エラー: s3a:// URI を使用して Amazon S3 にアクセスするときにジョブ実行が失敗します ... 147
エラー: ネットワークインターフェイスのプライベート DNS が見つかりません ... 148 エラー: 開発エンドポイントのプロビジョニングに失敗しました ... 148 エラー: ノートブックサーバー CREATE_FAILED ... 148 エラー: ローカルノートブックの起動に失敗する ... 149 エラー: ノートブック使用エラー ... 149 エラー: クローラの実行に失敗しました ... 149 エラー: Athena データカタログのアップグレード ... 149 AWS Glue の制限 ... 150 ETL プログラミング ... 151 一般情報 ... 151 特別なパラメータ ... 151 形式オプション ... 152 パーティションの管理 ... 154 入力ファイルのグループ化 ... 155 Python での ETL プログラミング ... 156 Python の使用 ... 156 拡張機能のリスト ... 157 変換のリスト ... 157 Python のセットアップ ... 157 API の呼び出し ... 158 Python ライブラリ ... 160 Python サンプル ... 161 PySpark 拡張機能 ... 175 PySpark 変換 ... 197 Scala での ETL プログラミング ... 225 Scala の使用 ... 230
データベース ... 275 テーブル ... 279 パーティション ... 291 接続 ... 299 ユーザー定義関数 ... 305 Athena カタログをインポートする ... 309 クローラおよび分類子 ... 311 分類子 ... 311 クローラ ... 317 スケジューラ ... 326 ETL スクリプトの自動生成 ... 328 — データ型 — ... 328 CodeGenNode ... 328 CodeGenNodeArg ... 329 CodeGenEdge ... 329 場所 ... 329 CatalogEntry ... 330 MappingEntry ... 330 — オペレーション — ... 330 CreateScript (create_script) ... 330 GetDataflowGraph (get_dataflow_graph) ... 331 GetMapping (get_mapping) ... 332 GetPlan (get_plan) ... 332 ジョブ API ... 333 ジョブ ... 333 ジョブ実行 ... 339 トリガ ... 345 DevEndpoint API ... 352 – データ型 – ... 352 DevEndpoint ... 352 DevEndpointCustomLibraries ... 353 – オペレーション – ... 354 CreateDevEndpoint (create_dev_endpoint) ... 354 UpdateDevEndpoint (update_dev_endpoint) ... 356 DeleteDevEndpoint (delete_dev_endpoint) ... 356 GetDevEndpoint (get_dev_endpoint) ... 357 GetDevEndpoints (get_dev_endpoints) ... 357 共通データ型 ... 358 タグ ... 358 DecimalNumber ... 358 ErrorDetail ... 358 PropertyPredicate ... 359 ResourceUri ... 359 文字列パターン ... 359 例外 ... 360 AccessDeniedException ... 360 AlreadyExistsException ... 360 ConcurrentModificationException ... 360 ConcurrentRunsExceededException ... 360 CrawlerNotRunningException ... 360 CrawlerRunningException ... 361 CrawlerStoppingException ... 361 EntityNotFoundException ... 361 IdempotentParameterMismatchException ... 361 InternalServiceException ... 361 InvalidExecutionEngineException ... 362 InvalidInputException ... 362
JobRunInTerminalStateException ... 362 JobRunInvalidStateTransitionException ... 363 JobRunNotInTerminalStateException ... 363 LateRunnerException ... 363 NoScheduleException ... 363 OperationTimeoutException ... 364 ResourceNumberLimitExceededException ... 364 SchedulerNotRunningException ... 364 SchedulerRunningException ... 364 SchedulerTransitioningException ... 364 UnrecognizedRunnerException ... 365 ValidationException ... 365 VersionMismatchException ... 365 ドキュメント履歴 ... 366 AWS の用語集 ... 367
AWS Glue とは
AWS Glue は、簡単でコスト効果の高い方法でデータの分類、消去、強化、およびさまざまなデータスト ア間を確実に移動することができる、完全マネージド型の ETL (抽出、変換、ロード) サービスです。AWS Glue は、AWS Glue データカタログ と呼ばれる中央メタデータリポジトリ、Python または Scala コード を自動的に生成する ETL エンジン、依存性の解決、ジョブのモニタリング、および再試行を処理する柔軟 なスケジューラで構成されています。AWS Glue はサーバーレスであるため、セットアップまたは管理す るインフラストラクチャはありません。
AWS Glue コンソールを使用してデータを検出、変換し、検索とクエリに使用できるようにする方法につ いて説明します。コンソールは、基盤となるサービスを呼び出し、データ変換に必要な作業を調整しま す。AWS Glue API オペレーション を使用して AWS Glue サービスとインターフェイスをとることもでき ます。使い慣れた開発環境を使用して Python または Scala Apache Spark ETL コードを編集、デバッグ、 およびテストします。 料金情報については、「 AWS Glue の料金」を参照してください。
AWS Glue が適している用途
AWS Glue を使用してデータウェアハウスを構築し、データを整理、最適化、検証、フォーマットできま す。AWS クラウドのデータを変換し データストアへ移動できます。また、通常のレポートおよび分析の ために、さまざまなソースからデータウェアハウスへデータをロードできます。データウェアハウスに保 存することで、ビジネスのさまざまな部分の情報を統合し、意思決定のためにデータの共通ソースを提供 します。 AWS Glue により、データウェアハウスの構築の際、多くのタスクが簡素化されます。 • データストアに関するメタデータを検出および分類し、一元的なカタログに保存します。クリックスト リームやプロセスログなどの半構造化データを処理できます。 • スケジュールされたクローラプログラムからのテーブル定義で AWS Glue データカタログ が入力されま す。クローラが分類子ロジックを呼び出して、データのスキーマ、形式、データ型を推論します。この メタデータはテーブルとして AWS Glue データカタログ に保存され、ETL ジョブの認証処理に使用され ます。 • ETL スクリプトを生成し、ソースからターゲットへデータを変換、フラット化、強化を行います。 • スキーマの変更を検出し、設定に基づき調整します。 • スケジュールやイベントに基づいて ETL ジョブをトリガーするジョブを自動的に開始してデータをデー タウェアハウスに移動できます。トリガーを使用してジョブ間の依存関係を作成できます。 • ランタイムメトリクスを収集し、データウェアハウスのアクティビティを監視します。 • エラーと再試行を自動的に処理します。 • ジョブを実行するために、必要に応じてリソースをスケーリングします。AWS Glue を使用してサーバーレスクエリを Amazon S3 データレイクに対して実行できます。AWS Glue で Amazon Simple Storage Service (Amazon S3) のデータを分類し、Amazon Athena および Amazon Redshift Spectrum でクエリに利用できます。クローラでは、メタデータは基盤となるデータと同期し続け ます。Athena と Redshift Spectrum は、AWS Glue データカタログ を使用して Amazon S3 データレイク を直接クエリできます。AWS Glue では、複数のデータサイロにロードすることなく、1 つの統一された インターフェイスを通じてデータにアクセスし分析できます。
AWS Glue でイベント駆動型の ETL パイプラインを作成できます。AWS Glue ETL ジョブを AWS Lambda 関数から呼び出すことで、Amazon S3 で新しいデータが使用可能になるとすぐに ETL ジョブを
AWS Glue を使用してデータアセットを理解できます。さまざまな AWS サービスを使用してデータを保 存でき、AWS Glue データカタログ を使用してデータの統一されたビューを維持できます。Data Catalog を表示して所有しているデータセットをすばやく検索および検出でき、関連するメタデータを 1 つの中央 リポジトリに維持できます。また、Data Catalog は外部 Apache Hive メタストアのドロップインリプレー スメントとしても機能します。
AWS Glue: この機能の説明
AWS Glue は他の AWS サービスを使用して、データウェアハウスを構築する ETL (抽出、変換、ロード) ジョブをオーケストレーションします。AWS Glue は API オペレーションを呼び出して、データの変換、 ランタイムログの作成、ジョブロジックの保存、およびジョブ実行をモニタリングするのに役立つ通知の 作成を行います。AWS Glue コンソールはこれらのサービスを管理アプリケーションに接続して、お客様 が ETL ワークの作成と監視に集中できるようにします。管理およびジョブ開発のオペレーションは、コン ソールがお客様に代わって実行します。データソースへのアクセスとデータウェアハウスへの書き込みを 行うために、認証情報と他のプロパティを AWS Glue に提供します。 AWS Glue は、ワークロードを実行するために必要なリソースのプロビジョニングおよび管理を行いま す。AWS Glue が代わって行うため、ETL ツールのインフラストラクチャを作成する必要はありません。 リソースが必要な場合、起動時間を削減するために、AWS Glue はインスタンスのウォームプールからイ ンスタンスを使用してワークロードを実行します。
AWS Glue では、Data Catalog にあるテーブル定義を使用してジョブを作成します。ジョブは、変換を 実行するプログラミングロジックを含むスクリプトで構成されます。トリガーを使用し、スケジュールに 基づいて、または指定されたイベントの結果としてジョブを開始します。ターゲットデータが存在する場 所、およびターゲットに入力するソースデータを指定します。入力により、AWS Glue はデータをソース からターゲットに変換するのに必要なコードを生成します。AWS Glue コンソールまたは API でスクリプ トを提供してデータを処理することもできます。 トピック • 独立で実行されるサーバーレス ETL ジョブ (p. 3) • AWS Glue の概念 (p. 4) • AWS Glue コンポーネント (p. 6) • 半構造化されたスキーマをリレーショナルスキーマに変換する (p. 7)
独立で実行されるサーバーレス ETL ジョブ
AWS Glue は、Apache Spark サーバーレス環境で ETL ジョブを実行します。AWS Glue は、独自のサー ビスアカウントでプロビジョニングして管理する仮想リソースでこれらのジョブを実行します。 AWS Glue は、以下を実行するよう設計されています。 • お客様のデータを分離します。 • 伝送中と保管時のお客様のデータを保護します。 • 一時的な制限された認証情報を使用して、またはアカウント内の IAM ロールに対するお客様の同意を得 て、お客様のリクエストに応え必要な時だけお客様のデータにアクセスします。
ETL ジョブのプロビジョニング時に、Virtual Private Cloud (VPC) にある入力データソースおよび出力デー タターゲットを提供します。また、データソースおよびターゲットにアクセスするために必要な、IAM ロール、VPC ID、サブネット ID、およびセキュリティグループを提供します。各タプル (顧客アカウント ID、IAM ロール、サブネット ID、およびセキュリティグループ) に、AWS Glue は、AWS Glue サービス アカウント内の他のすべての Spark 環境からネットワークおよび管理レベルで分離された新しい Spark 環 境を作成します。
AWS Glue はプライベート IP アドレスを使用して、サブネットで Elastic Network Interface を作成しま す。Spark ジョブはこれらの Elastic Network Interface を使用して、データソースおよびデータターゲット にアクセスします。Spark 環境内外への、また Spark 環境内でのトラフィックは、VPC およびネットワー キングポリシーにより管理されます。ただし、1 つ例外があり、AWS Glue ライブラリに対する呼び出し は、AWS Glue VPC 経由で AWS Glue API オペレーションにトラフィックをプロキシできます。すべての
ETL ジョブを実行する AWS Glue 管理の Spark 環境は、他の AWS サービスが従う同じセキュリティ実施 方法で保護されています。それらの実施方法は、AWS のセキュリティプロセスの紹介ホワイトペーパーの 「AWS アクセス」セクションを参照してください。
AWS Glue の概念
次の図は、AWS Glue 環境のアーキテクチャを示します。 AWS Glue でジョブを指定し、データソースからデータターゲットへのデータの抽出、変換、およびロー ド (ETL) に必要な作業を完了します。通常は、以下のアクションを実行します。 • クローラを指定し、AWS Glue データカタログ にメタデータテーブルの定義を入力します。データスト アでクローラを指定し、クローラは Data Catalog のテーブル定義を作成します。テーブル定義に加えて、AWS Glue データカタログ には ETL ジョブを定義するために必要な他のメタ データが含まれています。このメタデータを使用して、データを変換するジョブを定義できます。 • AWS Glue はデータを変換するスクリプトを生成できます。または、AWS Glue コンソールまたは API
でスクリプトを提供できます。
• ジョブをオンデマンドで実行する、または、指定したトリガーが発生すると開始するようにセットアッ プできます。トリガーは、時間ベースのスケジュールまたはイベントです。
Important
AWS Glue のテーブルとデータベースは、AWS Glue データカタログ のオブジェクトです。それ らにはメタデータが含まれ、データストアからのデータは含まれません。
AWS Glue の用語
AWS Glue は、複数のコンポーネントの相互作用に依存してデータウェアハウスのワークフローを作成お よび管理しています。
AWS Glue データカタログ
AWS Glue の持続的なメタデータストア。各 AWS アカウントには 1 つ AWS Glue データカタログ があり ます。これには、AWS Glue 環境を管理するためのテーブル定義、ジョブ定義、およびその他の制御情報 が含まれています。
表
データを表すメタデータ定義。データが、Amazon Simple Storage Service (Amazon S3) ファイ
ル、Amazon Relational Database Service (Amazon RDS) テーブル、または別の一連のデータのどこにあ るとしても、テーブルはデータのスキーマを定義します。AWS Glue データカタログ のテーブルは、列 名、データ型の定義、および基本データセットに関するその他のメタデータで構成されています。データ のスキーマは AWS Glue のテーブル定義で表されます。実際のデータは、ファイルまたはリレーショナル データベーステーブルにあっても、元のデータストアに残ります。AWS Glue はファイルとリレーショナ ルデータベースのテーブルを AWS Glue データカタログ に格納します。それらは、ETL ジョブを作成する 際にソースおよびターゲットとして使用されます。
クローラ
データストア (ソースまたはターゲット) に接続し、分類子の優先順位リストを進行してデータのスキーマ を判断し、AWS Glue データカタログ にメタデータテーブルを作成するプログラムです。分類子
データのスキーマを決定します。AWS Glue は、一般的なファイルタイプの分類子を提供します (CSV、JSON、AVRO、XML など)。また、JDBC 接続を使用する一般的なリレーショナルデータベース 管理システムの分類子を提供します。独自の分類子を記述するには、 grok パターンを使用する、また は、XML ドキュメント内の行タグを指定します。Connection
データストアに接続するのに必要なプロパティが含まれています。データベース
AWS Glue の論理グループに分類される、一連の関連付けられたテーブル定義です。ジョブ
ETL 作業を実行するために必要なビジネスロジックです。変換スクリプト、データソース、およびデータ ターゲットで構成されます。ジョブ実行は、スケジュールされたトリガーにより、または、イベントにト リガーされることで開始されます。Script
ソースからデータを抽出し、変換し、ターゲットにロードするコード。AWS Glue は PySpark または Scala スクリプトを生成します。PySpark は ETL プログラミングの Python ダイアレクトです。
データを操作して別の形式にするために使用するコードのロジック。
Trigger
ETL ジョブを開始します。トリガーはスケジュールされた時間またはイベントに基いて定義できます。開発エンドポイント
エンドポイントは、AWS Glue スクリプトの開発およびテストに使用できる環境です。ノートブックサーバー
PySpark ステートメントを実行するために使用できるウェブベースの環境。詳細については、「Apache Zeppelin」を参照してください。開発エンドポイントにノートブックサーバーをセットアップし て、PySpark ステートメントを AWS Glue 拡張機能で実行できます。AWS Glue コンポーネント
AWS Glue は、抽出、変換、ロード (ETL) ワークロードを設定し管理するためのコンソールと API オ ペレーションを備えています。いくつかの言語に固有な SDK と AWS Command Line Interface (AWS CLI) を介して API オペレーションを使用できます。AWS CLI の使用については、AWS CLI Command Reference を参照してください。
AWS Glue は AWS Glue データカタログ を使用して、データソース、変換、およびターゲットについて のメタデータを保存します。Data Catalog は Apache Hive メタストアのドロップインリプレースメント です。AWS Glue Jobs system は、データの ETL オペレーションの定義、スケジューリング、および実行 のためのマネージド型インフラストラクチャを備えています。AWS Glue API の詳細については、「AWS Glue API (p. 270)」を参照してください。
AWS Glue コンソール
AWS Glue コンソールを使用して、ETL ワークフローを定義しオーケストレーションします。コンソール は AWS Glue データカタログ および AWS Glue Jobs system のいくつかの API オペレーションを呼び出 して、次のタスクを実行します。 • ジョブ、テーブル、クローラ、接続などの AWS Glue オブジェクトを定義します。 • いつクローラが実行するかをスケジュールします。 • ジョブトリガーのイベントやスケジュールを定義します。 • AWS Glue オブジェクトのリストを検索しフィルタリングします。 • 変換スクリプトを編集します。
AWS Glue データカタログ
AWS Glue データカタログ は永続的なメタデータストアです。Apache Hive メタストアで行うのと同じよ うに AWS クラウド上でメタデータの保存、注釈付け、および共有ができるマネージド型サービスです。
AWS Identity and Access Management (IAM) ポリシーを使用して、AWS Glue データカタログ で管理され るデータソースへのアクセスを制御できます。これらのポリシーを使用することで、社内の異なるグルー プが、機密情報は保護しつつ、より広範な組織にデータを安全に発行できます。IAM ポリシーにより、場 所に関係なく、どのユーザーがどのデータへのアクセス権を持つかを明確にかつ一貫性を持って定義でき ます。 さらに Data Catalog は、スキーマ変更の追跡、データのリネージ、およびデータアクセス制御のある、 包括的な監査およびガバナンス機能も備えています。データが不適切に変更されたり誤って共有されるこ とのないように、データスキーマへの変更を監査してシステム間のデータの動きを追跡することができま す。
AWS Glue データカタログ の使用方法については、「AWS Glue データカタログ の入力 (p. 50)」 を参照してください。Data Catalog API を使用してプログラミングする方法については、「Catalog API (p. 275)」を参照してください。
AWS Glue クローラおよび分類子
AWS Glue では、あらゆる種類のリポジトリにあるデータのスキャン、分類、スキーマ情報の抽出、その メタデータの AWS Glue データカタログ への自動保存ができるクローラを設定することもできます。そこ から ETL オペレーションをガイドするのに使用できます。 クローラおよび分類子の設定方法については、「クローラを使用してテーブルを分類する (p. 55)」を参 照してください。AWS Glue API を使用してクローラおよび分類子をログラミングする方法については、 「クローラおよび分類子 API (p. 311)」を参照してください。AWS Glue ETL オペレーション
AWS Glue は、Data Catalog のメタデータを使用して、さまざまな ETL オペレーションを実行するため に使用や変更ができる AWS Glue 拡張機能を備えた、Scala または PySpark (Apache Spark 用の Python API) スクリプトを自動生成できます。たとえば、未加工データを抽出、クリーンアップ、および変換して からその結果を別のリポジトリに保存して、クエリと分析を行うことができます。このようなスクリプト は、CSV ファイルをリレーショナル形式に変換し、Amazon Redshift に保存する場合があります。 AWS Glue ETL 機能の使用方法の詳細については、「ETL スクリプトのプログラミング (p. 151)」を参 照してください。
AWS Glue ジョブシステム
AWS Glue Jobs system は、ETL ワークフローをオーケストレーションするためのマネージド型インフラ ストラクチャを提供します。データを抽出したり変換したり異なる場所へ転送したりするのに使用するス クリプトを自動化するジョブを AWS Glue で作成できます。ジョブはスケジュールしたり連鎖させること ができます。または新しいデータの到着などのイベントによってトリガーすることができます。
AWS Glue Jobs system の使用の詳細については、「AWS Glue の実行とモニタリング (p. 135)」 を参照してください。AWS Glue Jobs system API を使用したプログラミングについては、「ジョブ API (p. 333)」を参照してください。
半構造化されたスキーマをリレーショナルスキーマ
に変換する
半構造化データをリレーショナルテーブルに変換することが一般的です。概念的には、階層的なスキーマ をリレーショナルスキーマに平坦化します。AWS Glue はこの変換を臨機応変に実行できます。
詳細については、Wikipedia の 半構造化データ を参照してください。
リレーショナルデータは、行と列で構成されるテーブルで表されます。テーブル間の関係は、プライマ リキー (PK) と外部キー (FK) の関係によって表すことができます。詳細については、Wikipedia の リレー ショナルデータベース を参照してください。
AWS Glue は、クローラを使用して半構造化データのスキーマを推測します。次に、ETL (抽出、変換、お よびロード) ジョブを使用してデータをリレーショナルスキーマに変換します。たとえば、Amazon Simple Storage Service (Amazon S3) ソースファイルから Amazon Relational Database Service (Amazon RDS) テーブルに JSON データを解析できます。AWS Glue がスキーマの違いを処理する方法を理解すると、変 換プロセスを理解するうえで役立ちます。 この図は、AWS Glue が半構造化スキーマをリレーショナルスキーマに変換する方法を示しています。 図は、以下を示しています。 • 単一の値 A は、直接リレーショナル列に変換されます。 • 値のペアである B1 および B2 は、2 つのリレーショナル列に変換されます。 • 子の X と Y を持つ C 構造は、2 つのリレーショナル列に変換されます。 • 配列 D[] は、別のリレーショナルテーブルを指す外部キー (FK) 列のリレーショナル列に変換されま す。2 番目のリレーショナルテーブルには、プライマリキー (PK) に加えて、オフセットと配列の項目の 値を含む列があります。
AWS Glue の使用開始
次のセクションでは、概要を説明し、AWS Glue のセットアップと使用の手順を示します。AWS Glue の 概念およびコンポーネントについては、「AWS Glue: この機能の説明 (p. 3)」を参照してください。 トピック
• AWS Glue の IAM アクセス許可のセットアップ (p. 9)
• VPC での DNS のセットアップ (p. 24)
• データストアにアクセスするための環境のセットアップ (p. 25)
• 開発エンドポイント用の環境の設定 (p. 29)
• AWS Glue コンソールのワークフローの概要 (p. 32)
AWS Glue の IAM アクセス許可のセットアップ
AWS Identity and Access Management (IAM) を使用して、AWS Glue によって使用されるリソースにアク セスするために必要なポリシーとロールを定義します。次の手順では、環境を設定するために必要な基本 的なアクセス許可について説明します。ビジネスニーズに応じて、リソースへのアクセスを追加または削 減できます。
1. AWS Glue サービスの IAM ポリシーを作成する (p. 9)。AWS Glue リソースへのアクセスを許可す るサービスポリシーを作成します。
2. AWS Glue の IAM ロールを作成する (p. 13)。IAM ロールを作成し、AWS Glue サービスポリシーと AWS Glue で使用される Amazon Simple Storage Service (Amazon S3) リソース用のポリシーをアタッ チします。
3. AWS Glue にアクセスする IAM ユーザーにポリシーをアタッチする (p. 14)。AWS Glue コンソール にサインインする IAM ユーザにポリシーをアタッチします。
4. ノートブックの IAM ポリシーを作成する (p. 20)。開発エンドポイント上のノートブックサーバーの 作成に使用するノートブックサーバーポリシーを作成します。
5. ノートブックの IAM ロールを作成する (p. 23)。IAM ロールを作成し、ノートブックサーバーポリ シーを添付します。
ステップ 1: AWS Glue サービスの IAM ポリシーを作
成します。
Amazon S3 のオブジェクトにアクセスするなど、別の AWS リソース上のデータにアクセスする操作の場 合、AWS Glue には、ユーザーの代わりにリソースにアクセスするためのアクセス許可が必要です。AWS Identity and Access Management (IAM) を使用してアクセス権限を提供できます。
Note
AWS 管理ポリシー AWSGlueServiceRole を使用する場合は、このステップをスキップできま す。
このステップでは、AWSGlueServiceRole に似たポリシーを作成します。AWSGlueServiceRole の最 新バージョンは IAM コンソールにあります。
AWS Glue の IAM ポリシーを作成するには
このポリシーは、AWS Glue がこのポリシーを使用してロールを引き受ける際に必要となるアカウント 内のリソースを管理する Amazon S3 アクションの一部を許可します。このポリシーで指定されているリ ソースの中には、Amazon S3 バケット、Amazon S3 ETL スクリプト、CloudWatch Logs、Amazon EC2
トに書き込みます。
1. AWS マネジメントコンソール にサインインし、IAM コンソール(https://console.aws.amazon.com/ iam/)を開きます。 2. 左のナビゲーションペインの [ポリシー] を選択します。 3. [Create Policy] を選択します。 4. [ポリシーの作成] 画面で、JSON 編集のためのタブに移動します。次の JSON ステートメントを使用 してポリシードキュメントを作成して、[ポリシーの確認] を選択します。
Note
Amazon S3 リソースに必要なアクセス権限を追加します。アクセスポリシーのリソースセク ションを必要なリソースだけに絞り込みたい場合があるかもしれません。 { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "glue:*", "s3:GetBucketLocation", "s3:ListBucket", "s3:ListAllMyBuckets", "s3:GetBucketAcl", "ec2:DescribeVpcEndpoints", "ec2:DescribeRouteTables", "ec2:CreateNetworkInterface", "ec2:DeleteNetworkInterface", "ec2:DescribeNetworkInterfaces", "ec2:DescribeSecurityGroups", "ec2:DescribeSubnets", "ec2:DescribeVpcAttribute", "iam:ListRolePolicies", "iam:GetRole", "iam:GetRolePolicy" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "s3:CreateBucket" ], "Resource": [ "arn:aws:s3:::aws-glue-*" ] }, { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject", "s3:DeleteObject" ],}, { "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::crawler-public*", "arn:aws:s3:::aws-glue-*" ] }, { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:*:*:/aws-glue/*" ] }, { "Effect": "Allow", "Action": [ "ec2:CreateTags", "ec2:DeleteTags" ], "Condition": { "ForAllValues:StringEquals": { "aws:TagKeys": [ "aws-glue-service-resource" ] } }, "Resource": [ "arn:aws:ec2:*:*:network-interface/*", "arn:aws:ec2:*:*:security-group/*", "arn:aws:ec2:*:*:instance/*" ] } ] } 次の表は、このポリシーによって付与されたアクセス権限を示しています。 アクション リソース 説明
"glue:*" "*" すべての AWS Glue API オペレーショ ンを実行する権限を許可します。 "s3:GetBucketLocation", "s3:ListBucket", "s3:ListAllMyBuckets", "s3:GetBucketAcl", "*" クローラ、ジョブ、開発エンドポイ ント、ノートブックサーバーからの Amazon S3 バケットの一覧表示を許 可します。
"ec2:DescribeVpcEndpoints", "ec2:DescribeRouteTables", "ec2:CreateNetworkInterface", "ec2:DeleteNetworkInterface", "ec2:DescribeNetworkInterfaces", "ec2:DescribeSecurityGroups", "ec2:DescribeSubnets", "ec2:DescribeVpcAttribute", "*" ジョブ、クローラ、開発エンドポイン トの実行時に、VPC などの Amazon EC2 ネットワーク項目の設定を許可し ます。 "iam:ListRolePolicies", "iam:GetRole", "iam:GetRolePolicy" "*" クローラ、ジョブ、開発エンドポイン ト、ノートブックサーバーからの IAM ロールの一覧表示を許可します。 "s3:CreateBucket" "arn:aws:s3:::aws-glue-*" ジョブおよびノートブックサーバーからアカウントに Amazon S3 バケット を作成できます。 命名規則: [aws-glue-] という Amazon S3 フォルダを使用します。 "s3:GetObject", "s3:PutObject", "s3:DeleteObject" "arn:aws:s3:::aws-glue-*/*", "arn:aws:s3:::*/ *aws-glue-*/ *" ETL スクリプトやノートブックサー バーのロケーションなどのオブジェク トを格納する際に、Amazon S3 オブ ジェクトの取得、配置、および削除を アカウントに許可します。 命名規則: 名前に aws-glue- のプレ フィックスが付いている Amazon S3 バケットまたはフォルダにアクセス権 限を与えます。 "s3:GetObject" "arn:aws:s3:::crawler-public*", "arn:aws:s3:::aws-glue-*" クローラやジョブのサンプルやチュー トリアルで使用されている Amazon S3 オブジェクトを取得できます。 命名規則: Amazon S3 バケット名は [crawler-public] および [aws-glue-] で 始まります。 "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" "arn:aws:logs:*:*:/
aws-glue/*" ログを CloudWatch Logs に書き込むことができます。 命名規則: AWS Glue は名前が [aws-glue] で始まるロググループにログを 書き込みます。
"ec2:CreateTags",
"ec2:DeleteTags" "arn:aws:ec2:*:*:network-interface/*", "arn:aws:ec2:*:*:security-group/*", "arn:aws:ec2:*:*:instance/ *" 開発エンドポイント用に作成された Amazon EC2 リソースのタグ付けを許 可します。
命名規則: AWS Glue は、[aws-glue-service-resource] を使用して Amazon EC2 ネットワークインターフェイス、 セキュリティグループ、およびインス
5. [ポリシーの確認] 画面で、[ポリシー名] ([GlueServiceRolePolicy] など) を入力します。オプションの説 明を入力し、ポリシーが適切であることを確認したら、[ポリシーの作成] を選択します。
ステップ 2: AWS Glue 用の IAM ロールを作成する
代理で他のサービスを呼び出す際に AWS Glue が引き受けることができる IAM ロール権限を許可する必 要があります。これには、AWS Glue で使用するすべてのソース、ターゲット、スクリプト、および一時 ディレクトリに対する Amazon S3 へのアクセスが含まれます。クローラ、ジョブ、および開発エンドポ イントによって許可が必要です。AWS Identity and Access Management (IAM) を使用してアクセス権限を提供できます。AWS Glue に渡す IAM ロールにポリシーを追加します。
AWS Glue の IAM ロールを作成するには
1. AWS マネジメントコンソール にサインインし、IAM コンソール(https://console.aws.amazon.com/ iam/)を開きます。
2. 左のナビゲーションペインで、[Roles] を選択します。 3. [Create role] を選択します。
4. ロールタイプについては、[AWS サービス] を選択し、[Glue] を見つけて選択して、[次へ: アクセス許 可] を選択します。
5. [アクセス権限ポリシーをアタッチする] ページで、一般的な AWS Glue の AWS 管理ポリ シー [AWSGlueServiceRole]、Amazon S3 リソースにアクセスするための AWS 管理ポリシー [AmazonS3FullAccess] などの必要なアクセス権限を含むポリシーを選択します。続いて、[Next: Review] を選択します。
Note
このロールのポリシーの 1 つが Amazon S3 のソースとターゲットにアクセス権限を与えて いることを確認してください。特定の Amazon S3 リソースにアクセスするための独自のポ リシーを提供します。データソースには、s3:ListBucket および s3:GetObject アクセ ス権限が必要です。データターゲットには、s3:ListBucket、s3:PutObject、および s3:DeleteObject アクセス権限が必要です。リソースの Amazon S3 ポリシーの作成の詳 細については、ポリシーでのリソースの指定を参照してください。Amazon S3 ポリシーの例 については、IAM ポリシーの記述: Amazon S3 バケットへのアクセス権を付与する方法を参 照してください。 SSE-KMS で暗号化された Amazon S3 のソースとターゲットにアクセスする予定がある場 合は、AWS Glue のクローラ、ジョブ、開発エンドポイントがデータを復号化できるポリ シーをアタッチしてください。詳細については、「AWS KMS で管理されたキーによるサー バー側の暗号化 (SSE-KMS) を使用したデータの保護」を参照してください。次に例を示し ます。 { "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "kms:Decrypt" ], "Resource":["arn:aws:kms:*:account-id-without-hyphens:key/key-id" ]
} ] }
ルを作成します。AWS Glue が提供するポリシーでは、IAM サービスロールが [AWSGlueServiceRole] で始まると予測しています。それ以外の場合は、ポリシーを追加して、IAM ロールの iam:PassRole アクセス権限がユーザーの命名規則に一致する必要があります。 [Create Role] を選択します。
ステップ 3: AWS Glue にアクセスする IAM ユーザー
にポリシーをアタッチする
AWS Glue コンソールまたは AWS Command Line Interface (AWS CLI) にサインインする IAM ユー ザーは、特定のリソースへのアクセス権限が必要です。ポリシーを通して AWS Identity and Access Management (IAM) を使用してアクセス権限を提供できます。 このステップを完了すると、IAM ユーザーに次のポリシーがアタッチされます。 • AWS 管理ポリシー [AWSGlueConsoleFullAccess] またはカスタムポリシー [GlueConsoleAccessPolicy]。 • [CloudWatchLogsReadOnlyAccess] • [AWSCloudFormationReadOnlyAccess] • [AmazonAthenaFullAccess]
インラインポリシーをアタッチして IAM ユーザーに埋め込むには
IAM ユーザーに AWS 管理ポリシーまたはインラインポリシーをアタッチして、AWS Glue コンソールに アクセスします。このポリシーで指定されているリソースの中には、Amazon S3 バケット、Amazon S3 ETL スクリプト、CloudWatch Logs、AWS CloudFormation、Amazon EC2 リソース用の AWS Glue で使 用されるデフォルトの名前があります。分かりやすいように、AWS Glue はデフォルトで aws-glue-* の プレフィックスが付いた Amazon S3 オブジェクトをアカウント内のバケットに書き込みます。
Note
AWS 管理ポリシー AWSGlueConsoleFullAccess を使用する場合は、このステップをスキップで きます。Important
AWS Glue には、ユーザーの代理操作を実行するために使用されるロールを引き受けるアクセス 権限が必要です。これを実現するには、iam:PassRole アクセス権限を AWS Glue ユーザーに 追加します。 このポリシーは、AWS Glue サービスロールの AWSGlueServiceRole で始まる ロール、およびノートブックサーバーの作成に必要なロール AWSGlueServiceNotebookRole にアクセス権限を与えます。また、命名規則に従った iam:PassRole アクセス権限の独自のポ リシーを作成することもできます。このステップでは、AWSGlueConsoleFullAccess に似たポリシーを作成しま す。AWSGlueConsoleFullAccess の最新バージョンは IAM コンソールにあります。
1. AWS マネジメントコンソール にサインインし、IAM コンソール(https://console.aws.amazon.com/ iam/)を開きます。
2. ナビゲーションペインで [Users] を選択します。
3. 一覧で、ポリシーを埋め込むユーザーの名前を選択します。
7. ポリシーの名前を指定します ([GlueConsoleAccessPolicy] など)。次のステートメントを使用して、ポ リシードキュメントを作成します。 { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "glue:*", "redshift:DescribeClusters", "redshift:DescribeClusterSubnetGroups", "iam:ListRoles", "iam:ListRolePolicies", "iam:GetRole", "iam:GetRolePolicy", "iam:ListAttachedRolePolicies", "ec2:DescribeSecurityGroups", "ec2:DescribeSubnets", "ec2:DescribeVpcs", "ec2:DescribeVpcEndpoints", "ec2:DescribeRouteTables", "ec2:DescribeVpcAttribute", "ec2:DescribeKeyPairs", "ec2:DescribeInstances", "rds:DescribeDBInstances", "s3:ListAllMyBuckets", "s3:ListBucket", "s3:GetBucketAcl", "s3:GetBucketLocation", "cloudformation:DescribeStacks", "cloudformation:GetTemplateSummary", "dynamodb:ListTables" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::aws-glue-*/*", "arn:aws:s3:::*/*aws-glue-*/*", "arn:aws:s3:::aws-glue-*" ] }, { "Effect": "Allow", "Action": [ "s3:CreateBucket" ], "Resource": [ "arn:aws:s3:::aws-glue-*" ] }, { "Effect": "Allow", "Action": [ "logs:GetLogEvents" ], "Resource": [
{ "Effect": "Allow", "Action": [ "cloudformation:CreateStack", "cloudformation:DeleteStack" ], "Resource": "arn:aws:cloudformation:*:*:stack/aws-glue*/*" }, { "Effect": "Allow", "Action": [ "ec2:RunInstances" ], "Resource": [ "arn:aws:ec2:*:*:instance/*", "arn:aws:ec2:*:*:key-pair/*", "arn:aws:ec2:*:*:image/*", "arn:aws:ec2:*:*:security-group/*", "arn:aws:ec2:*:*:network-interface/*", "arn:aws:ec2:*:*:subnet/*", "arn:aws:ec2:*:*:volume/*" ] }, { "Effect": "Allow", "Action": [ "ec2:TerminateInstances", "ec2:CreateTags", "ec2:DeleteTags" ], "Resource": [ "arn:aws:ec2:*:*:instance/*" ], "Condition": { "StringLike": { "ec2:ResourceTag/aws:cloudformation:stack-id": "arn:aws:cloudformation:*:*:stack/aws-glue-*/*" }, "StringEquals": { "ec2:ResourceTag/aws:cloudformation:logical-id": "ZeppelinInstance" } } }, { "Action": [ "iam:PassRole" ], "Effect": "Allow", "Resource": "arn:aws:iam::*:role/AWSGlueServiceRole*", "Condition": { "StringLike": { "iam:PassedToService": [ "glue.amazonaws.com" ] } } }, { "Action": [
"Condition": { "StringLike": { "iam:PassedToService": [ "ec2.amazonaws.com" ] } } }, { "Action": [ "iam:PassRole" ], "Effect": "Allow", "Resource": [ "arn:aws:iam::*:role/service-role/AWSGlueServiceRole*" ], "Condition": { "StringLike": { "iam:PassedToService": [ "glue.amazonaws.com" ] } } } ] } 次の表は、このポリシーによって付与されたアクセス権限を示しています。 アクション リソース 説明
"glue:*" "*" すべての AWS Glue API オペレーショ ンを実行する権限を許可します。 "redshift:DescribeClusters",
"redshift:DescribeClusterSubnetGroups""*" Amazon Redshift への接続を作成できます。 "iam:ListRoles", "iam:ListRolePolicies", "iam:GetRole", "iam:GetRolePolicy", "iam:ListAttachedRolePolicies" "*" クローラ、ジョブ、開発エンドポイン ト、ノートブックサーバーを使用する 場合の IAM ロールの一覧表示を許可 します。 "ec2:DescribeSecurityGroups", "ec2:DescribeSubnets", "ec2:DescribeVpcs", "ec2:DescribeVpcEndpoints", "ec2:DescribeRouteTables", "ec2:DescribeVpcAttribute", "ec2:DescribeKeyPairs", "ec2:DescribeInstances" "*" ジョブ、クローラ、開発エンドポイン トの実行時に、VPC などの Amazon EC2 ネットワーク項目の設定を許可し ます。 "rds:DescribeDBInstances" "*" Amazon RDS への接続を作成できま す。 "s3:ListAllMyBuckets", "s3:ListBucket", "s3:GetBucketAcl", "s3:GetBucketLocation" "*" クローラ、ジョブ、開発エンドポイン ト、ノートブックサーバーを使用する 場合の Amazon S3 バケットの一覧表 示を許可します。
"dynamodb:ListTables" "*" DynamoDB テーブルのリスティング を許可します。
"s3:GetObject",
"s3:PutObject" "arn:aws:s3::: aws-glue-*/*", "arn:aws:s3::: */*aws-glue-*/*", "arn:aws:s3::: aws-glue-*" ETL スクリプトやノートブックサー バーのロケーションなどのオブジェク トを格納する際に、Amazon S3 オブ ジェクトの取得と配置をアカウントに 許可します。 命名規則: 名前に aws-glue- のプレ フィックスが付いている Amazon S3 バケットまたはフォルダにアクセス権 限を与えます。 "s3:CreateBucket" "arn:aws:s3::: aws-glue-*" ETL スクリプトやノートブックサーバーのロケーションなどのオブジェ クトを格納する際に、Amazon S3 バ ケットの作成をアカウントに許可しま す。 命名規則: 名前に aws-glue- のプレ フィックスが付いている Amazon S3 バケットにアクセス権限を与えます。 "logs:GetLogEvents" "arn:aws:logs:*:*: /
aws-glue/*" CloudWatch Logs の取得を許可します。 命名規則: AWS Glue は名前が [aws-glue-] で始まるロググループにログを 書き込みます。
"cloudformation:CreateStack",
"cloudformation:DeleteStack" "arn:aws:cloudformation:*:*:stack/ aws-glue*/*"
ノートブックサーバーで作業するとき に AWS CloudFormation スタックの管 理を許可します。
命名規則: AWS Glue は名前が [aws-glue] で始まるスタックを作成しま す。 "ec2:RunInstances" "arn:aws:ec2:*:*:instance/ *", "arn:aws:ec2:*:*:key-pair/*", "arn:aws:ec2:*:*:image/ *", "arn:aws:ec2:*:*:security-group/*", "arn:aws:ec2:*:*:network-interface/*", "arn:aws:ec2:*:*:subnet/ *", "arn:aws:ec2:*:*:volume/ *" 開発エンドポイントとノートブック サーバーの実行を許可します。
アクション リソース 説明 "ec2:TerminateInstances", "ec2:CreateTags", "ec2:DeleteTags" "arn:aws:ec2:*:*:instance/ *" 開発エンドポイントとノートブックサーバーの操作を許可します。 命名規則: AWS Glue AWS
CloudFormation スタックの名前はプ レフィックスとして aws-glue- を使用 し、論理 ID として ZeppelinInstance を使用します。
"iam:PassRole" "arn:aws:iam::*:role/
AWSGlueServiceRole*"AWS Glue が [AWSGlueServiceRole]で始まるロールに対して PassRole アクセス権限を引き受けることを許可 します。
"iam:PassRole" "arn:aws:iam::*:role/
AWSGlueServiceNotebookRole*"Amazon EC2 が[AWSGlueServiceNotebookRole] で始 まるロールに対して PassRole アク セス権限を引き受けることを許可しま す。 "iam:PassRole" "arn:aws:iam::*:role/ service-role/ AWSGlueServiceRole*"
AWS Glue が [service-role/
AWSGlueServiceRole] で始まるロー ルに対して PassRole アクセス権限 を引き受けることを許可します。 8. [ポリシーの検証] を選択して、画面上部の赤いボックスにエラーが表示されていないことを確認しま す。報告されたエラーがあれば、修正します。
Note
[Use autoformatting] を選択した場合は、ポリシーを開いたときおよび [Validate Policy] を選 択したときに毎回、ポリシーが再フォーマットされます。
9. ポリシーが完成したら、[Apply Policy] を選択します。
AWSGlueConsoleFullAccess 管理ポリシーをアタッチするには
[AWSGlueConsoleFullAccess] ポリシーを添付して、AWS Glue コンソールユーザーが必要とするアクセ ス権限を提供できます。
Note
AWS Glue コンソールアクセス用に独自のポリシーを作成した場合は、このステップをスキップ できます。
1. AWS マネジメントコンソール にサインインし、IAM コンソール(https://console.aws.amazon.com/ iam/)を開きます。
2. ナビゲーションペインで、[Policies] を選択します。
3. ポリシーのリストで、[AWSGlueConsoleFullAccess] ポリシーの横にあるチェックボックスを選択し ます。[Filter] メニューと検索ボックスを使用して、ポリシーのリストをフィルタリングできます。 4. [Policy actions] を選択して、[Attach] を選択します。
5. ポリシーをアタッチするユーザーを選択します。[Filter] メニューと検索ボックスを使用して、プリ ンシパルエンティティのリストをフィルタリングできます。ポリシーをアタッチするユーザーを選択 し、[ポリシーのアタッチ] を選択します。
[CloudWatchLogsReadOnlyAccess] ポリシーをユーザーにアタッチして、CloudWatch Logs コンソールで AWS Glue によって作成されたログを表示できます。
1. AWS マネジメントコンソール にサインインし、IAM コンソール(https://console.aws.amazon.com/ iam/)を開きます。
2. ナビゲーションペインで、[Policies] を選択します。
3. ポリシーのリストで、[CloudWatchLogsReadOnlyAccess] ポリシーの横にあるチェックボックスを 選択します。[Filter] メニューと検索ボックスを使用して、ポリシーのリストをフィルタリングできま す。
4. [Policy actions] を選択して、[Attach] を選択します。
5. ポリシーをアタッチするユーザーを選択します。[Filter] メニューと検索ボックスを使用して、プリ ンシパルエンティティのリストをフィルタリングできます。ポリシーをアタッチするユーザーを選択 し、[ポリシーのアタッチ] を選択します。
AWSCloudFormationReadOnlyAccess 管理ポリシーをアタッチするには
[AWSCloudFormationReadOnlyAccess] ポリシーをユーザーにアタッチして、AWS CloudFormation コン ソールで AWS Glue が使用する AWS CloudFormation スタックを表示できます。
1. AWS マネジメントコンソール にサインインし、IAM コンソール(https://console.aws.amazon.com/ iam/)を開きます。
2. ナビゲーションペインで、[Policies] を選択します。
3. ポリシーのリストで、[AWSCloudFormationReadOnlyAccess] ポリシーの横にあるチェックボックス を選択します。[Filter] メニューと検索ボックスを使用して、ポリシーのリストをフィルタリングでき ます。
4. [Policy actions] を選択して、[Attach] を選択します。
5. ポリシーをアタッチするユーザーを選択します。[Filter] メニューと検索ボックスを使用して、プリ ンシパルエンティティのリストをフィルタリングできます。ポリシーをアタッチするユーザーを選択 し、[ポリシーのアタッチ] を選択します。
AmazonAthenaFullAccess 管理ポリシーをアタッチするには
[AmazonAthenaFullAccess] ポリシーをユーザーにアタッチして、Amazon S3 データを Athena コンソー ルで表示できます。
1. AWS マネジメントコンソール にサインインし、IAM コンソール(https://console.aws.amazon.com/ iam/)を開きます。
2. ナビゲーションペインで、[Policies] を選択します。
3. ポリシーのリストで、[AmazonAthenaFullAccess] ポリシーの横にあるチェックボックスを選択しま す。[Filter] メニューと検索ボックスを使用して、ポリシーのリストをフィルタリングできます。 4. [Policy actions] を選択して、[Attach] を選択します。
5. ポリシーをアタッチするユーザーを選択します。[Filter] メニューと検索ボックスを使用して、プリ ンシパルエンティティのリストをフィルタリングできます。ポリシーをアタッチするユーザーを選択 し、[ポリシーのアタッチ] を選択します。
このポリシーは、AWS Glue がこのポリシーを使用してロールを引き受ける際に必要となるアカウント 内のリソースを管理する Amazon S3 アクションの一部を許可します。このポリシーで指定されているリ ソースの中には、Amazon S3 バケット、Amazon S3 ETL スクリプト、Amazon EC2 リソース用の AWS Glue で使用されるデフォルトの名前があります。分かりやすいように、AWS Glue デフォルトでは aws-glue-* のプレフィックスが付いた Amazon S3 オブジェクトをアカウント内のバケットに書き込みます。
Note
AWS 管理ポリシー AWSGlueServiceNotebookRole を使用する場合は、このステップをスキップ できます。 このステップでは、AWSGlueServiceNotebookRole に似たポリシーを作成しま す。AWSGlueServiceNotebookRole の最新バージョンは IAM コンソールにあります。ノートブックの IAM ポリシーを作成するには
1. AWS マネジメントコンソール にサインインし、IAM コンソール(https://console.aws.amazon.com/ iam/)を開きます。 2. 左のナビゲーションペインの [ポリシー] を選択します。 3. [Create Policy] を選択します。 4. [ポリシーの作成] 画面で、JSON 編集のためのタブに移動します。次の JSON ステートメントを使用 してポリシードキュメントを作成して、[ポリシーの確認] を選択します。 { "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "glue:CreateDatabase", "glue:CreatePartition", "glue:CreateTable", "glue:DeleteDatabase", "glue:DeletePartition", "glue:DeleteTable", "glue:GetDatabase", "glue:GetDatabases", "glue:GetPartition", "glue:GetPartitions", "glue:GetTable", "glue:GetTableVersions", "glue:GetTables", "glue:UpdateDatabase", "glue:UpdatePartition", "glue:UpdateTable", "glue:CreateBookmark", "glue:GetBookmark", "glue:UpdateBookmark", "glue:GetMetric", "glue:PutMetric", "glue:CreateConnection", "glue:CreateJob", "glue:DeleteConnection", "glue:DeleteJob", "glue:GetConnection", "glue:GetConnections", "glue:GetDevEndpoint", "glue:GetDevEndpoints", "glue:GetJob", "glue:GetJobs", "glue:UpdateJob", "glue:BatchDeleteConnection", "glue:UpdateConnection",
"glue:DeleteUserDefinedFunction", "glue:CreateUserDefinedFunction", "glue:BatchGetPartition", "glue:BatchDeletePartition", "glue:BatchCreatePartition", "glue:BatchDeleteTable", "glue:UpdateDevEndpoint", "s3:GetBucketLocation", "s3:ListBucket", "s3:ListAllMyBuckets", "s3:GetBucketAcl" ], "Resource":[ "*" ] }, { "Effect":"Allow", "Action":[ "s3:GetObject" ], "Resource":[ "arn:aws:s3:::crawler-public*", "arn:aws:s3:::aws-glue*" ] }, { "Effect":"Allow", "Action":[ "s3:PutObject", "s3:DeleteObject" ], "Resource":[ "arn:aws:s3:::aws-glue*" ] }, { "Effect":"Allow", "Action":[ "ec2:CreateTags", "ec2:DeleteTags" ], "Condition":{ "ForAllValues:StringEquals":{ "aws:TagKeys":[ "aws-glue-service-resource" ] } }, "Resource":[ "arn:aws:ec2:*:*:network-interface/*", "arn:aws:ec2:*:*:security-group/*", "arn:aws:ec2:*:*:instance/*" ] } ] } 次の表は、このポリシーによって付与されたアクセス権限を示しています。
アクション リソース 説明
"glue:*" "*" すべての AWS Glue API オペレーショ ンを実行する権限を許可します。 "s3:GetBucketLocation", "s3:ListBucket", "s3:ListAllMyBuckets", "s3:GetBucketAcl" "*" ノートブックサーバーから Amazon S3 バケットの一覧表示を許可しま す。 "s3:GetObject" "arn:aws:s3:::crawler-public*", "arn:aws:s3:::aws-glue-*" ノートブックのサンプルやチュートリ アルで使用されている Amazon S3 オ ブジェクトを取得できます。 命名規則: Amazon S3 バケット名は [crawler-public] および [aws-glue-] で 始まります。 "s3:PutObject",
"s3:DeleteObject" "arn:aws:s3:::aws-glue*" ノートブックからアカウントへのAmazon S3 オブジェクトの書き込み と削除を許可します。
命名規則: [aws-glue] という Amazon S3 フォルダを使用します。
"ec2:CreateTags",
"ec2:DeleteTags" "arn:aws:ec2:*:*:network-interface/*", "arn:aws:ec2:*:*:security-group/*", "arn:aws:ec2:*:*:instance/ *" ノートブックサーバー用に作成された Amazon EC2 リソースのタグ付けを許 可します。
命名規則: AWS Glue は Amazon EC2 インスタンスを [aws-glue-service-resource] をタグ付けします。 5. [ポリシーの確認] 画面で、[ポリシー名] ([GlueServiceNotebookPolicyDefault] など) を入力します。 オプションの説明を入力し、ポリシーが適切であることを確認したら、[ポリシーの作成] を選択しま す。
ステップ 5: ノートブック用の IAM ロールを作成する
開発エンドポイントでノートブックを使用する予定がある場合は、IAM ロールアクセス権限を与える必要 があります。IAM ロールを通して AWS Identity and Access Management を使用してアクセス権限を提供 できます。Note
IAM コンソールを使用して IAM ロールを作成すると、コンソールによりインスタンスプロファイ ルが自動的に作成され、対応するロールと同じ名前が付けられます。
ノートブックの IAM ロールを作成するには
1. AWS マネジメントコンソール にサインインし、IAM コンソール(https://console.aws.amazon.com/ iam/)を開きます。
2. 左のナビゲーションペインで、[Roles] を選択します。 3. [Create role] を選択します。
4. ロールタイプについては、[AWS サービス] を選択し、[EC2] を見つけて選択して、[EC2] ユースケー スを選択し、[次へ: アクセス権限] を選択します。
シー [AmazonS3FullAccess] などの必要なアクセス権限を含むポリシーを選択します。続いて、[Next: Review] を選択します。
Note
このロールのポリシーの 1 つが Amazon S3 のソースとターゲットにアクセス権限を与え ていることを確認してください。また、ノートブックサーバーの作成時にノートブックを 保管する場所へのフルアクセスがポリシーで許可されていることを確認してください。特 定の Amazon S3 リソースにアクセスするための独自のポリシーを提供します。リソースの Amazon S3 ポリシーの作成の詳細については、ポリシーでのリソースの指定を参照してくだ さい。 SSE-KMS で暗号化された Amazon S3 のソースとターゲットにアクセスする予定がある場合 は、ノートブックがデータを復号化できるポリシーをアタッチしてください。詳細について は、「AWS KMS で管理されたキーによるサーバー側の暗号化 (SSE-KMS) を使用したデー タの保護」を参照してください。以下に例を示します。 { "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "kms:Decrypt" ], "Resource":["arn:aws:kms:*:account-id-without-hyphens:key/key-id" ] } ] } 6. [Role name] に、ロールの名前を入力します。コンソールユーザーからノートブックサー バーにロールを渡すには、文字列 [AWSGlueServiceNotebookRole] のプレフィックスが付 けられたロールを作成します。AWS Glue が提供するポリシーでは、IAM サービスロールが
[AWSGlueServiceNotebookRole] で始まると予測しています。それ以外の場合は、ポリシーを追加し て、IAM ロールの iam:PassRole アクセス権限がユーザーの命名規則に一致するようにする必要が あります。たとえば、[AWSGlueServiceNotebookRoleDefault] と入力します。 続いて、[Create role] を選択します。
VPC での DNS のセットアップ
ドメインネームシステム (DNS) は、インターネットで使用する名前を対応する IP アドレスに解決するた めの標準です。DNS ホスト名は、ホスト名とドメイン名で構成され、コンピュータに一意の名前を付けま す。DNS サーバーは DNS ホスト名を対応する IP アドレスに解決します。名前解決にカスタム DNS を使 用する場合、DNS 前方参照と DNS 逆引き参照の両方を実装する必要があります。 VPC で DNS をセットアップするには、DNS ホスト名と DNS 解決の両方が VPC で有効になってい ることを確認します。VPC ネットワーク属性の enableDnsHostnames と enableDnsSupport を true に設定する必要があります。これらの属性を表示および変更するには、VPC コンソール (https:// console.aws.amazon.com/vpc/) に移動します。詳細については、「Using DNS with Your VPC」を参照してください。