Slide 1

Slide 1 text

TERRAFORM
 at WANTEDLY 2015-08-05 HashiCorp Tools Meetup @dtan4

Slide 2

Slide 2 text

Daisuke Fujita @dtan4 Πϯλʔϯ
 @ΠϯϑϥνʔϜ

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

HashiCorp in Wantedly Terraform Vagrant Packer

Slide 5

Slide 5 text

ࠓ೔࿩͢͜ͱ Wantedly Ͱͷ
 Terraform ӡ༻ࣄྫ

Slide 6

Slide 6 text

Terraform flow @ Wantedly since May 2015

Slide 7

Slide 7 text

Terraform Ͱ؅ཧ͍ͯ͠Δ਺ 27 resource types aws_customer_gateway aws_db_instance aws_db_security_group aws_db_subnet_group aws_elasticache_cluster aws_elasticache_subnet_group aws_elb aws_iam_group aws_iam_group_membership aws_iam_group_policy aws_iam_role aws_iam_role_policy aws_iam_user aws_iam_user_policy aws_instance aws_internet_gateway aws_network_acl aws_route_table aws_route_table_association aws_s3_bucket aws_security_group aws_subnet aws_vpc aws_vpn_connection aws_vpn_connection_route aws_vpn_gateway dnsimple_record

Slide 8

Slide 8 text

Terraform Ͱ؅ཧ͍ͯ͠Δ਺ AWS 199 DNSimple 155 354 resources

Slide 9

Slide 9 text

Terraform ؀ڥ GitHub wercker S3 remote backend Vagrant CoreOS Docker quay.io/wantedly/terraform 3FNPUF -PDBM

Slide 10

Slide 10 text

Terraform flow Terraform ίʔυΛॻ͍ͯ Pull Request Λग़͢

Slide 11

Slide 11 text

Terraform flow Terraform ίʔυΛॻ͍ͯ Pull Request Λग़͢

Slide 12

Slide 12 text

Terraform flow CI Ͱςετ (terraform plan) ͕૸Δ

Slide 13

Slide 13 text

Terraform flow CI Ͱςετ (terraform plan) ͕૸Δ

Slide 14

Slide 14 text

Terraform flow ΠϯϑϥνʔϜ͕ϨϏϡʔͯ͠ Merge

Slide 15

Slide 15 text

Terraform flow CI Ͱ࣮؀ڥ΁ͷద༻
 (terraform apply) ͕ߦΘΕΔ

Slide 16

Slide 16 text

Terraform flow CI Ͱ࣮؀ڥ΁ͷద༻
 (terraform apply) ͕ߦΘΕΔ

Slide 17

Slide 17 text

e.g. DNS Ϩίʔυ௥Ճ

Slide 18

Slide 18 text

e.g. IAM Ϣʔβ௥Ճ

Slide 19

Slide 19 text

e.g. GitHub ্Ͱ֬ೝͰ͖ͯศར

Slide 20

Slide 20 text

Terraform ಋೖͷաఔ

Slide 21

Slide 21 text

ಋೖͨ͠ܦҢ • Management Console ϙνϙνۀ͔Βͷ୤٫ • ΠϯϑϥνʔϜ΁ͷ࡞ۀूத͔Βͷ୤٫ • ߏங࡞ۀͷཤྺΛ࢒͍ͨ͠ • ϦιʔεҰཡΛ
 ͩΕͰ΋؆୯ʹݟΒΕΔΑ͏ʹ͍ͨ͠ • Ϧιʔεෳ੡Λָʹ͍ͨ͠

Slide 22

Slide 22 text

Ұ͔ΒΠϯϑϥߏங΍ϦϓϨʔεͰ͸ͳ͘ɺ
 ͍·ಈ͍͍ͯΔΠϯϑϥϦιʔε
 ΛίʔυԽ͍ͨ͠

Slide 23

Slide 23 text

ݱߦ؀ڥ΁ͷ Terraform ಋೖ https://github.com/hashicorp/terraform/issues/581

Slide 24

Slide 24 text

ݱߦ؀ڥ΁ͷ Terraform ಋೖ https://github.com/hashicorp/terraform/issues/581 طଘϦιʔεͷ Terraform ίʔυԽ͸
 ࣮૷͞Ε͍ͯͳ͍

Slide 25

Slide 25 text

ݱߦ؀ڥ΁ͷ Terraform ಋೖ ex: hoge ͱ͍͏ S3 bucket ͕͋ͬͨͱ͖ resource "aws_s3_bucket" "hoge" { bucket = "hoge" acl = "private" } { "version": 1, "serial": 1, "modules": { "path": [ "root" ], "outputs": { }, "resources": { "aws_s3_bucket.hoge": { "type": "aws_s3_bucket", "primary": { "id": "hoge", "attributes": { "acl": "private", "bucket": "hoge", "id": "hoge" } } } } } } TUG UFSSBGPSNUGTUBUF

Slide 26

Slide 26 text

