#author("2023-08-07T08:36:55+00:00","default:wikiadmin","wikiadmin") #author("2023-10-12T10:18:27+00:00","default:wikiadmin","wikiadmin") -各種クラウド環境構築 *インストール [#le51ac25] **CentOS7 [#z3c691f0] centos7でjqが入っていればワンライナーでいけた sudo echo ; zcat <( CURRR_VER=$(curl -s https://checkpoint-api.hashicorp.com/v1/check/terraform | jq -r -M '.current_version') ; curl -q "https://releases.hashicorp.com/terraform/$CURRR_VER/terraform_${CURRR_VER}_linux_amd64.zip" ) | sudo tee /usr/local/bin/terraform > /dev/null ; sudo chmod +x /usr/local/bin/terraform **Ubuntu [#xa2e8bec] **Windows [#q9bc99fb] *バージョン切り替え [#iecc6d66] -tfenvという他と似た様な仕組みがあった。 install: brew install tfenv tfenv list-remote tfenv install 0.12.26 tfenv use 0.12.26 *tfファイル [#p0c7777f] 純粋なjsonではないが、ネストが浅くなるので読みやすい。 |iam.tf| |main.tf| *リストやmapなどからリソース生成 [#o3c1aa91] -terraform公式 翻訳 https://pocketstudio.net/2018/07/13/hashicorp-terraform-0-12-preview-for-and-for-each-translate-jp/ https://dev.classmethod.jp/articles/terraform-0-12-new-features/#toc-4 variable "ipset" { type = list(string) default = ["113.42.16.83/32", "192.168.11.151/32"] } # IP Set resource "aws_waf_ipset" "ipset" { name = "${var.env}IPSet" dynamic "ip_set_descriptors" { for_each = var.ipset content { type = "IPV4" value = ip_set_descriptors.value } } } *template [#h0c17489] 巨大なresourceを必要とする場合は、ファイルの一部を別に切り出す。 https://github.com/terraform-community-modules/tf_aws_ecs/blob/master/consul_agent.tf *既存環境からimportする [#b8767f6a] 1. 接続情報と対象のリソースファイルを作成して、terraform init resource "aws_vpc" "default-vpc" { # からにしておく } provider "aws" { version = "~>2.0" region = "ap-northeast-1" # IAM profile profile = "YOUR_IAM_PROFILE" } 2. importコマンド実施すると、tfstateファイルに現在の状況が書き込まれる terraform import aws_vpc.test_vpc vpc-a01106c2 terraform init terraform import aws_vpc.default-vpc vpc-a01106c2 3.現在のリソース状況を確認しながら変数の値を埋めていく! terraform state show aws_vpc.default-vpc 4. terraform planして変更がないことを確認する *関連ツール [#s0952260] -terraforming 既存リソースをリバースエンジニアリングだが、terraform importがあるので不要かも? *data source [#leb0306f] サンプルで間違って引っかかるが、dataはresource作成に当たってterraform外から参照する変数と考えておく。たとえば最新のAmazon Linux AMIのIDを取得して、ec2の作成をするなどをec2モジュールに組み込んでみた。 -グループの情報を取得したい時は以下のように定義しておく data "aws_iam_group" "example" { group_name = "取得したいgroup名" } -その値を利用したい時に以下のように使う ${data.aws_iam_group.example.arn} *ループ処理 [#bf31ee69] https://qiita.com/ringo/items/875f08ec550f0826f0dc *基本コマンド [#uea144bc] |terraform fmt|カレントディレクトリのtfファイルをフォーマット| |init|ワークスペースを初期化| |play|実行するとどのような状態になるかを表示| |apply|実施| |destroy|削除| |show|現在の状態を表示| |terraform apply -target=module.ec2_1|モジュール指定で実行| |terraform plan -target=aws_lambda_layer_version.lambda_layer|リソース指定で実行| -DEBUG OS_DEBUG=1 TF_LOG=DEBUG terraform apply **conoha [#u25dfcb7] -サンプルが間違いだらけ!! provider "openstack" { user_name = "CONOHA_USER" password = "CONOHA_PW" tenant_id = "自分のテナントID" auth_url = "https://identity.tyo1.conoha.io/v2.0" #アカウントによってはtyo2の可能性も } 決めるのはimage_name,flavor_name **aws [#vc624a23]