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