SlideShare a Scribd company logo
TerraformのModuleを作成してみた
社内勉強会 #4
2019/12/18 株式会社ビヨンド 寺岡 佑樹
自己紹介
resource “my_profile” “nezumisannn” {
name = “Yuki.Teraoka”
nickname = “ねずみさん家。”
company = “beyond”
job = “Site Reliability Engineer”
twitter = “@yktr_sre”
skills = [“terraform”,”packer”]
}
Terraformとは
Terraformとは
・インフラオーケストレーションツール
・コードを記述してインフラの構築を行う
・コードの記述はHCLと呼ばれる独自言語で記述する
・Hashicorpが開発したOSSでGolangで記述されている
Moduleを書く理由
Moduleを書く理由
・コードの再利用性を高める
・よく使うリソースを抽象化する
・インフラエンジニアでもコードを書けるようになると良い
実際に書いてみる
実際に書いてみる
・AWSのVPCを作成するモジュールを書いてみる
https://nezumisannn.io/blog/terraform-module-vpc/
.
├── network
│ └── vpc
│ ├── main.tf
│ ├── outputs.tf
│ └── variables.tf
├── network.tf
├── outputs.tf
├── provider.tf
├── terraform.tfstate
├── terraform.tfstate.backup
└── variables.tf
モジュール側
呼び出し側
.
├── network
│ └── vpc
│ ├── main.tf
│ ├── outputs.tf
│ └── variables.tf
├── network.tf
├── outputs.tf
├── provider.tf
├── terraform.tfstate
├── terraform.tfstate.backup
└── variables.tf
呼び出し側
provider "aws" {
access_key = var.access_key
secret_key = var.secret_key
region = var.region
assume_role {
role_arn = var.role_arn
}
}
variable "access_key" {
description = "AWS Access Key"
}
variable "secret_key" {
description = "AWS Secret Key"
}
variable "role_arn" {
description = "AWS Role ARN for Assume Role"
}
variable "region" {
description = "AWS Region"
default = "ap-northeast-1"
}
変数の値は環境変数から
読み込まれる
環境変数名にTF_VAR_と
いうprefixをつける
TF_VAR_access_keyなど
provider.tf
variables.tf
.
├── network
│ └── vpc
│ ├── main.tf
│ ├── outputs.tf
│ └── variables.tf
├── network.tf
├── outputs.tf
├── provider.tf
├── terraform.tfstate
├── terraform.tfstate.backup
└── variables.tf
呼び出し側
module "vpc" {
source = "./network/vpc"
vpc_config = {
name = "example"
cidr_block = "10.0.0.0/16"
enable_dns_support = true
enable_dns_hostnames = true
}
}
・sourceで読み込むモジュールの相対パスを指定する
・VPC作成に必要な値をobject型でモジュールに渡す
・モジュール側の処理は抽象化されているため
必要な値を渡すだけでVPCが作成される
.
├── network
│ └── vpc
│ ├── main.tf
│ ├── outputs.tf
│ └── variables.tf
├── network.tf
├── outputs.tf
├── provider.tf
├── terraform.tfstate
├── terraform.tfstate.backup
└── variables.tf
モジュール側
variable "vpc_config" {
type = object({
name = string
cidr_block = string
enable_dns_support = bool
enable_dns_hostnames = bool
})
}
・呼び出し元から渡ってきた変数を受け取る
・ver0.11では1変数につき1つのデータ型しか扱えなかった
・ver0.12からobjectという型が追加されたため
異なる複数のデータ型を同時に扱えるようになった
.
├── network
│ └── vpc
│ ├── main.tf
│ ├── outputs.tf
│ └── variables.tf
├── network.tf
├── outputs.tf
├── provider.tf
├── terraform.tfstate
├── terraform.tfstate.backup
└── variables.tf
モジュール側
resource "aws_vpc" "this" {
cidr_block = var.vpc_config.cidr_block
enable_dns_support = var.vpc_config.enable_dns_support
enable_dns_hostnames = var.vpc_config.enable_dns_hostnames
tags = {
Name = var.vpc_config.name
}
}
・VPCリソースを記述する
・各項目の値は呼び出し元から渡ってきた変数
の値を格納する
.
├── network
│ └── vpc
│ ├── main.tf
│ ├── outputs.tf
│ └── variables.tf
├── network.tf
├── outputs.tf
├── provider.tf
├── terraform.tfstate
├── terraform.tfstate.backup
└── variables.tf
モジュール側
output "vpc" {
value = aws_vpc.this
}
・モジュールの処理で作成されたリソースの情報を呼び出し側に返す
・ver0.11では1outputに対して1つの値しか返せなかった
・ver0.12では1outputで複数の値を返すことができる
・返り値の型もobject型
.
├── network
│ └── vpc
│ ├── main.tf
│ ├── outputs.tf
│ └── variables.tf
├── network.tf
├── outputs.tf
├── provider.tf
├── terraform.tfstate
├── terraform.tfstate.backup
└── variables.tf
モジュール側
output "vpc_id" {
value = module.vpc.vpc.id
}
・モジュール側から返された値を受け取る
・module.[module_name].[object_name].[object_key]とすることで
返されたobjectの中から特定の値を出力することができる
ここまで書いたら
ここまで書いたら
・terraform init
・terraform plan
・terraform apply
・terraform destroy
最後に
最後に
・手が足りないのでModuleを書くの手伝ってください。。。
・AWSだけでもなるはやで運用に乗せたい。。。
終わり

