Slide 1

Slide 1 text

イラストで理解するTerraform

Slide 2

Slide 2 text

自己紹介 【名前】 与那嶺 創(よなみね そう) 【所属】 クラスメソッド株式会社 ソリューションアーキテクト 【ひとこと】 ガバメントクラウド初心者です ピザのアイコンでブログ書いてます!

Slide 3

Slide 3 text

01 02 03 04 Terraformとは? Terraformは何が嬉しいの? Terraformはどうはじめればいいの? まとめ アジェンダ

Slide 4

Slide 4 text

Terraformって聞いたことあるけど何がいいんだろう? やってみたいけど、何から始めたらいいんだろう? 対象の読者

Slide 5

Slide 5 text

Terraformとは? IaC CDK Terraform CloudFomation

Slide 6

Slide 6 text

平たく言うと コード インフラをコードで管理できるツール インフラストラクチャ

Slide 7

Slide 7 text

え?それの何が嬉しいの?

Slide 8

Slide 8 text

こんな経験ありませんか? 構築の手順書を作らないといけないけど 画面のキャプチャをとるのが大変 手順書通りにやってたつもりだけど いつの間にかミスしてた 画面で操作すると構築に時間がかかる 今と同じ環境をもう一つ 作りたいけど面倒

Slide 9

Slide 9 text

コード インフラストラクチャ コードでインフラを管理すると何が嬉しいのか?

Slide 10

Slide 10 text

コード インフラストラクチャ コードでインフラを管理すると何が嬉しいのか? t i 同じコードであれば同じリソースが生成されg i 誰がやっても同じリソースが生成されg i コードが存在すればすぐに構築できg i gitで管理すればコードの差分から変更履歴が追える

Slide 11

Slide 11 text

構築の手順書を作らないといけないけど 画面のキャプチャをとるのが大変 手順書通りにやってたつもりだけど いつの間にかミスしてた 画面で操作すると構築に時間がかかる テスト環境用に同じ環境を 作りたいけど面倒

Slide 12

Slide 12 text

よし!全部Terraformで管理するぞ〜!!

Slide 13

Slide 13 text

全然うまくいかない

Slide 14

Slide 14 text

この機能何に使うの? このファイル何に使うの? ディレクトリ構成が複雑 ファイルの依存関係が 分からない なぜうまくいかない?

Slide 15

Slide 15 text

ミニマムにスタートして 1つずつ成功体験を積み重ねましょう! SandBox環境など、学習用の環境があると尚良し

Slide 16

Slide 16 text

でも、何から始めたらいいんだ...

Slide 17

Slide 17 text

面 倒 な こ と を 発 見 面 倒 な こ と を 発 見 改 善 改 善 最 小 限 の 実 装 まずはここから

Slide 18

Slide 18 text

main.tfのみ project main.tf

Slide 19

Slide 19 text

terraform { required_providers { aws = { source = "hashicorp/aws" version = "~> 5.0" } } } provider "aws" { region = "ap-northeast-1" } resource "aws_vpc" "example" { cidr_block = "10.0.0.0/16" } project main.tf main.tf terraform AWS Provider の設定 AWSリソースを定義 ここに追加していく

Slide 20

Slide 20 text

project main.tf main.tf resource "aws_vpc" "example" { cidr_block = "10.0.0.0/16" ... } resource "aws_internet_gateway" "example" { .. } resource "aws_s3_bucket" "example" { ... } resource "aws_instance" "example" { ... } resource "aws_cloudwatch_log_group" "example" { ... } リソースが増えてくると... CloudWatch S3 VPC EC2 Internet Gateway

Slide 21

Slide 21 text

どこに何が書いてあるんだ? 巻物化 巻物化

Slide 22

Slide 22 text

面 倒 な こ と を 発 見 面 倒 な こ と を 発 見 改 善 改 善 最 小 限 の 実 装 今ココ!

Slide 23

Slide 23 text

ファイルの分離 project network.tf storage.tf compute.tf project main.tf 目的やリソースごとにファイルを分離 ...

Slide 24

Slide 24 text

project network.tf storage.tf compute.tf ... CloudWatch EC2 VPC S3 Internet Gateway 管理しやすくなったぜ!

Slide 25

Slide 25 text

面 倒 な こ と を 発 見 面 倒 な こ と を 発 見 改 善 改 善 最 小 限 の 実 装 今ココ!

Slide 26

Slide 26 text

project network.tf storage.tf ... 順調順調!!

Slide 27

Slide 27 text

project network.tf storage.tf ... リソース名のprefix ,タグなど 同じ値を設定するの面倒だな..

Slide 28

Slide 28 text

面 倒 な こ と を 発 見 面 倒 な こ と を 発 見 改 善 改 善 最 小 限 の 実 装 またココ!

Slide 29

Slide 29 text

変数の分離 project network.tf s3.tf ... variables.tf 変数を管理するファイル

Slide 30

Slide 30 text

project network.tf s3.tf ... variables.tf variable “ " { description = "Tag name" type = string default = "demo" tag_name resource "aws_vpc" "example" { ... tags = {Name = "${ }-vpc”} } tag_name variables.tf network.tf 変数を取得

Slide 31

Slide 31 text

面 倒 な こ と を 発 見 面 倒 な こ と を 発 見 改 善 改 善 最 小 限 の 実 装 今ココ!

Slide 32

Slide 32 text

これって何か解決方法ないのかな?と思ったら、調べてみましょう! HashiCorpのスタイルガイドが参考になります!! リンク: https://developer.hashicorp.com/terraform/language/style

Slide 33

Slide 33 text

それはそう。 でも、Terraformのファイルを効率的に管理するには その機能が何のために存在して、 どんな依存関係があるか理解しないと トラブルが起きたら困るのは君だよ? じゃあ、最初から全部盛り混んでおけば いいんじゃないの?

Slide 34

Slide 34 text

面 倒 な こ と を 発 見 面 倒 な こ と を 発 見 面 倒 な こ と を 発 見 改 善 改 善 改 善 サイクルをぐるぐる回しましょう!!

Slide 35

Slide 35 text

R stateファイルはどこで管理したらいいんだろう..2 R シークレットはどこで管理すればいいんだろう..2 R 複数環境にデプロイするにはどうすればいいんだろう..2 R 複数人で開発するにはどうすればいいんだろう..2 R マルチアカウントの場合にはどうすればいいんだろう... 壁にあたる度にTerraformの便利な機能を発見すると思います!

Slide 36

Slide 36 text

Terraformはリソースをコードで管理でき 最初から全てはうまくいかな スモールスタートで成功体験を詰む まとめ

Slide 37

Slide 37 text

e Terraformが全てを解決してくれるとは思っていなb e 常にTerraformが最適なIaCツールだとも思っていなb e 手動で作成/管理する方が向いているケースもあE e 道具なので、使うことを目的とするとモチベーション
 が持続しないかも 最後に個人的な意見を