1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Glue JobでRedshift Serverlessに接続する

Last updated at Posted at 2024-10-31

はじめに

Glue Job(Sparkタイプ)を使って、Redshift Serverlessのデータを参照したりインサートしたりするために、
GlueデータカタログのConnectionを使って、Redshift Serverlessと接続する方法を整理しています。

以下のAWS記事を参考にしています。
ユーザーガイド: Redshift 接続
Repost: 接続トラブルシューティング

この記事でわかること

本記事では接続までで、GlueJobを実行する部分は次回記事にて掲載します

構成図

Glue JobとRedshift Serverless間の接続についての構成を、図にしてみます。
Glue JobでRedshift Serverlessに接続する.png

リソース一覧

IAM関係リソース

  • Glue Job用のIAMロール、ポリシー
  • Redshift Serverless用のIAMロール、ポリシー

Glue Jobのロールには、S3アクセス関連のポリシーを付与(Redshift関連は不要)し、
Redshift用のロールには、S3の読み取りと書き込みを許可するポリシーが必要1です。


ネットワーク関係リソース

  • Glue用VPCプライベートサブネット
  • Redshift Serverless用VPCプライベートサブネット × 3
  • Connection用のセキュリティグループ

Glue JobがVPC内で動くときのサブネットを指定します。
Redshift Serverlessのワークグループは、サブネットを3つ以上紐づけが必要です2
今回のセキュリティグループは、GlueとRedshift双方に設定するものを作成します3


Glue関連リソース

  • Glue Job
  • GlueデータカタログConnection

Glue Jobに、作成したGlue Job用のロールを紐づけます。
Glue Connectionには、サブネットやセキュリティグループ、Redshiftの認証情報なども設定していきます。


Redshift Serverless関連リソース

  • Redshift Serverlessワークグループ、名前空間

ワークグループに、サブネット、セキュリティグループを設定します。
名前空間には、ロールを紐づけます。


(その他Glue Job実行時に必要なリソース)

  • S3バケット
  • S3用VPCエンドポイント

SparkタイプGlue JobでConnectionを使ってRedshiftに接続する場合、
データの移動はS3を経由して行われる45ため、Glue Jobを実行する際にはS3が必要となります。

またそのときVPC内のConnectionがVPC外のS3と接続するために、エンドポイントが必要です。
(ゲートウェイ型のエンドポイントを利用しています)

設定手順

AWSマネージドコンソールの設定画面をもとに整理しています。
※プライベートサブネット, S3バケット, S3用ゲートウェイエンドポイントは、作成済みとして進めます。

  1. セキュリティグループの設定
  2. IAMの設定
  3. Redshift Serverlessの設定
  4. Glueの設定
  5. 接続確認してみる
  6. Glue Jobを実行してみる(次回記事)

セキュリティグループの設定

VPC画面サイドバーのセキュリティグループから、セキュリティグループを作成します。
インバウンドルールに自己参照ルールを設定します。
(自己参照ルールとは6)

[Type (タイプ)] All TCP、[Protocol (プロトコル)] は TCP、[Port Range (ポート範囲)] にはすべてのポートが含まれ、[Source (ソース)] は [Group ID (グループ ID)] と同じセキュリティグループ名であるというルール

image.png

アウトバウンドルールは、自己参照ルールと、S3エンドポイントへのアクセスを許可するルールを設定します3
image.png

IAMの設定

IAM画面サイドバーのロールから、IAMロールを作成します。まずはRedshiftServerless用のロールを作成します。
まず、Redshift Serverlessがこのロールを使用できるように信頼ポリシーを定義しています。
image.png

続けて、ロールにアタッチするポリシーの設定をします。
S3の読込み、書込みアクションを許可します。

RedshiftServerlessのポリシー
{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"s3:ListBucket",
				"s3:GetObject",
				"s3:PutObject",
				"s3:DeleteObject",
				"s3:AbortMultipartUpload",
				"s3:ListMultipartUploadParts",
				"s3:ListBucketMultipartUploads"
			],
			"Resource": [
				"arn:aws:s3:::<利用するS3バケット名>/*",
				"arn:aws:s3:::<利用するS3バケット名>"
			]
		}
	]
}

次に、GlueJob用のロールを作成します。
まず、Glue Jobがこのロールを使用できるように信頼ポリシーを定義しています。
image.png

続けて、ロールにアタッチするポリシーを設定します。
GlueJobの実行関連アクション許可、S3の読込み、書込みアクション許可、ネットワーク関連アクション許可を設定します。
(CloudWatch関連アクション許可は任意ですが、今後ログ確認するために設定しています)