More Related Content

Similar to 20191219 byd lt#4_teraoka

QuickDemo HashiCorp Terraform with Microsoft Azure and VMware vSphere
QuickDemo HashiCorp Terraform with Microsoft Azure and VMware vSphereQuickDemo HashiCorp Terraform with Microsoft Azure and VMware vSphere
QuickDemo HashiCorp Terraform with Microsoft Azure and VMware vSphere
Wataru Unno
 
2020/06/16 tsjp-azure-staticwebapps-vs_codespaces
2020/06/16 tsjp-azure-staticwebapps-vs_codespaces2020/06/16 tsjp-azure-staticwebapps-vs_codespaces
2020/06/16 tsjp-azure-staticwebapps-vs_codespaces
Issei Hiraoka
 
Arukas meet Mesos/Marathon
Arukas meet Mesos/MarathonArukas meet Mesos/Marathon
Arukas meet Mesos/Marathon
Shuji Yamada
 
Newcomer2020 Docker研修
Newcomer2020 Docker研修Newcomer2020 Docker研修
Newcomer2020 Docker研修
Suguru Yazawa
 
デザインパターンを用いたリファクタリング
デザインパターンを用いたリファクタリングデザインパターンを用いたリファクタリング
デザインパターンを用いたリファクタリング
kei takakuda
 
Python におけるドメイン駆動設計(戦術面)の勘どころ
Python におけるドメイン駆動設計(戦術面)の勘どころPython におけるドメイン駆動設計(戦術面)の勘どころ
Python におけるドメイン駆動設計(戦術面)の勘どころ
Junya Hayashi
 
俺とHashiCorp
俺とHashiCorp俺とHashiCorp
俺とHashiCorp
Toru Makabe
 
Terraformで始めるInfrastructure as Code
Terraformで始めるInfrastructure as CodeTerraformで始めるInfrastructure as Code
Terraformで始めるInfrastructure as Code
Takahisa Iwamoto
 
きつねさんでもわかる Firefox OS コードリーディング入門
きつねさんでもわかる Firefox OS コードリーディング入門きつねさんでもわかる Firefox OS コードリーディング入門
きつねさんでもわかる Firefox OS コードリーディング入門
Mizuho Sakamaki
 
HashiCorp Terraform Enterprise 紹介
HashiCorp Terraform Enterprise 紹介HashiCorp Terraform Enterprise 紹介
HashiCorp Terraform Enterprise 紹介
hashicorpjp
 
terraform基礎
terraform基礎terraform基礎
terraform基礎
risa buto
 
PHPカンファレンス関西2012 Silex
PHPカンファレンス関西2012 SilexPHPカンファレンス関西2012 Silex
PHPカンファレンス関西2012 SilexMasao Maeda
 
Power shell で DSL
Power shell で DSLPower shell で DSL
Power shell で DSLurasandesu
 
cf-containers-broker を使ってローカル環境もサービスの恩恵をうける
cf-containers-broker を使ってローカル環境もサービスの恩恵をうけるcf-containers-broker を使ってローカル環境もサービスの恩恵をうける
cf-containers-broker を使ってローカル環境もサービスの恩恵をうける
Takeshi Morikawa
 
