はじめに
クラウドインテグレーション事業部の三木です。
今回は既存のAWS環境を、tfstateファイルとしてローカルに読み込むterraform importを試しました。
準備
今回terraform importする対象のVPC
今回はこのVPCを読み込みます。
Terraformに必要なファイルの作成
ディレクトリ構造
miki1:Downloads miki$ tree . ├── backend.tf ├── main.tf └── variable.tf 0 directories, 3 files miki1:Downloads miki$
backend.tfの内容
backend.tfでは読み込むリソースのプロバイダー情報を記載しています。
miki1:Downloads miki$ cat backend.tf terraform { required_providers { aws = { source = "hashicorp/aws" version = "~> 3.44.0" } } required_version = "~> 1.2.5" } provider "aws" { region = "ap-northeast-1" access_key = var.aws_access_key secret_key = var.aws_secret_key } miki1:Downloads miki$
main.tfの内容
main.tfでは読み込むAWSリソース情報を記載しています。
今回はVPCの情報をterraform importで読み込みます。
したがって、main.tfのresourceブロックではVPC情報を宣言しています。
また、引数は不要です。
miki1:Downloads miki$ cat main.tf resource "aws_vpc" "main" { } miki1:Downloads miki$
variable.tfの内容
variable.tfでは他のファイルで利用している変数定義を記載しています。
miki1:Downloads miki$ cat variable.tf variable "aws_access_key" {} variable "aws_secret_key" {} miki1:Downloads miki$
terraform import実行
main.tfがあるディレクトリ上で、terraform initを実行します。
miki1:Downloads miki$ ls backend.tf main.tf variable.tf miki1:Downloads miki$
miki1:Downloads miki$ terraform init Initializing the backend... Initializing provider plugins... - Finding hashicorp/aws versions matching "~> 3.44.0"... - Installing hashicorp/aws v3.44.0... - Installed hashicorp/aws v3.44.0 (signed by HashiCorp) .....省略 miki1:Downloads miki$
今回読み込むVPC IDを確認します。
公式ドキュメントを参考に、確認したVPC IDを用いてterraform importコマンドを実行します[1]。
なお、 以下コマンドで利用しているaws_vpc(リソースタイプ)、main(ローカル名)に関してはmain.tfで宣言している内容です[2]。
コマンド実行後アクセスキー、シークレットアクセスキーを問われるので入力します。
miki1:Downloads miki$ terraform import aws_vpc.main vpc-xxxxxxxxxxxxxxxxx var.aws_access_key Enter a value: var.aws_secret_key Enter a value: .....省略 miki1:Downloads miki$
tfstateファイルが作成されていることを確認します。
miki1:Downloads miki$ ls -la total 56 drwx------@ 9 miki IRET\Domain Users 288 7 19 00:38 . drwxr-xr-x+ 53 miki IRET\Domain Users 1696 7 18 23:55 .. -rw-r--r--@ 1 miki IRET\Domain Users 6148 7 18 23:42 .DS_Store drwxr-xr-x 3 miki IRET\Domain Users 96 7 19 00:26 .terraform -rw-r--r-- 1 miki IRET\Domain Users 1109 7 19 00:26 .terraform.lock.hcl -rw-r--r-- 1 miki IRET\Domain Users 272 7 18 23:35 backend.tf -rw-r--r-- 1 miki IRET\Domain Users 31 7 19 00:01 main.tf -rw-r--r-- 1 miki IRET\Domain Users 1545 7 19 00:38 terraform.tfstate -rw-r--r-- 1 miki IRET\Domain Users 57 7 18 23:39 variable.tf miki1:Downloads miki$
tfstateファイルの中身を確認します。
attributesに記載されているものが、 読み込んだVPCの情報です。
miki1:Downloads miki$ cat terraform.tfstate { "version": 4, "terraform_version": "1.2.5", "serial": 1, "lineage": "4a947d89-561d-ebda-4746-cef0340d1858", "outputs": {}, "resources": [ { "mode": "managed", "type": "aws_vpc", "name": "main", "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]", "instances": [ { "schema_version": 1, "attributes": { "arn": "arn:aws:ec2:ap-northeast-1:xxxxxxxxxxxx:vpc/vpc-xxxxxxxxxxxxxxxxx", "assign_generated_ipv6_cidr_block": false, "cidr_block": "10.0.0.0/16", "default_network_acl_id": "acl-XXXXXXXXXXXXXXXXX", "default_route_table_id": "rtb-XXXXXXXXXXXXXXXXX", "default_security_group_id": "sg-XXXXXXXXXXXXXXXXX", "dhcp_options_id": "dopt-XXXXXXXX", "enable_classiclink": false, "enable_classiclink_dns_support": false, "enable_dns_hostnames": false, "enable_dns_support": true, "id": "vpc-xxxxxxxxxxxxxxxxx", "instance_tenancy": "default", "ipv6_association_id": "", "ipv6_cidr_block": "", "main_route_table_id": "rtb-XXXXXXXXXXXXXXXXX", "owner_id": "xxxxxxxxxxxx", "tags": { "Name": "terraform-import" }, "tags_all": { "Name": "terraform-import" } }, "sensitive_attributes": [], "private": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX==" } ] } ] } miki1:Downloads miki$
まとめ
一からTerraformで環境を作成するのは挑戦しにくく感じていたのですが、既存のAWS環境をterraform importで読み込むことでTerraformの理解を少しずつ深めることができると思いました。
コンソールでAWSリソースを作成、terraform importをすることで簡単にコードを書くことができるので、AWSリソースを作成するコードを書きたいものの、どの様に書けば良いか分からない人におすすめです。
参考記事
[1]https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/vpc#import
[2]https://www.terraform.io/language/resources/syntax
アイレットなら、AWS で稼働するサーバーを対象とした監視・運用・保守における煩わしい作業をすべて一括して対応し、経験豊富なプロフェッショナルが最適なシステム環境を実現いたします。AWS プレミアコンサルティングパートナーであるアイレットに、ぜひお任せください。
AWS 運用・保守サービスページ
その他のサービスについてのお問合せ、お見積り依頼は下記フォームよりお気軽にご相談ください。
https://cloudpack.jp/contact/form/