ݱߦ؀ڥ΁ͷ Terraform ಋೖ ex: hoge ͱ͍͏ S3 bucket ͕͋ͬͨͱ͖ resource "aws_s3_bucket" "hoge" { bucket = "hoge" acl = "private" } { "version": 1, "serial": 1, "modules": { "path": [ "root" ], "outputs": { }, "resources": { "aws_s3_bucket.hoge": { "type": "aws_s3_bucket", "primary": { "id": "hoge", "attributes": { "acl": "private", "bucket": "hoge", "id": "hoge" } } } } } } TUG UFSSBGPSNUGTUBUF tfstate (JSON)
 ਓྗͰॻ͘ͷ͸ݫ͍͠

Slide 27

Slide 27 text

Export existing AWS resources to Terraform style (tf, tfstate) dtan4/terraforming

Slide 28

Slide 28 text

Terraforming • طଘͷ AWS / DNSimple Ϧιʔε͔Β
 Terraform ͷίʔυ (tf, tfstate) Λੜ੒͢Δ
 ίϚϯυϥΠϯπʔϧ • 24छྨͷ AWS ϦιʔεʹରԠ • Wantedly ͷ Terraform ίʔυͷେ൒Λੜ੒ • Issue & Pull Request ͓·ͪͯ͠·͢ʂ dtan4/terraforming $ gem install terraforming # or $ docker pull quay.io/dtan4/terraforming

Slide 29

Slide 29 text

Terraforming • S3 buckets ͷ tf Λੜ੒ • S3 buckets ͷ tfstate Λੜ੒ • S3 buckets ͷ tfstate Λੜ੒͠ɺ
 طଘͷ terraform.tfstate ͱϚʔδ $ terraforming s3 $ terraforming s3 --tfstate \ --merge=/path/to/terraform.tfstate $ terraforming s3 --tfstate dtan4/terraforming

Slide 30

Slide 30 text

http://qiita.com/dtan4/items/345c56281ab0e87d6646

Slide 31

Slide 31 text

ૺ۰ͨ͠໰୊

Slide 32

Slide 32 text

terraform plan ͕৴༻ग़དྷͳ͍ • HCL ͷγϯλοΫενΣοΫͱ
 Terraform ύϥϝʔλͷνΣοΫͷΈɺ
 API ͷ dry-run ͸͠ͳ͍ • terraform plan ͕௨ͬͯ΋ɺύϥϝʔλ͕ AWS తʹෆਖ਼Ͱ terraform apply ʹࣦഊ͢Δ • CI Ͱʮςετʯ͍ͯ͠Δҙຯ͕…

Slide 33

Slide 33 text

terraform plan ͕৴༻ग़དྷͳ͍ • AWS ͷυΩϡϝϯτ΋ಡ·ͳ͍ͱ͍͚ͳ͍ • terraform apply ࣦഊͯ͠΋ϦΧόϦͰ͖Δ
 ࢓૊ΈΛ࡞Δ • खݩͰ apply Ͱ͖Δ؀ڥ

Slide 34

Slide 34 text

ELB ഑ԼͷΠϯελϯε͕
 ҙਤͤͣஔ͖׵ΘΔ • Terraform ͷ ELB resource ͸
 ௻Δ͢ΠϯελϯεΛ໌ࣔతʹॻ͘ඞཁ͋Γ • Wantedly Ͱ͸ࣗલπʔϧͰ
 Πϯελϯεͷ૿ݮɺELB ΁ͷ௻Δ͠Λߦ͏ • Terraform ίʔυͱ࣮ࡍͷ؀ڥʹࠩҟ͕ग़Δ

Slide 35

Slide 35 text

ELB ഑ԼͷΠϯελϯε͕
 ҙਤͤͣஔ͖׵ΘΔ • සൟʹΠϯελϯε͕ஔ͖׵ΘΔ ELB ͸
 Terraform Ͱ؅ཧ͠ͳ͍͜ͱʹͨ͠ • ֎෦Ͱಈతͳมߋ͕͋Γ͏ΔϦιʔε͸
 ͋͑ͯ؅ཧ͠ͳ͍

Slide 36

Slide 36 text

IAM Ϣʔβ࡟আͰࣦഊ • IAM ϢʔβࣗମΛফ͢લʹΫϨσϯγϟϧ΍
 ϩάΠϯϓϩϑΝΠϧΛফ͢ඞཁ͕͋Δ • Terraform ͸ͦΜͳͷ͓ߏ͍ͳ͠ʹ delete-user ͠Α͏ͱ͢Δ • खಈͰґଘϦιʔεΛফ্ͨ͠Ͱ apply http://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/Using_DeletingUserFromAccount.html

Slide 37

Slide 37 text

·ͱΊ

Slide 38

Slide 38 text

·ͱΊ • Wantedly ͷΠϯϑϥ͸
 Terraform Ͱ؅ཧ͞Ε͍ͯ·͢ʂ • ݱߦΠϯϑϥΛ Terraform Ͱ؅ཧ͢ΔͨΊʹ
 Terraforming ͱ͍͏πʔϧΛ։ൃ͠·ͨ͠ • ͢΂ͯΛ Terraform ʹ೚͖ͤͬΓʹ͠ͳ͍