Terraform的最新和旧版import命令的使用方式

概要 – 简单总结

目前,在業務中有機會使用Terraform,正在將在AWS上構建的內容進行Terraform化。這次使用了import來進行Terraform化,我將記錄下執行方法和一些筆記。

Terraform的概述

HashiCorpによって開発されたオープンソースのインフラストラクチャコード(IaC)ツール
インフラストラクチャの構築、変更、およびバージョニングを効率的に修正、更新が出来る
サーバー、ネットワーク、データベースなどのリソースを含むインフラストラクチャを、宣言的な設定言語でコードとして記述する

以下是Terraform的官方文件参考。

 

前提

Terraformが動作する環境がある
(以前、私がTerraformの導入方法について記事を書いた事があるので、導入されてない方は参考にして下さい)

 

导入版本1.5的模块

我正在使用VPC进行导入操作。

操作流程

Terraformの初期化を行う

terraform init

main.tfに下記の記述をする

# 構成文
import {
  to = Resource Type.Resource Name
  id = "ARN (Amazon Resource Name) または Resource Name"
}

# 入力例
import {
  to = aws_vpc.test_vpc 
  id = "vpc-a01106c2"
}

/*
aws_vpc        : Resource Type(リソース タイプ)
test_vpc       : Resource Name(リソース ネーム)
"vpc-a01106c2" : ARN or Resource Name
id に関しては、terraformの公式ドキュメントとAWSのコンソール画面を良く確認して、値を貼り付ける
*/

# 構成文
resource "Resource Type" "Resource Name" {
  # 何も記載しない。但し、必須入力項目がある場合は、記載する必要がある
}

# 入力例
resource "aws_vpc" "test_vpc" {
  # ...
}

[公式]VPC的import方法在每种资源类型的底部描述
    下記のコマンドを使用して、ファイルを出力する
terraform plan -generate-config-out=generated.tf
# ファイル名は重複してなければ任意の名前で問題ない。test.tf等の名前でもファイルの出力は可能
    出力されたファイルを修正して、planが通る様にする

古老的进口方式

在老式的import中,使用了模块进行构建。

操作步骤 xù)

Terraformの初期化を行う

terraform init

main.tfとvpc.tfに下記の記述をする
(vpc.tfは、networkディレクトリーの階層に設置する)

module "network" {
  source = "./network"
}
resource "aws_vpc" "test_vpc" {

}
    ディレクトリー構成
.
├── .terraform
├── network/
│   └── vpc.tf
├── main.tf
# 以下省略

importの記述に関しては、各リソースタイプの一番下に記載されている為、その部分を参考にして、importコマンドを作成する

# 構文1
terraform import module.[module Name].[Resource Type].[Resource Name] [ARN or Resource Name]

# 構文2(main.tfにresourceの記述がある場合のコマンド)
terraform import [Resource Type].[Resource Name] [ARN (Amazon Resource Name)]

# 入力例1
terraform import module.network.aws_vpc.vpc vpc-a01106c2

# 入力例2(main.tfにresourceの記述がある場合のコマンド)
terraform import aws_vpc.test_vpc vpc-a01106c2
    上記のコマンドが正常に動作すると下記の出力結果が表示される
# 出力結果
module.network.aws_vpc.vpc: Importing from ID "vpc-*****************"...
module.network.aws_vpc.vpc: Import prepared!
  Prepared aws_vpc for import
module.network.aws_vpc.vpc: Refreshing state... [id=vpc-*****************]

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が管理しているすべてのリソースが表示される為、importしたリストが表示されているか確認する
# Terraformの管理下にあるインフラストラクチャの状態(state)を一覧で表示するコマンド
terraform state list

# 出力結果
module.network.aws_vpc.vpc

terraform state showを使用して、importした内容を表示する
(terraform.tfstateにも出力した結果が記載されている為、そこを確認しても良い)

# 構文
terraform state show RESOURCE_TYPE.NAME

# 入力例
terraform state show module.network.aws_vpc.test_vpc

# 出力結果
# module.network.aws_vpc.vpc:
resource "aws_vpc" "test_vpc" {
    arn                                  = "arn:aws:ec2:**************:************:vpc/vpc-*****************"
    assign_generated_ipv6_cidr_block     = false
    cidr_block                           = "0.0.0.0/0"
    default_network_acl_id               = "acl-*****************"
    default_route_table_id               = "rtb-*****************"
    default_security_group_id            = "sg-*****************"
    dhcp_options_id                      = "dopt-*****************"
    enable_dns_hostnames                 = false
    enable_dns_support                   = true
    enable_network_address_usage_metrics = false
    id                                   = "vpc-*****************"
    instance_tenancy                     = "default"
    ipv6_netmask_length                  = 0
    main_route_table_id                  = "rtb-*****************"
    owner_id                             = "************"
    tags                                 = {
        "Name" = "test-vpc-1"
    }
    tags_all                             = {
        "Name" = "test-vpc-1"
    }
}
# 一部の値にマスキングを行なっています。
    出力された内容を修正して、planが通る様にする

補充

清除tfstate文件内容的命令

terraform state rm [消去するmodule or resource]

如何更新tfstate文件

terraform state mv [消去するmodule or resource]

作者创建的代码

我已经将在测试中使用的代码上传到 GitHub,请您确认一下。

 

以下是可供參考的資料。

    • [公式]terraformでAWSの設定を行う為の記述方法

 

    • [公式]Import

 

    AWSリソースをTerraform管理対象に「追加」「削除」する方法
广告
将在 10 秒后关闭
bannerAds