LoginSignup
0
0

More than 1 year has passed since last update.

Terraform Importメモ

Last updated at Posted at 2022-07-07

概要

  • コード化を楽にしたい
  • コード化するにあたって記述方法がわからない対象がある

前提

  • AWSの場合
  • コード化されていないリソースが存在すること

詳細

コード化補助として使う場合

  • 既存の”dev-documents”という名前のS3バケットをインポートしたい場合
  • プロジェクトディレクトリを作成後、その中に簡易な設定のmain.tfを作成
$ mkdir old_project
$ cd old_project
$ vi main.tf
main.tf
# ---------------------------------------------
# Main Setting
# ---------------------------------------------
//最低限の設定を記述
provider "aws" {
  region = "ap-northeast-1"
}
terraform {
  required_version = ">= 1.1"
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = ">= 4.20.1"
    }
  }
}
//importする対象の空リソース定義を記載
resource "aws_s3_bucket" "dev_s3_bucket_sample" {}
//terraform用ディレクトリに移動
$ cd old_project

//ワークスペースを初期化しstateファイルができている事を確認
$ terraform init
$ ls -l terraform.tfstate

//手動で作られたリソースをterraform下に置く(ここでは”dev-documents”という名ですでに存在するS3バケットをインポート)
$ terraform import aws_s3_bucket.dev_s3_bucket_sample dev-documents #インポートする対象はリソース名を指定する
:
Importing from ID "dev-documents"...
Import prepared!
Refreshing state... [id=dev-documents]
:
Import successful!

//インポートされたリソースがstateファイル内に詳細が記載されている事を確認
$ cat terraform.tfstate

//terraform管理下にあるリソースを出力
$ terraform state list                                                         
aws_s3_bucket.dev_s3_bucket_sample

//コード化が終わった不要なのでterraform管理外にする。stateファイルから内容が消える。
$ terraform state rm aws_s3_bucket.dev_s3_bucket_sample
Removed aws_s3_bucket.dev_s3_bucket_sample
Successfully removed 1 resource instance(s).


既存の一部リソースを除いてterraform applyしたい場合

  • applyしたが既にそのリソースが存在するとしてエラーになってしまった場合、対象のリソースをterraform管理下にしてしまう

  • 以下は例としてsecretmanagerのリソースがすでに存在していてapplyできない場合

Error: error creating Secrets Manager Secret: ResourceExistsException: The operation failed because the secret dev-secretmanager-rds already exists.
//terraform管理下に無いことを確認
terraform state list

//既存のリソースをインポートしてterraform管理下に
terraform import aws_secretsmanager_secret.dev_secretsmanager_rds dev-secretmanager-rds

//terraform管理下に入った事を確認
terraform state list

//terraform全体適用
terraform apply

  • 例:手動作成したRDSをImportする場合
    • ClusterからまずImport
//rdsclusterの名前(DB識別子)を引数に指定
$ terraform import aws_rds_cluster.dev_rds_cluster dev-rds-cluster
//rdsライターインスタンスの名前(DB識別子)を引数に指定
$ terraform import aws_rds_cluster_instance.dev_rds_cluster_instance dev-rds-instance-01
//rdsリーダーインスタンスの名前(DB識別子)を引数に指定
$ terraform import aws_rds_cluster_instance.dev_rds_cluster_instance dev-rds-instance-02
0
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
0
0