🔌

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になってしまう問題に遭遇した。
  • 本記事では、この問題の詳細と実際に採用した回避策について解説する。

問題の概要

発生した問題

  1. Terraformの制限: Terraform AWS Providerを使用してGlue JDBCコネクションを作成すると、自動的にGlueコネクタ Ver.1として作成される
  2. 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の機能を利用できない。

採用した回避策

解決アプローチ

  1. GUI経由でGlueコネクタ Ver.2を手動作成
  2. Terraformでは作成済みコネクション名を参照

実装手順

Step 1: AWS Management ConsoleでGlueコネクタ Ver.2(JDBC)を作成

  1. AWS Glueコンソールにアクセス
  2. 「Connections」から「Create connection」を選択
  3. 接続タイプで「PostgreSQL」(JDBCではない)を選択して、あとは必要な設定を入力して作成するだけ
  4. このルートで作ると、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の直接作成がサポートされることに期待。

参考リンク

GitHubで編集を提案

Discussion