🔌
TerraformでPostgreSQL向けの、AWS Glueコネクタ Ver.2が作成できない問題と回避策
結論
TerraformではJDBC向けのAWS Glueコネクタ Ver.2が作成できない(?)ため、AWS Management Consoleで手動作成し、Terraformからはその名前を参照する方法で回避する。
はじめに
- AWS GlueでJDBCコネクションを作成する際、Terraform経由では最新のGlueコネクタ Ver.2が作成できず、Ver.1になってしまう問題に遭遇した。
- 本記事では、この問題の詳細と実際に採用した回避策について解説する。
問題の概要
発生した問題
- Terraformの制限: Terraform AWS Providerを使用してGlue JDBCコネクションを作成すると、自動的にGlueコネクタ Ver.1として作成される
- Ver.2の必要性: Public Subnet内のRDS接続において、Ver.1では接続に失敗するがVer.2では成功する事象が発生(原因不明)
環境情報
# Terraform AWS Provider Version
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.0"
}
}
}
Terraformでの制限事項
現在のTerraform実装
Terraformで通常通りGlueコネクションを作成すると、以下のようなコードになる:
resource "aws_glue_connection" "rds_connection" {
name = "my-rds-connection"
connection_properties = {
JDBC_CONNECTION_URL = "jdbc:mysql://your-rds-endpoint:3306/database"
USERNAME = var.db_username
PASSWORD = var.db_password
}
physical_connection_requirements {
availability_zone = var.availability_zone
security_group_id_list = [aws_security_group.glue_sg.id]
subnet_id = aws_subnet.private_subnet.id
}
}
問題点
上記のコードで作成されるコネクションは、AWS Management Console上で確認すると:
- 接続タイプ: Glueコネクタ Ver.1(JDBC)
となり、最新のGlueコネクタ Ver.2の機能を利用できない。
採用した回避策
解決アプローチ
- GUI経由でGlueコネクタ Ver.2を手動作成
- Terraformでは作成済みコネクション名を参照
実装手順
Step 1: AWS Management ConsoleでGlueコネクタ Ver.2(JDBC)を作成
- AWS Glueコンソールにアクセス
- 「Connections」から「Create connection」を選択
- 接続タイプで「PostgreSQL」(JDBCではない)を選択して、あとは必要な設定を入力して作成するだけ
- このルートで作ると、Glueコネクタ Ver.2として作成される
Step 2: Terraformで参照用変数を定義
# variables.tf
variable "glue_connection_name" {
description = "Pre-created Glue Connector Ver.2 (JDBC) connection name"
type = string
default = "manual-jdbc-v2-connection"
}
Step 3: Glueジョブでコネクション名を使用
resource "aws_glue_job" "etl_job" {
name = "my-etl-job"
role_arn = aws_iam_role.glue_role.arn
command {
script_location = "s3://${aws_s3_bucket.scripts.bucket}/etl_script.py"
python_version = "3"
}
connections = [var.glue_connection_name] # 手動作成したコネクション名を参照
default_arguments = {
"--enable-continuous-cloudwatch-log" = "true"
"--enable-spark-ui" = "true"
"--spark-event-logs-path" = "s3://${aws_s3_bucket.logs.bucket}/spark-logs/"
}
}
まとめ
- AWS Glueコネクタ Ver.2(JDBC接続)がTerraform経由で作成できない問題は、現時点では手動作成との併用で回避する必要がある。
- 将来的にTerraform AWS Providerがアップデートされ、Glueコネクタ Ver.2の直接作成がサポートされることに期待。
Discussion