はじめに
クラウドインテグレーション事業部の三木です。
今まではローカルにて一人でTerraformの管理をしていたけれど、複数人でTerraformを扱いたいと思うことはありませんか?
ローカルにあるtfstateファイルをTerraform Cloudへ移行することで、そのような悩みを解決できるので紹介したく思います。
準備
準備段階では以下3点を実施します。
- Terraformに必要なファイルの作成
- Terraform Cloudへ移行するtfstateファイルを作成
- Terraform Cloudの既存のworkspaceを確認
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 Cloudに移行します。
したがって、main.tfのresourceブロックではVPC情報を宣言しています。
miki1:Downloads miki$ cat main.tf resource "aws_vpc" "main" { cidr_block = "10.0.0.0/16" tags = { Name = "terraform-import" } } 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 Cloudへ移行するtfstateファイルを作成
まずは、現在main.tfがあるディレクトリに自身がいることを確認します。
miki1:Downloads miki$ ls backend.tf main.tf variable.tf miki1:Downloads miki$
続けて、main.tfがあることを確認した現在のディレクトリ上でterraform initを実行します。
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$
terraform applyを実行するとアクセスキー/シークレットアクセスキーが求められるので入力します。
miki1:Downloads miki$ terraform apply var.aws_access_key Enter a value: var.aws_secret_key Enter a value: .....省略 Plan: 1 to add, 0 to change, 0 to destroy. Do you want to perform these actions? Terraform will perform the actions described above. Only 'yes' will be accepted to approve. Enter a value: yes aws_vpc.main: Creating... aws_vpc.main: Creation complete after 2s [id=vpc-xxxxxxxxxxxxxxxxx] Apply complete! Resources: 1 added, 0 changed, 0 destroyed. miki1:Downloads miki$
コンソールを確認するとVPCが作成されています。
ローカルを確認すると、以下のようにtfstateファイル(terraform.tfstate)が作成されています。
miki1:Downloads miki$ ls -la total 56 drwx------@ 9 miki IRET\Domain Users 288 7 21 01:26 . drwxr-xr-x+ 53 miki IRET\Domain Users 1696 7 21 00:49 .. -rw-r--r--@ 1 miki IRET\Domain Users 6148 7 21 01:26 .DS_Store drwxr-xr-x 3 miki IRET\Domain Users 96 7 21 01:20 .terraform -rw-r--r-- 1 miki IRET\Domain Users 1109 7 21 01:20 .terraform.lock.hcl -rw-r--r--@ 1 miki IRET\Domain Users 272 7 21 01:02 backend.tf -rw-r--r--@ 1 miki IRET\Domain Users 126 7 21 01:06 main.tf -rw-r--r-- 1 miki IRET\Domain Users 1545 7 21 01:22 terraform.tfstate -rw-r--r--@ 1 miki IRET\Domain Users 58 7 21 00:49 variable.tf miki1:Downloads miki$
Terraform Cloudの既存のworkspaceを確認
以降の手順を実施することで、organization配下に新規でworkspaceが作成されます。
手順を実行する前に、organization配下に今回作成するworkspace「terraform-import」がまだ存在していないことを確認しておきます。
tfstateファイルをTerraform Cloudへ移行
backend.tfの内容を以下のように変更をします。
organizationにはみなさんがTerraform Cloudで設定している名称を記載してください。
nameには今回作成するworkspace「terraform-import」を記載しています。
terraform { required_version = ">= 1.2.5" required_providers { random = { source = "hashicorp/random" version = "3.0.1" } } cloud { organization = "xxxxx" workspaces { name = "terraform-import" } } } provider "aws" { region = "ap-northeast-1" access_key = var.aws_access_key secret_key = var.aws_secret_key }
terraform loginコマンドを実行し「yes」を押下します。
miki1:Downloads miki$ terraform login Terraform will request an API token for app.terraform.io using your browser. If login is successful, Terraform will store the token in plain text in the following file for use by subsequent commands: /Users/miki/.terraform.d/credentials.tfrc.json Do you want to proceed? Only 'yes' will be accepted to confirm. Enter a value: yes
ブラウザが以下のような画面に遷移するので「Create API token」を押下します。
以下文字列が出力されるのでコピーしターミナルに貼り付けます。
terraform initコマンドを実行すると、Terraform Cloudへtfstateファイルを移行するか問われるので、「yes」と入力します。
miki1:Downloads miki$ terraform init Initializing Terraform Cloud... Do you wish to proceed? As part of migrating to Terraform Cloud, Terraform can optionally copy your current workspace state to the configured Terraform Cloud workspace. Answer "yes" to copy the latest state snapshot to the configured Terraform Cloud workspace. Answer "no" to ignore the existing state and just activate the configured Terraform Cloud workspace with its existing state, if any. Should Terraform migrate your existing state? Enter a value: yes
新しくworkspace「terraform-import」が作成されています。
作成したworkspace「terraform-import」のStatesで、移行したtfstateファイルを確認できます。
まとめ
簡単にローカルにあるtfstateファイルをTerraform Cloudへ移行することができました。
Terraform Cloudに保管したtfstateファイルは、複数人でも参照することができるため以降は複数人でTerraformを扱うことができます。
参考記事
https://learn.hashicorp.com/tutorials/terraform/cloud-migrate
アイレットなら、AWS で稼働するサーバーを対象とした監視・運用・保守における煩わしい作業をすべて一括して対応し、経験豊富なプロフェッショナルが最適なシステム環境を実現いたします。AWS プレミアコンサルティングパートナーであるアイレットに、ぜひお任せください。
AWS 運用・保守サービスページ
その他のサービスについてのお問合せ、お見積り依頼は下記フォームよりお気軽にご相談ください。
https://cloudpack.jp/contact/form/