Dockerで開発環境をデリバる
Dockerで開発環境をデリバるDockerで開発環境をデリバる
Dockerで開発環境をデリバる
Daigou Harada
 
SphinxのCIの続き Azure DevOpsでのビルド結果を、認証付きAzure App Serviceに公開するところまで
SphinxのCIの続き Azure DevOpsでのビルド結果を、認証付きAzure App Serviceに公開するところまでSphinxのCIの続き Azure DevOpsでのビルド結果を、認証付きAzure App Serviceに公開するところまで
SphinxのCIの続き Azure DevOpsでのビルド結果を、認証付きAzure App Serviceに公開するところまで
Study Group by SciencePark Corp.
 
「お手軽な機械学習サービス」で、ルーティンワークに立ち向かおう!
「お手軽な機械学習サービス」で、ルーティンワークに立ち向かおう!「お手軽な機械学習サービス」で、ルーティンワークに立ち向かおう!
「お手軽な機械学習サービス」で、ルーティンワークに立ち向かおう!
a know
 
20100324 勉強会資料(ドメイン駆動)
20100324 勉強会資料(ドメイン駆動)20100324 勉強会資料(ドメイン駆動)
20100324 勉強会資料(ドメイン駆動)Masayuki Kanou
 
大規模Perl初心者研修を支える技術
大規模Perl初心者研修を支える技術大規模Perl初心者研修を支える技術
大規模Perl初心者研修を支える技術
Daisuke Tamada
 
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011Hiroh Satoh
 

Similar to 20191219 byd lt#4_teraoka (20)

QuickDemo HashiCorp Terraform with Microsoft Azure and VMware vSphere
QuickDemo HashiCorp Terraform with Microsoft Azure and VMware vSphereQuickDemo HashiCorp Terraform with Microsoft Azure and VMware vSphere
QuickDemo HashiCorp Terraform with Microsoft Azure and VMware vSphere
 
2020/06/16 tsjp-azure-staticwebapps-vs_codespaces
2020/06/16 tsjp-azure-staticwebapps-vs_codespaces2020/06/16 tsjp-azure-staticwebapps-vs_codespaces
2020/06/16 tsjp-azure-staticwebapps-vs_codespaces
 
Arukas meet Mesos/Marathon
Arukas meet Mesos/MarathonArukas meet Mesos/Marathon
Arukas meet Mesos/Marathon
 
Newcomer2020 Docker研修
Newcomer2020 Docker研修Newcomer2020 Docker研修
Newcomer2020 Docker研修
 
デザインパターンを用いたリファクタリング
デザインパターンを用いたリファクタリングデザインパターンを用いたリファクタリング
デザインパターンを用いたリファクタリング
 
Python におけるドメイン駆動設計(戦術面)の勘どころ
Python におけるドメイン駆動設計(戦術面)の勘どころPython におけるドメイン駆動設計(戦術面)の勘どころ
Python におけるドメイン駆動設計(戦術面)の勘どころ
 
俺とHashiCorp
俺とHashiCorp俺とHashiCorp
俺とHashiCorp
 
Terraformで始めるInfrastructure as Code
Terraformで始めるInfrastructure as CodeTerraformで始めるInfrastructure as Code
Terraformで始めるInfrastructure as Code
 
きつねさんでもわかる Firefox OS コードリーディング入門
きつねさんでもわかる Firefox OS コードリーディング入門きつねさんでもわかる Firefox OS コードリーディング入門
きつねさんでもわかる Firefox OS コードリーディング入門
 
HashiCorp Terraform Enterprise 紹介
HashiCorp Terraform Enterprise 紹介HashiCorp Terraform Enterprise 紹介
HashiCorp Terraform Enterprise 紹介
 
terraform基礎
terraform基礎terraform基礎
terraform基礎
 
PHPカンファレンス関西2012 Silex
PHPカンファレンス関西2012 SilexPHPカンファレンス関西2012 Silex
PHPカンファレンス関西2012 Silex
 
Power shell で DSL
Power shell で DSLPower shell で DSL
Power shell で DSL
 
cf-containers-broker を使ってローカル環境もサービスの恩恵をうける
cf-containers-broker を使ってローカル環境もサービスの恩恵をうけるcf-containers-broker を使ってローカル環境もサービスの恩恵をうける
cf-containers-broker を使ってローカル環境もサービスの恩恵をうける
 
