geek.conf.2

あるエンジニアの備忘録

Terraformメモ

TerraformでAWSについて、アクセスキーとシークレットキーの受け渡し方を考察

なんか、カレントにterraform.tfvarsファイルを置いておけば読んでくれるみたい。
# vi terraform.tfvars


access_key = "foo"
secret_key = "bar"

terraform.tfvarsじゃなくても実行時に-var-fileで指定すればOK
そしてtfにvariable登録。


variable "access_key" {}
variable "secret_key" {}

そしてtfに以下のように定義。


provider "aws" {
access_key = "${var.access_key}"
secret_key = "${var.secret_key}"
region = "${var.region}"
}

VPCを作成するとTargetがlocalのmainルートテーブルが作成されるが、これは通常AWS APIが自動で
作成するものなのでTerraformで作成する必要はないと考えます。
しかし、このmain ルートテーブルをPrivateサブネットに反映したいので、そのやり方を考えてみました。


# private-1a Association definition
resource "aws_route_table_association" "pri-1a-asso" {
subnet_id = "${aws_subnet.private-1a.id}"
route_table_id = "${aws_vpc.vpcname.main_route_table_id}"
}

ってだけなんですけどね。てかaws_vpcのAttributesでmain_route_table_idてのがあってこれがmainルートテーブルのidとして使えるってだけなんですけどね。
同じようにNACLとかdefault VPC security groupとかもある。

他Terraform Tips
・terraform destroyしたときの計画確認


# terraform plan -destroy

・Terraformを経由して作成したものをAWS管理コンソールで編集した場合は、Terraformで修正削除可能。
・Terraformを経由しないで作成されたものはTerraformでは編集も削除も出来ない。stateファイルterraform.tfstateにないからね。

Atlasとの連携
access_tokenをATLASから発行
・export ATLAS_TOKEN=******を.bash_profileにでも書いておく。


# terraform remote -name=Atlasユーザ名/Atlasリポジトリ
※追記:上記コマンドの書き方はv0.4.0以降エラーになるようになっちゃった。
※Atlasリポジトリ名はなんでも可
これでterratermするとAtlasでstateファイルが追跡可能となる。
ちなみにATLAS_TOKENをexportしていないと以下のエラーになるよ。
missing 'access_token' configuration or ATLAS_TOKEN environmental variable

とりあえずここらへんで。