#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]

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS