見出し画像

Terraform import について

3回目の登場!山田です!
本日は、terraform importについて、初期設定など報告しようかと思います。
初めての方向けに作成してみました。

awsを前提に作成しております。
azureでも構成自体はほぼ変わらないので、参考にしていただければ


はじめに

なぜ、terraform import を実施するのかというと、手動で構築したシステムを自動化(ansibleやterraformを利用)するために利用します。

以前、業務でawsの既存環境をimportする機会があったため、整理してみました。

初めてのterraform import

フォルダー構成

  • お客様名\aws名\

  • お客様名\aws名\modules\vpc

  • お客様名\aws名\stg

  • お客様名\aws名\stg\vpc

  • お客様名\aws名\prd

aws名直下にファイル作成

terraformとは一旦関係はないですが、gitでpushされないようになるので、便利です。

  • .gitignore

# lock file
.terraform.lock.hcl

# .tfstate files
*.tfstate
*.tfstate.*

# Crash log files
crash.log

# Exclude all .tfvars files, which are likely to contain sentitive data, such as
# password, private keys, and other secrets. These should not be part of version
# control as they are data points which are potentially sensitive and subject
# to change depending on the environment.
#
*.tfvars

# Ignore override files as they are usually used to override resources locally and so
# are not checked in
override.tf
override.tf.json
*_override.tf
*_override.tf.json

# Include override files you do wish to add to version control using negated pattern
#
# !example_override.tf

# Include tfplan files to ignore the plan output of command: terraform plan -out=tfplan
# example: *tfplan*

# Ignore CLI configuration files
.terraformrc
terraform.rc


stgとprd配下にファイル作成

  • provider.tf

provider "aws" {
  access_key = var.aws_access_key
  secret_key = var.aws_secret_key
  region     = var.aws_region
}
  • variables.tf

variable "aws_access_key" {
  description = "AWS Access Key"
}
variable "aws_secret_key" {
  description = "AWS Secret Key"
}
variable "aws_region" {
  default = "ap-northeast-1"
}
  • env.tfvars ※各ID毎に入力値が異なる

aws_access_key = ""
aws_secret_key = ""
aws_region     = "ap-northeast-1"

importテスト準備

仮にstgにVPCのimportを試みる
※modules配下のvpcは別途整理して記載します

  1. vpcフォルダーにvpc.tfファイル作成

# -----
# VPC
# -----
module "vpc" {
  source = "../modules/vpc"
  env    = local.env
  region = local.region

  // VPC
  cidr     = ""
  tag_list = {}

  any_cidr = []

  igw = ""

  subnets_list = []

  route_table_tag_list = {}
}


コマンド実行

stg直下でコマンドを実行

  1. terraform init

  2. terraform import -var-file=env.tfvars module.vpc.aws_vpc.main VPC_ID
    VPC_IDは、awsのコンソール画面から確認して、入力

  3. 下記のようになってればOK

% terraform import -var-file=env.tfvars module.vpc.aws_vpc.main vpc-xxxx 
module.vpc.aws_vpc.main: Importing from ID "vpc-xxx"...
module.vpc.aws_vpc.main: Import prepared!
  Prepared aws_vpc for import
module.vpc.aws_vpc.main: Refreshing state... [id=vpc-xxx]

Import successful!

The resources that were imported are shown above. These resources are now in
your Terraform state and will henceforth be managed by Terraform.

terraform.tfstateで内容を確認

必要な情報をvpc.tfに記載して完了です。
あとは、これをterraform plan で変更なしと出ればOKです!

簡単ではありますが、本日のところは以上になります!!!


いいなと思ったら応援しよう!