Dockerで開発環境をデリバる
Dockerで開発環境をデリバるDockerで開発環境をデリバる
Dockerで開発環境をデリバる
 
SphinxのCIの続き Azure DevOpsでのビルド結果を、認証付きAzure App Serviceに公開するところまで
SphinxのCIの続き Azure DevOpsでのビルド結果を、認証付きAzure App Serviceに公開するところまでSphinxのCIの続き Azure DevOpsでのビルド結果を、認証付きAzure App Serviceに公開するところまで
SphinxのCIの続き Azure DevOpsでのビルド結果を、認証付きAzure App Serviceに公開するところまで
 
「お手軽な機械学習サービス」で、ルーティンワークに立ち向かおう!
「お手軽な機械学習サービス」で、ルーティンワークに立ち向かおう!「お手軽な機械学習サービス」で、ルーティンワークに立ち向かおう!
「お手軽な機械学習サービス」で、ルーティンワークに立ち向かおう!
 
20100324 勉強会資料(ドメイン駆動)
20100324 勉強会資料(ドメイン駆動)20100324 勉強会資料(ドメイン駆動)
20100324 勉強会資料(ドメイン駆動)
 
大規模Perl初心者研修を支える技術
大規模Perl初心者研修を支える技術大規模Perl初心者研修を支える技術
大規模Perl初心者研修を支える技術
 
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
 

More from beyond Co., Ltd.

beyoben38.pdf
beyoben38.pdfbeyoben38.pdf
beyoben38.pdf
beyond Co., Ltd.
 
【社内勉強会資料】DNS わかんねえ
【社内勉強会資料】DNS わかんねえ【社内勉強会資料】DNS わかんねえ
【社内勉強会資料】DNS わかんねえ
beyond Co., Ltd.
 
ビヨンドでのマイグレーションとマルチクラウドの運用
ビヨンドでのマイグレーションとマルチクラウドの運用ビヨンドでのマイグレーションとマルチクラウドの運用
ビヨンドでのマイグレーションとマルチクラウドの運用
beyond Co., Ltd.
 
AlmaLinux と Rocky Linux の誕生経緯&比較
AlmaLinux と Rocky Linux の誕生経緯&比較AlmaLinux と Rocky Linux の誕生経緯&比較
AlmaLinux と Rocky Linux の誕生経緯&比較
beyond Co., Ltd.
 
やさしいIPアドレス入門
やさしいIPアドレス入門やさしいIPアドレス入門
やさしいIPアドレス入門
beyond Co., Ltd.
 
【簡潔】SMTPサーバー・POP3サーバーの役割を手短かに解説
【簡潔】SMTPサーバー・POP3サーバーの役割を手短かに解説【簡潔】SMTPサーバー・POP3サーバーの役割を手短かに解説
【簡潔】SMTPサーバー・POP3サーバーの役割を手短かに解説
beyond Co., Ltd.
 
beyond.pdf
beyond.pdfbeyond.pdf
beyond.pdf
beyond Co., Ltd.
 
「マイネットのマルチクラウド戦略について」株式会社マイネット 猪狩 拓也 様
「マイネットのマルチクラウド戦略について」株式会社マイネット 猪狩 拓也 様「マイネットのマルチクラウド戦略について」株式会社マイネット 猪狩 拓也 様
「マイネットのマルチクラウド戦略について」株式会社マイネット 猪狩 拓也 様
beyond Co., Ltd.
 
20201029 nagatani
20201029 nagatani20201029 nagatani
20201029 nagatani
beyond Co., Ltd.
 
20201029 hirata
20201029 hirata20201029 hirata
20201029 hirata
beyond Co., Ltd.
 
20201014 fujisawa
20201014 fujisawa20201014 fujisawa
20201014 fujisawa
beyond Co., Ltd.
 
20200923 miyazaki
20200923 miyazaki20200923 miyazaki
20200923 miyazaki
beyond Co., Ltd.
 
20200923 inahata
20200923 inahata20200923 inahata
20200923 inahata
beyond Co., Ltd.
 
20200923 fujisawa
20200923 fujisawa20200923 fujisawa
20200923 fujisawa
beyond Co., Ltd.
 
