Submit Search
Terraformで始めるInfrastructure as Code
Download as PPTX, PDF
7 likes
4,928 views
Takahisa Iwamoto
Terraformで始めるInfrastructure as Code
Internet
Read more
1 of 43
Download now
Downloaded 15 times
1
2
3
4
5
6
7
8
9
10
11
12
13
Most read
14
15
16
17
18
19
20
Most read
21
22
23
24
25
26
27
28
29
30
31
32
Most read
33
34
35
36
37
38
39
40
41
42
43
More Related Content
What's hot
(20)
PDF
Dockerからcontainerdへの移行
Kohei Tokunaga
PDF
CloudFrontのリアルタイムログをKibanaで可視化しよう
Eiji KOMINAMI
PDF
AWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design Pattern
Amazon Web Services Japan
PDF
20180704 AWS Black Belt Online Seminar Amazon Elastic File System (Amazon EFS...
Amazon Web Services Japan
ODP
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
pospome
PDF
20200811 AWS Black Belt Online Seminar CloudEndure
Amazon Web Services Japan
PDF
AWS Black Belt Online Seminar 2017 AWS Elastic Beanstalk
Amazon Web Services Japan
PDF
AWS Black Belt Online Seminar 2017 Deployment on AWS
Amazon Web Services Japan
PDF
Rest ful api設計入門
Monstar Lab Inc.
PDF
ソーシャルゲームのためのデータベース設計
Yoshinori Matsunobu
PPTX
設計と実装で 抑えておきたい サービスクラスと例外
Takuya Sato
PPTX
Redisの特徴と活用方法について
Yuji Otani
PDF
実装して理解するLINE LoginとOpenID Connect入門
Naohiro Fujie
PPTX
NGINXをBFF (Backend for Frontend)として利用した話
Hitachi, Ltd. OSS Solution Center.
PDF
多要素認証による Amazon WorkSpaces の利用
Amazon Web Services Japan
PPTX
SPAセキュリティ入門~PHP Conference Japan 2021
Hiroshi Tokumaru
PDF
20200212 AWS Black Belt Online Seminar AWS Systems Manager
Amazon Web Services Japan
PDF
20191001 AWS Black Belt Online Seminar AWS Lake Formation
Amazon Web Services Japan
PDF
OSS+AWSでここまでできるDevSecOps (Security-JAWS第24回)
Masaya Tahara
PDF
AWS Black Belt Tech Webinar 2016 〜 Amazon CloudSearch & Amazon Elasticsearch ...
Amazon Web Services Japan
Dockerからcontainerdへの移行
Kohei Tokunaga
CloudFrontのリアルタイムログをKibanaで可視化しよう
Eiji KOMINAMI
AWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design Pattern
Amazon Web Services Japan
20180704 AWS Black Belt Online Seminar Amazon Elastic File System (Amazon EFS...
Amazon Web Services Japan
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
pospome
20200811 AWS Black Belt Online Seminar CloudEndure
Amazon Web Services Japan
AWS Black Belt Online Seminar 2017 AWS Elastic Beanstalk
Amazon Web Services Japan
AWS Black Belt Online Seminar 2017 Deployment on AWS
Amazon Web Services Japan
Rest ful api設計入門
Monstar Lab Inc.
ソーシャルゲームのためのデータベース設計
Yoshinori Matsunobu
設計と実装で 抑えておきたい サービスクラスと例外
Takuya Sato
Redisの特徴と活用方法について
Yuji Otani
実装して理解するLINE LoginとOpenID Connect入門
Naohiro Fujie
NGINXをBFF (Backend for Frontend)として利用した話
Hitachi, Ltd. OSS Solution Center.
多要素認証による Amazon WorkSpaces の利用
Amazon Web Services Japan
SPAセキュリティ入門~PHP Conference Japan 2021
Hiroshi Tokumaru
20200212 AWS Black Belt Online Seminar AWS Systems Manager
Amazon Web Services Japan
20191001 AWS Black Belt Online Seminar AWS Lake Formation
Amazon Web Services Japan
OSS+AWSでここまでできるDevSecOps (Security-JAWS第24回)
Masaya Tahara
AWS Black Belt Tech Webinar 2016 〜 Amazon CloudSearch & Amazon Elasticsearch ...
Amazon Web Services Japan
Similar to Terraformで始めるInfrastructure as Code
(20)
PDF
QuickDemo HashiCorp Terraform with Microsoft Azure and VMware vSphere
Wataru Unno
PPTX
Step by stepで学ぶTerraformによる監視付きAWS構築
Yo Takezawa
PDF
ゼロからはじめるTerraformでのDevOps2021
Wataru Unno
PDF
AWSにおけるIaCを活かしたTerraformの使い方2選! ~循環型IaCとマルチクラウドチックなDR環境~ (HashiTalks: Japan 発...
NTT DATA Technology & Innovation
PDF
Terraform始めました
w1mvy pine
PDF
Provisioning Nutanix VMs with Terraform
Wataru Unno
PDF
terraform基礎
risa buto
PDF
Terraformをいじってみて
ssuser11d6e6
PDF
OSSを活用したIaCの実現
Trainocate Japan, Ltd.
PDF
Terraformを活用した自動化デモ_F5-NGINX_Community-20200805
shinyatsukasaki
PDF
見終わったらすぐできる! VMware & Nutanix ユーザーのためのTerraform Cloud
Wataru Unno
PDF
Azure でサーバーレス、 Infrastructure as Code どうしてますか?
Kazumi OHIRA
PDF
AWS CloudFormationによるInfrastructure as Codeの実現
HIRA
PDF
TerraformによるIaCの導入
IAJ Co.,Ltd.
PDF
元運用担当者が,現役時代に本当に欲しかったもの. Osc2014 kansai@kyoto terraform introduction
Masahito Zembutsu
PDF
Terraform
Shigeyuki Takeuchi
PDF
IaC事始め Infrastructure as Code やってみる?
大使 梶原
PDF
OpenStack上の環境構築自動化に向けたTerraform/Pulumiの活用
Keiichi Hikita
PDF
Gmo media terraform slide
hashicorpjp
PDF
インフラセキュリティブートキャンプ #seccamp
Masahiro NAKAYAMA
QuickDemo HashiCorp Terraform with Microsoft Azure and VMware vSphere
Wataru Unno
Step by stepで学ぶTerraformによる監視付きAWS構築
Yo Takezawa
ゼロからはじめるTerraformでのDevOps2021
Wataru Unno
AWSにおけるIaCを活かしたTerraformの使い方2選! ~循環型IaCとマルチクラウドチックなDR環境~ (HashiTalks: Japan 発...
NTT DATA Technology & Innovation
Terraform始めました
w1mvy pine
Provisioning Nutanix VMs with Terraform
Wataru Unno
terraform基礎
risa buto
Terraformをいじってみて
ssuser11d6e6
OSSを活用したIaCの実現
Trainocate Japan, Ltd.
Terraformを活用した自動化デモ_F5-NGINX_Community-20200805
shinyatsukasaki
見終わったらすぐできる! VMware & Nutanix ユーザーのためのTerraform Cloud
Wataru Unno
Azure でサーバーレス、 Infrastructure as Code どうしてますか?
Kazumi OHIRA
AWS CloudFormationによるInfrastructure as Codeの実現
HIRA
TerraformによるIaCの導入
IAJ Co.,Ltd.
元運用担当者が,現役時代に本当に欲しかったもの. Osc2014 kansai@kyoto terraform introduction
Masahito Zembutsu
Terraform
Shigeyuki Takeuchi
IaC事始め Infrastructure as Code やってみる?
大使 梶原
OpenStack上の環境構築自動化に向けたTerraform/Pulumiの活用
Keiichi Hikita
Gmo media terraform slide
hashicorpjp
インフラセキュリティブートキャンプ #seccamp
Masahiro NAKAYAMA
Ad
More from Takahisa Iwamoto
(11)
PPTX
Ansibleハンズオン勉強会
Takahisa Iwamoto
PPTX
800件の事例から見た、オンプレからAWSへのマイグレーションの秘訣
Takahisa Iwamoto
PPTX
フロントエンドエンジニアに伝えたい 常時SSLとCDNの話
Takahisa Iwamoto
PPTX
20161212 岩本
Takahisa Iwamoto
PPTX
20160925 jaws kyoto
Takahisa Iwamoto
PPTX
concrete5とAWSのほどよい関係
Takahisa Iwamoto
PPTX
コンクリに関係無いAnsible
Takahisa Iwamoto
PPTX
2014年版 抑えておきたいサーバセキュリティ
Takahisa Iwamoto
PPTX
第2回勉強会資料 岩本(配布用)
Takahisa Iwamoto
PPTX
押さえておきたいサーバーセキュリティ
Takahisa Iwamoto
ZIP
サーバー監視
Takahisa Iwamoto
Ansibleハンズオン勉強会
Takahisa Iwamoto
800件の事例から見た、オンプレからAWSへのマイグレーションの秘訣
Takahisa Iwamoto
フロントエンドエンジニアに伝えたい 常時SSLとCDNの話
Takahisa Iwamoto
20161212 岩本
Takahisa Iwamoto
20160925 jaws kyoto
Takahisa Iwamoto
concrete5とAWSのほどよい関係
Takahisa Iwamoto
コンクリに関係無いAnsible
Takahisa Iwamoto
2014年版 抑えておきたいサーバセキュリティ
Takahisa Iwamoto
第2回勉強会資料 岩本(配布用)
Takahisa Iwamoto
押さえておきたいサーバーセキュリティ
Takahisa Iwamoto
サーバー監視
Takahisa Iwamoto
Ad
Terraformで始めるInfrastructure as Code
1.
Terraformで始めるInfrastructure as Code
2.
自己紹介 • 名前:岩本 貴久 •
所属:技術1課 • わさびちゃん →
3.
はじめに 3
4.
手作業は何故ダメ? 作成・変更履歴 作業ログ ログを見ればわかる・・・?(作業者によって精度はまちまち) 再現性 作業ログ&手順書 怪しい 構成管理 毎回構成図の更新 その構成図、最新ですか? 4
5.
Infrastructure as Code Infrastructure
as Code(IaC)とは? インフラをコードで扱い、プログラムと同じ様にコードで管理・更新を行うこと 5
6.
IaCのメリット 作成・変更履歴 Gitのコミットログ見ろ 再現性 コード実行しろ 構成管理 コード見ろ 6
7.
IaCを運用する心構 IaCを本気でやる(運用する)心構 絶対にマネコンは触らない ステートファイルを保持し続ける デプロイのフロー 障害対応 最後までそのツールを使い続ける覚悟 7
8.
IaCに必要なもの 8
9.
IaCのツール CloudFormation Terraform ← 今日はこの話 Ansible 他・・・? 9
10.
ここから、本題 10
11.
Terraformとは? HashiCorp(はしこーぷ)社がオープンソースで開発しているプロビジョニ ング ツール AWS以外に、GCP、Azure、OpenStack、Vmware、他、に対応 書式はDSL(domain-specific language/ドメイン固有言語)で記載 複数のプロバイダに同時にプロビジョニングも可能 11
12.
Terraformの仕組み 12 AWS API terraform plan
terraform apply terraform destroy main.tf ローカル環境 terraform.tfstate
13.
Terraformの範囲 Terraformはプロビジョナーと呼ばれる、各プラットフォーム向けアダプタ が手供されている。 (AWSで言えば)AWS API がで構築できる範囲となる。 local-exec
Provisioner Terraformの実行環境でローカルコマンドを走らせることができる。 サンプル 13 provisioner "local-exec”{ command = "echo ${aws_instance.web.private_ip} >> private_ips.txt" }
14.
Terraformのインストール Terraformのインストールは、バイナリファイルを任意のディレクトリに配 置するだけ。 MacならBrewでインストールが可能 14
15.
Terraformを始める 1、ディレクトリを作成 2、「main.tf」ファイルを作成 15 $ mkdir sample-prj $
cd sample-prj $ touch main.tf
16.
プロバイダーの設定(AWS) 「main.tf」内に以下の記載をする プロジェクトの初期化 16 provider "aws" { access_key
= "ACCESS_KEY_HERE" secret_key = "SECRET_KEY_HERE" region = "ap-northeast-1" } $ terraform init
17.
クレデンシャル、ベタ書き、ダメゼッタイ1 スタイリッシュなエンジニアはクレデンシャルも、ご安全に。 1、Terraform実行時の引数で指定する。 2、環境変数で値を渡す。 3、「 terraform.tfvars 」に記載する。 17 $
terraform apply -var 'access_key=XXXXXXXXXXXXXXXXXXXXXX’ -var 'secret_key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' $ export TF_VAR_access_key="AKIAXXXXXXXXXXXXXXXXXX" $ export TF_VAR_secret_key="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" aws_access_key = "AKIAXXXXXXXXXXXXXXXXXX" aws_secret_key = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
18.
クレデンシャル、ベタ書き、ダメゼッタイ2 AssumeRoleが使えない Profileを指定する。 Aswarp https://github.com/fujiwara/aswrap 18 $ AWS_PROFILE=HOGE terraform
xxxx $ AWS_PROFILE=HOGE aswarp terraform xxxx
19.
スタイリッシュな形 「main.tf」には、リージョンのみを記載する。 クレデンシャルは(AWS-CLIの)Profileで指定する。(←おすすめ) Terraform実行時の引数で指定する。 環境変数で値を渡す。 「 terraform.tfvars 」に記載する。 19 provider
"aws" { region = "ap-northeast-1" }
20.
変数の利用 Terraform内では変数の利用が可能 「 terraform.tfvars 」 「
terraform.tfvars 」以外のファイルを指定する場合は、引数で指定する。 20 variable "foo" {} resource "aws_s3_bucket" "s3_bucket" { bucket = "${var.foo}” } foo = ”hoge-name"
21.
リソースの設定(VPCを作る) TerrafromでVPCを作るサンプルコード 21 resource "aws_vpc" "myVPC"
{ cidr_block = "10.1.0.0/16" instance_tenancy = "default" enable_dns_support = "true" enable_dns_hostnames = "false" tags { Name = "myVPC" } }
22.
他のリソースを参照する Terraform内で他のAWSリソースを参照する。 22 resource "aws_vpc" "myVPC"
{ cidr_block = "10.1.0.0/16" instance_tenancy = "default" enable_dns_support = "true" enable_dns_hostnames = "false" tags { Name = "myVPC" } } resource "aws_internet_gateway" "myGW" { vpc_id = "${aws_vpc.myVPC.id}" # myVPCのid属性を参照 }
23.
テンプレートファイルを分割する 拡張子「.tf」ファイルに適当に分割する。 AWSサービス単位に分けるのがオススメ。 同一ディレクトリ内の「.tf」ファイルは実行時に読み込まれる。 「main.tf」 ファイルは必須。 23
24.
リソースの依存関係 基本的にはTerraform側で依存関係を解決。 一部、作成のみを実行して作成完了を待たないリソースがある。 リソースの作成を待つには「depends_on」を用いる。 24 resource "aws_s3_bucket" "example"
{ bucket = "terraform-getting-started-guide" acl = "private" } resource "aws_instance" "example" { ami = "ami-2757f631" instance_type = "t2.micro" depends_on = ["aws_s3_bucket.example"]
25.
変数型の利用 Map型 List型 25 variable "images" { type
= "map" default = { us-east-1 = "image-1234" us-west-2 = "image-4567" } } variable "zones" { default = ["us-east-1a", "us-east-1b"] }
26.
利用できる関数 https://www.terraform.io/docs/configuration/interpolation.html#built -in-functions 例 file(path) ローカルからファイルを読み込む。 join(delim, list) 文字列を結合する。 他 26
27.
アウトプット 「Output」を用いて、作成されたリソースの値を出力 27 output "ip" { value
= "${aws_eip.ip.public_ip}" }
28.
Terraformの実行 ドライラン 適用/アップデート 環境の削除 28 $ terraform plan $
terraform apply $ terraform destroy
29.
Terraformでの(インフラ)状態管理 ファイル「terraform.tfstate」 tfstateの中身はJSON このファイルがコンフリクト、消失すると死ぬ Gitで管理するのは非推奨 共有方法 Atlas Consle 29
30.
ちょっと先行くTerraformの使い方 30
31.
ステイタス共有する Terraformは管理対象のリソースを、ファイル「terraform.tfstate」で管理 する。 ディフォルトでは、カレントディレクトリに作成される。 S3 Backend 31 terraform { backend
"s3" { bucket = "mybucket" key = "path/to/my/key" region = "us-east-1" } }
32.
環境を切り替える(ワークスペース) 同じTerraformのコードをワークスペース(環境)ごとに使い分けることの できる機能。 例えば、Production/developmentと2つのworkspaceを作成し、同じ Terraformコードを利用して、2つの環境のリソースを作成できる。 32
33.
Lambdaファンクションのデプロイ 33 data "archive_file" "sample_function"
{ type = "zip" source_dir = "lambda/sample_function" output_path = "lambda/upload/sample_function.zip" } resource "aws_lambda_function" "sample_function" { filename = "${data.archive_file.sample_function.output_path}" function_name = "sample_function" role = "${aws_iam_role.lambda_sample_function.arn}" handler = "lambda_function.lambda_handler" source_code_hash = "${data.archive_file.sample_function.output_base64sha256}" runtime = "python3.6" memory_size = 128 timeout = 30 }
34.
同じEC2を複数台作成する 34 resource "aws_instance" "web"
{ count = 2 ami = "ami-1234567" instance_type = "t2.micro" key_name = ”HOGE.key" vpc_security_group_ids = [ "sg-987654", ] subnet_id = "subnet-012345" }
35.
同じEC2を複数のリージョンに配置する 35 variable "subnets" { default
= { "0" = "subnet-12345" "1" = "subnet-56789" } } resource "aws_instance" "web" { count = 2 ami = "ami-12345" instance_type = "t2.micro" key_name = ”hoge.key" vpc_security_group_ids = [ "sg-123456", ] subnet_id = "${lookup(var.subnets, count.index%2)}" }
36.
異なるEC2を複数台作成する1 「main.tf」 36 variable "keypaer-name" { } variable
"subnets" { type = "list" } variable "ec2-param" { type = "list" }
37.
異なるEC2を複数台作成する2 「terraform.tfvars」 37 subnets = [ { subnet-cidr
= "10.2.1.0/24" subnet-az = "ap-northeast-1a" }, { subnet-cidr = "10.2.2.0/24" subnet-az = "ap-northeast-1c" } ] ec2-param = [ { ami-id = "ami-08847abae18baa040" ec2-instance-type = "t2.micro" ec2-volume-size = "20" ec2-subnet = 1 } ]
38.
異なるEC2を複数台作成する3 「vpc.tf」 38 resource "aws_vpc" "my-vpc"
{ cidr_block = "10.11.0.0/16" instance_tenancy = "default" enable_dns_support = "true" enable_dns_hostnames = "false" } resource "aws_subnet" "public" { count = "${length(var.subnets)}" vpc_id = "${aws_vpc.my-vpc.id}" cidr_block = "${lookup(var.subnets[count.index], "subnet-cidr")}" availability_zone = "${lookup(var.subnets[count.index], "subnet-az")}" }
39.
異なるEC2を複数台作成する4 「ec2.tf」 39 resource "aws_instance" "ec2"
{ count = "${length(var.ec2-param)}" ami = "${lookup(var.ec2-param[count.index], "ami-id")}" instance_type = "${lookup(var.ec2-param[count.index], "ec2-instance-type")}" key_name = "${var.keypaer-name}" subnet_id = "${element(aws_subnet.public.*.id, "${lookup(var.ec2-param[count.index], "ec2- subnet")}")}" root_block_device = { volume_type = "gp2" volume_size = "${lookup(var.ec2-param[count.index], "ec2-volume-size")}" } }
40.
異なるEC2を複数台作成する5 技術的にできるけど、めっちゃ複雑になるからやめたほうがいい。 40
41.
EC2を作るベストプラクティス1 同じ内容のインスタンス単位を、1セクションする。 複数台の場合はLoopで作成する。 パラメータ値をMAPで外部に切り出す。 41
42.
EC2を作るベストプラクティス2 「terraform.tfvars」 「ec2.tf」 42 ec2-param = { ami-id
= "ami-08847abae18baa040" ec2-instance-type = "t2.micro" ec2-volume-size = "20" } resource "aws_instance" "ec2" { count = 2 ami = "${lookup(var.ec2-param, "ami-id")}" instance_type = "${lookup(var.ec2-param, "ec2-instance-type")}" subnet_id = “XXXXXXX” root_block_device = { volume_type = "gp2" volume_size = "${lookup(var.ec2-param, "ec2-volume-size")}" } }
43.
まとめ マネコン、ダメ、ゼッタイ IaCは覚悟の問題 Terraformは素晴らしい 43
Download