GlueJobのポリシー
{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"glue:GetConnection",
				"glue:StartJobRun",
				"glue:GetJobRun",
				"glue:GetJobRuns",
				"glue:BatchStopJobRun"
			],
			"Resource": [
				"arn:aws:glue:*:*:*"
			]
		},
		{
			"Effect": "Allow",
			"Action": [
				"s3:GetObject",
				"s3:PutObject",
				"s3:ListBucket"
			],
			"Resource": [
				"arn:aws:s3:::<利用するS3バケット名>/*",
				"arn:aws:s3:::<利用するS3バケット名>"
			]
		},
		{
			"Effect": "Allow",
			"Action": [
				"ec2:DescribeVpcAttribute",
				"ec2:DescribeVpcs",
				"ec2:DescribeSubnets",
				"ec2:DescribeSecurityGroups",
				"ec2:DescribeNetworkInterfaces",
				"ec2:DescribeVpcEndpoints",
				"ec2:DescribeRouteTables",
				"ec2:CreateTags",
				"ec2:CreateNetworkInterface",
				"ec2:DeleteNetworkInterface"
			],
			"Resource": [
				"*"
			]
		},
		{
			"Effect": "Allow",
			"Action": [
				"logs:CreateLogGroup",
				"logs:CreateLogStream",
				"logs:PutLogEvents"
			],
			"Resource": "arn:aws:logs:*:*:log-group:*"
		},
		{
			"Effect": "Allow",
			"Action": [
				"cloudwatch:PutMetricData",
				"cloudwatch:GetMetricData",
				"cloudwatch:GetMetricStatistics",
				"cloudwatch:ListMetrics"
			],
			"Resource": "*"
		}
	]
}

RedshiftServerlessの設定

Redshift画面からサーバレスダッシュボード画面に移動し、ワークグループを作成します。
プライベートサブネット3つと、先ほど作成したセキュリティグループを設定します。
(今回必要な設定以外は、基本デフォルト設定のままにしています)
image.png

続けて、名前空間を設定します。
(管理者ユーザー名とパスワードは任意で問題ないですが、後でGlue Connection設定で使います)
image.png

Glueの設定

Glue画面サイドバーのData Connectionsに移動し、Redshift用Connectionを選択します。
image.png

作成したRedshiftServerlessのワークグループとデータベース名(デフォルトのdev)を指定します。
Redshift認証情報は今回、RedshiftServerless名前空間作成時に設定した管理者ユーザーとパスワードを直書きして設定しています。
image.png

作成後、Connectionの設定を確認すると、ネットワーク情報(JDBC URL, サブネット, セキュリティグループ)が自動で設定されています。
image.png

次に、Glue Jobを作成します。Glue画面サイドバーのETL jobsから新規作成を行います。
Job detailsタブにて、作成したGlueJob用ロールを設定します。タイプは「Spark」を指定します。
image.png

Connections設定には、先ほど作成したConnectionを指定します。
(その他、今回必要な設定以外は、基本デフォルト設定のままにしています)
image.png

接続確認してみる

Data Connectionsの画面に戻って、作成したConnectionを選択し、接続確認を行います。
image.png

GlueJobロールを指定して、接続確認します。
(Connectionに設定されているJDBC URLに対して、テスト接続が行われます)
image.png

少し待つと、接続に成功した画面が確認できました!
image.png

GlueJobを実行してみる(次回記事)

Glue Jobで使うスクリプトの内容や一時保管用S3の場所を設定する方法など、次回の記事で詳細整理します。

最後に

GlueとRedshift Serverlessを接続するための具体的な手順を整理しました。
今回はRedshift認証情報をConnection設定に直書きしていますが、
Secrets Managerを使ったりなど、よりセキュアな接続方法にカスタマイズ可能なので、また整理したいと思います。

次回記事では、作成した接続を使って実際にGlue Jobを実行し、データ参照やインサートを行う方法を整理予定です。

参考URL

この記事で参考にしたURLです。

  1. AWS記事:Redshift connections - Configuring IAM roles
    https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-connect-redshift-home.html#aws-glue-programming-etl-redshift-config-iam

  2. Amazon Redshift サーバーレスを使用する場合の考慮事項
    https://docs.aws.amazon.com/ja_jp/redshift/latest/mgmt/serverless-usage-considerations.html

  3. AWS記事:Redshift connections - Set up Amazon VPC
    https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-connect-redshift-home.html#aws-glue-programming-etl-redshift-config-vpc 2

  4. AWS記事:Redshift connections
    https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-connect-redshift-home.html#aws-glue-programming-etl-redshift-using

  5. Apache Spark の Amazon Redshift 統合
    https://docs.aws.amazon.com/redshift/latest/mgmt/spark-redshift-connector.html#spark-redshift-connector-considerations

  6. AWS記事:AWS Glue のための開発用ネットワークの設定
    https://docs.aws.amazon.com/ja_jp/glue/latest/dg/start-development-endpoint.html

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?