200813 fgdc mandai
200813 fgdc mandai200813 fgdc mandai
200813 fgdc mandai
beyond Co., Ltd.
 
Bydstudy#26 sato
Bydstudy#26 satoBydstudy#26 sato
Bydstudy#26 sato
beyond Co., Ltd.
 
Bydstudy#26 ishihara
Bydstudy#26 ishiharaBydstudy#26 ishihara
Bydstudy#26 ishihara
beyond Co., Ltd.
 
Bydstudy#26 nagasawa
Bydstudy#26 nagasawaBydstudy#26 nagasawa
Bydstudy#26 nagasawa
beyond Co., Ltd.
 
20200708 bydstudy miyazaki
20200708 bydstudy miyazaki20200708 bydstudy miyazaki
20200708 bydstudy miyazaki
beyond Co., Ltd.
 
20200423 bydstudy23-fujisawa
20200423 bydstudy23-fujisawa20200423 bydstudy23-fujisawa
20200423 bydstudy23-fujisawa
beyond Co., Ltd.
 

More from beyond Co., Ltd. (20)

beyoben38.pdf
beyoben38.pdfbeyoben38.pdf
beyoben38.pdf
 
【社内勉強会資料】DNS わかんねえ
【社内勉強会資料】DNS わかんねえ【社内勉強会資料】DNS わかんねえ
【社内勉強会資料】DNS わかんねえ
 
ビヨンドでのマイグレーションとマルチクラウドの運用
ビヨンドでのマイグレーションとマルチクラウドの運用ビヨンドでのマイグレーションとマルチクラウドの運用
ビヨンドでのマイグレーションとマルチクラウドの運用
 
AlmaLinux と Rocky Linux の誕生経緯&比較
AlmaLinux と Rocky Linux の誕生経緯&比較AlmaLinux と Rocky Linux の誕生経緯&比較
AlmaLinux と Rocky Linux の誕生経緯&比較
 
やさしいIPアドレス入門
やさしいIPアドレス入門やさしいIPアドレス入門
やさしいIPアドレス入門
 
【簡潔】SMTPサーバー・POP3サーバーの役割を手短かに解説
【簡潔】SMTPサーバー・POP3サーバーの役割を手短かに解説【簡潔】SMTPサーバー・POP3サーバーの役割を手短かに解説
【簡潔】SMTPサーバー・POP3サーバーの役割を手短かに解説
 
beyond.pdf
beyond.pdfbeyond.pdf
beyond.pdf
 
「マイネットのマルチクラウド戦略について」株式会社マイネット 猪狩 拓也 様
「マイネットのマルチクラウド戦略について」株式会社マイネット 猪狩 拓也 様「マイネットのマルチクラウド戦略について」株式会社マイネット 猪狩 拓也 様
「マイネットのマルチクラウド戦略について」株式会社マイネット 猪狩 拓也 様
 
20201029 nagatani
20201029 nagatani20201029 nagatani
20201029 nagatani
 
20201029 hirata
20201029 hirata20201029 hirata
20201029 hirata
 
20201014 fujisawa
20201014 fujisawa20201014 fujisawa
20201014 fujisawa
 
20200923 miyazaki
20200923 miyazaki20200923 miyazaki
20200923 miyazaki
 
20200923 inahata
20200923 inahata20200923 inahata
20200923 inahata
 
20200923 fujisawa
20200923 fujisawa20200923 fujisawa
20200923 fujisawa
 
200813 fgdc mandai
200813 fgdc mandai200813 fgdc mandai
200813 fgdc mandai
 
Bydstudy#26 sato
Bydstudy#26 satoBydstudy#26 sato
Bydstudy#26 sato
 
Bydstudy#26 ishihara
Bydstudy#26 ishiharaBydstudy#26 ishihara
Bydstudy#26 ishihara
 
Bydstudy#26 nagasawa
Bydstudy#26 nagasawaBydstudy#26 nagasawa
Bydstudy#26 nagasawa
 
20200708 bydstudy miyazaki
20200708 bydstudy miyazaki20200708 bydstudy miyazaki
20200708 bydstudy miyazaki
 
20200423 bydstudy23-fujisawa
20200423 bydstudy23-fujisawa20200423 bydstudy23-fujisawa
20200423 bydstudy23-fujisawa
 

20191219 byd lt#4_teraoka