Terraformで既存のSSMパラメータを管理下に取り込む方法についてわかりやすく説明

  • 2025年10月7日
  • 2025年10月7日
  • 未分類

TerraformでAWSを管理していると、「すでにAWS上にあるリソースをTerraformの管理下に入れたい」という場面があります。
特にAWS Systems Manager Parameter Store(以下、SSMパラメータ)では、手動で登録した設定値をTerraformで再利用したいときに便利なのが terraform import コマンドです。

この記事では、SSMパラメータ /tastylog/dev/app/MYSQL_PASSWORD を例に、
/${var.project}/${var.environment}/app/MYSQL_PASSWORD とは何を指すのか」
terraform import の具体的な意味」
をわかりやすく解説します。

/tastylog/dev/app/MYSQL_PASSWORD は「AWS内の階層名」

まず、SSMパラメータの name に指定されている /tastylog/dev/app/MYSQL_PASSWORD は、実際のディレクトリ構造ではなく、AWS上の「名前空間(階層的なキー名)」です。

AWSのParameter Storeでは、パラメータ名にスラッシュ(/)を使って階層構造のように管理できます。
たとえば:

/tastylog/dev/app/MYSQL_HOST
/tastylog/dev/app/MYSQL_PORT
/tastylog/dev/app/MYSQL_USERNAME
/tastylog/dev/app/MYSQL_PASSWORD

これらは実際には「Parameter Store上のフラットなキー名」ですが、
スラッシュ区切りによって「プロジェクト(tastylog)→環境(dev)→アプリ(app)」のように整理して見やすくしている、というわけです。

/${var.project}/${var.environment}/app/MYSQL_PASSWORD は、
Terraformで変数 var.project = "tastylog"var.environment = "dev" を展開すると、
最終的に /tastylog/dev/app/MYSQL_PASSWORD という完全パスになります。

terraform import の仕組み

terraform import は、「既に存在するAWSリソースをTerraformのstate(管理ファイル)に登録する」ためのコマンドです。

terraform import aws_ssm_parameter.password "/tastylog/dev/app/MYSQL_PASSWORD"

上記を実行すると、TerraformはAWSに問い合わせを行い、指定されたSSMパラメータを見つけて、
そのメタ情報(ID・type・value など)をローカルの terraform.tfstate に書き込みます。

これにより、Terraformはそのパラメータを「自分が管理しているリソース」として認識できるようになります。

ただし、importstateファイルに登録するだけ であり、HCLファイル(.tf ファイル)の定義は自動生成されません。
したがって、resource "aws_ssm_parameter" "password" のような定義は 手動で用意しておく必要があります。

実務の流れ(既存リソースをTerraform管理下にする)

  1. 既にAWS上に存在するSSMパラメータを確認
    aws ssm get-parameter --name "/tastylog/dev/app/MYSQL_PASSWORD"
  2. Terraformで同じ定義を用意
    resource "aws_ssm_parameter" "password" { name = "/${var.project}/${var.environment}/app/MYSQL_PASSWORD" type = "SecureString" value = var.password }
  3. importを実行
    terraform import aws_ssm_parameter.password "/tastylog/dev/app/MYSQL_PASSWORD"
  4. plan / apply で整合性確認
    terraform plan terraform apply

実務のワンポイント

  • importは「既存リソースをstateに追加する」だけ。TerraformのHCL定義(.tf)は別途必要です。
  • 冪等性(べきとうせい)は「stateに登録済みであれば同じ状態を保つ」という意味。
    → 逆にstateがズレていると、既存リソースがあるのに「新規作成」と誤認してエラー(ParameterAlreadyExists)になります。
  • import後は、ローカル・GitHub Actionsなどすべての環境で同じbackend(S3など)を使ってstateを共有することが大切です。
  • 同名パラメータを上書きする場合は overwrite = true を指定するか、既存を削除してapplyし直します。

まとめ

/${var.project}/${var.environment}/app/MYSQL_PASSWORD はAWS上の「階層的なパラメータ名」であり、
Terraformの import は、その既存リソースをTerraformのstateに紐付けて管理下に置くためのコマンドです。

この手順を正しく踏めば、既存のSSMパラメータもTerraformで安全に冪等管理でき、
CI/CDパイプラインでも同一のインフラ構成を安定的に再現できます。

最新情報をチェックしよう!