はじめに
AWS の RDS インスタンスを Terraform で管理 する際、aws_db_instance.rds_instance.address
を環境変数として利用することで、アプリケーションが正しくデータベースに接続 できるようになります。
本記事では、この値の 役割と具体的な活用方法 について解説します。
※内容は個人の備忘録レベルのため、参考程度にご覧ください。
書こうと思ったきっかけ
この記事を書こうと思ったきっかけは、現在受講している IT スクールのハッカソン において、インフラ担当として活動 していることです。
実際のAWS構成図
ハッカソンでは、Terraform を用いて AWS のインフラを管理 する機会があり、その中で RDS のエンドポイントをどのように活用するか が重要な課題となりました。
実際の運用に役立つ知識として整理 しておくため、ここにまとめます。
AWS の RDS インスタンスを Terraform で管理する際、aws_db_instance.rds_instance.address
を環境変数として利用することで、アプリケーションが正しくデータベースに接続できるようになります。
本記事では、この値の役割と具体的な活用方法について解説します。
aws_db_instance.rds_instance.address
とは?
aws_db_instance.rds_instance.address
は、Terraform で管理している RDS インスタンスのエンドポイントを取得するための属性です。この値は、RDS インスタンスが作成された後に割り当てられるホスト名であり、アプリケーションがデータベースに接続する際に使用されます。
具体的な活用方法
Terraform を使って AWS ECS や EC2 インスタンスなどのアプリケーションに RDS インスタンスのエンドポイントを渡す場合、以下のように environment
ブロックで MYSQL_HOST
などの変数として設定することができます。
例: ECS のタスク定義で RDS のエンドポイントを環境変数に設定
例: EC2 インスタンスの環境変数として RDS のアドレスを設定
resource "aws_instance" "app_server" {
ami = "ami-12345678"
instance_type = "t3.micro"
user_data = <<-EOF
#!/bin/bash
echo "MYSQL_HOST=${aws_db_instance.rds_instance.address}" >> /etc/environment
echo "MYSQL_USER=myuser" >> /etc/environment
echo "MYSQL_PASSWORD=$(aws secretsmanager get-secret-value --secret-id rds_password --query SecretString --output text | jq -r .password)" >> /etc/environment
echo "MYSQL_DB=mydatabase" >> /etc/environment
EOF
}
適用方法
Terraform の設定を適用するには、以下の手順を実行します。
terraform init
terraform apply -auto-approve
また、ECS の場合は以下のコマンドでタスクを再デプロイし、環境変数の更新を反映させます。
aws ecs update-service --cluster my-ecs-cluster --service my-ecs-service --force-new-deployment
まとめ
-
aws_db_instance.rds_instance.address
は、Terraform で作成された RDS インスタンスのエンドポイントを取得するための属性。 - ECS のタスク定義や EC2 インスタンスの環境変数に設定することで、アプリケーションがデータベースに適切に接続できるようになる。
- Terraform の適用後、ECS や EC2 の設定を更新することで、環境変数の変更を反映できる。
この設定を活用することで、AWS のインフラをコードベースで効率的に管理し、アプリケーションとデータベースの接続設定を自動化できます。