Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Terraform_on_AWS入門.pdf
Search
takayukiOchiai
December 05, 2019
Technology
580
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Terraform_on_AWS入門.pdf
takayukiOchiai
December 05, 2019
More Decks by takayukiOchiai
See All by takayukiOchiai
明日からできないReactVer1.0
takayukiochiai
0
150
Other Decks in Technology
See All in Technology
1人アドミンな私はAWSアカウント申請をSlackで完結したい!
ysuzuki
0
100
CI/CDではもう遅い - 人とAIが迂回しないDevSecOps Verify基盤の再設計 -
kintotechdev
1
480
AIに書かせて、プラットフォームで縛る ― EKSプラットフォームで実践した責任境界と権限設計
elmodev09
1
1.1k
20260930_Gemma4_Hands-on
tsho
0
170
Apache Iceberg が拓く AI 時代のオープンレイクハウス
tomtanaka
0
200
Meet AgentCore Identity Consent Portal
hironobuiga
2
140
MCPゲートウェイを作って運用してわかったこと — Agent時代の権限管理の現在地
mtpooh
6
1.6k
高負荷プロダクション環境におけるAWS Lambdaのリアル 〜スケールとコストを左右する実行ライフサイクルの技術仕様〜
maimyyym
2
830
3人で1000GPU超を統合運用する?マルチクラウド&オンプレを跨ぐ、構築と運用のリアル!
kazukun0716
2
770
GitHub Agentic Workflows を触ってみる
htkym
2
880
生成AIを使って「人が」考える技術 ― AI時代の人機共想と実践ノウハウ|UNITT AC2026
ishiirikie
0
460
20260915deck.gl-raster を使ってみた
rena1208
0
170
Featured
See All Featured
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.6k
My Coaching Mixtape
mlcsv
0
330
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
510
AI: The stuff that nobody shows you
jnunemaker
PRO
10
1.1k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
2
2.2k
A Tale of Four Properties
chriscoyier
163
24k
Utilizing Notion as your number one productivity tool
mfonobong
4
600
Become a Pro
speakerdeck
PRO
31
6.3k
Believing is Seeing
oripsolob
1
230
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
18k
A better future with KSS
kneath
240
18k
Transcript
Terraform on AWS入門ハンズオン 2019-12-05 @paddyOTI
自己紹介 • @paddyOTI • お仕事 ◦ 渋谷のどっかでアドテクエンジニアやってます ◦ 基本サーバーサイドの仕事が多かったが、最近は インフラ系の仕事やったり数値分析したりも
アジェンダ • Terraformって何?使うとなんで嬉しいの? • 今日作るインフラ構成 • ハンズオン • Terraformのインストール ◦
コードの説明 ◦ コマンドの説明 • 参考資料
今日のゴール • Terraformの基本的な文法を押さえる • Terraformの基本的なコマンドを押さえる • 自力でドキュメントを追えるようにする ◦ どんなリソースにどんな設定ができるか、全てを覚えるのは現実的でない ◦
必要になった時に調べられるようにする
Terraformって何?使うと何が嬉しいの? • Motivation ◦ こんなことありませんか? ▪ インフラ構築手順を手動で何度も行うのは時間がかかる ▪ (手順書があるとしても)作業中に手順ミスをしてしまって事故ってしまった …
▪ 導入後に構成変更があるかもしれない。簡単かつミスが発生しない形で構成や設定を変更し たい ▪ ドキュメントがあったが、構築後に構成変更があったのか、変更内容がドキュメントに反映さ れていない
Terraformって何?使うと何が嬉しいの? • Solution ◦ インフラ構築内容をコードで記述して管理できるようにする ▪ 一度書いてしまえば、あとは実行するだけで書いた通りのインフラ環境が作られる ▪ 設定変更したいときは、コードの一部を修正してコードを実行すれば容易に環境変更できる •
Gitなどによる設定のバージョン管理もできるようになる ◦ インフラ構築・設定変更を自動化する ▪ 手動で行う作業を無くし、本質的な設計などに注力できる ▪ 手動で行うことによる設定ミスがなくなる
類似ツール(Cloudformation)との違い Terraform Cloudformation 独自のスクリプト言語 (HCL)で記述する JSON, yaml形式で記述する OSSなのでAWS, GCP, Azureなどのインフラ
構築に対応できる AWSサービスの一種のため AWSでしか利用できない AWS公式サポート、最新の変更に追従しや すい
今日作るインフラ構成
今日のソースコード https://github.com/takayuki-ochiai/supporterz-terraform-tut orial
Terraformのインストール • Mac/Linuxの人はtfenvを使ってTerraformのバージョンを管理できる状態でインス トールすることをオススメします ◦ プロジェクトによって微妙にバージョンの異なる Terraformを使うことがよくある ◦ 簡単にTerraformのバージョンを切り替えができた方が色々便利 ◦
Windowsだとtfenv使えないっぽいので、今回は 0.12.6を公式サイトからダウンロードしてください
Terraformのインストール • Macの場合
Terraformのインストール • Windows10の場合 ◦ 下記のURLからTerraformのzipアーカイブをダウンロード ▪ 64bitの場合 • https://releases.hashicorp.com/terraform/0.12.6/terraform_0.12.6_windows_amd64. zip
▪ 32bitの場合 • https://releases.hashicorp.com/terraform/0.12.6/terraform_0.12.6_windows_386.zip ◦ C:\hashicorp\terraform\0.12.6 というディレクトリを作っておき zipファイルの中身を C:\hashicorp\terraform\0.12.6 に展開 ▪ C:\hashicorp\terraform\0.12.6\terraform.exe ができればOK ◦ C:\hashicorp\terraform\0.12.6 にPATHを通す ◦ PowerShellなどからterraform -vなどが呼べれば成功!
Terraformの書き方 • Terraformの設定は.tfという拡張子をつけたファイルに書きこみます • TerraformのコードはHCL(Hashicorp Configration Language) という言語で実装し ていきます •
terraform applyというコマンドを実行すると、カレントディレクトリの全てのtfファイル の設定を読み込んでリソースを作り始めます ◦ 同じディレクトリのtfファイルは全て読まれるので、同じ内容であれば tfファイルは1つにまとめても、 複数のtfファイルに分割しても、実行される結果は変わりません。 ◦ 全てのリソースを1つのファイルに記述してしまうと見通しが悪くなるので、適宜ファイルは分割した 方がいいです ▪ 今回はそんなに量もないので、最低限しか分割してませんが …
Terraformの書き方(基本設定) • terraformブロックを記述 ◦ terraform ブロック ▪ 使用するTerraformのバージョンやTerraformが管理するリソースの情報をどこで管理するか など、Terraform自体の設定をする ◦
今回はTerraformのバージョン指定と、リソースの状態を管理するファイルの保存先を指定していま す。 ▪ 複数人でTerraformを管理する場合は、 tfstateファイルはローカルではなく S3などに保存する ように設定しましょう ▪ DynamoDBを使ってStateLockするとより安心
Terraformの書き方(基本設定2) • providerブロックを記述 ◦ providerブロック ▪ Terraform自体はAWS/GCP/Azureなどに対応しているため、どのプラットフォームを利用する のかを設定する ▪ Terraformはコアな処理を担当する
Terraform本体と各プラットフォームに依存した処理を担 当 するプロバイダーで実行ファイルが分割されている ▪ 今回はAWS providerを利用する。リソースを構築するリージョンを指定
Terraformの書き方(VPC作成) • まずはVPCを作ってみましょう ◦ 新しく作成したいリソースは resourceというブロックを使って定義します ◦ resouce “aws_vpc” “リソース名”
で、”aws_vpc.リソース名” で他のリソースから参照できる VPCを 作ることができます
早速実行してみよう • なにはともあれ terraform init ◦ Terraformの実行に必要なプロバイダ用のバイナリをダウンロードしてくれる • 実行前にterraform planで変更予定内容を表示する
◦ 要するにDry run ◦ 作成したコードに文法的な誤りがないか、適用した結果どんなリソースが作成される予定か(実行 計画)を表示してくれる • 実行計画を見て想定通りであれば、 terraform applyで実行! • うまくいったことが確認できたら terraform fmtでコードをコードのスタイルを揃えて おきましょう
サブネット インターネットゲートウェイ • 同様にresourceブロックを書 いていく ◦ 先にresourceブロックで定義し たvpcの中にサブネットを作り たい ◦
18行目、32行目、45行目に注 目 ◦ TYPE.NAME.ATTRIBUTEの形 式で書けば他のresourceブ ロックで定義したリソースの情 報にアクセスできる ◦ aws_vpc.terraform_example _vpc.id がそれ
ルートテーブル • ルートテーブル本体 (aws_route_table)と、ルート テーブルに登録するルーティ ング情報(aws_route)を定義 する • どのサブネットにどのルート テーブルを関連づけるか
aws_route_table_associati onで設定する
セキュリティグループ • セキュリティグループ本体 (aws_security_group)とセ キュリティグループに設定す るルール (aws_security_group_rule) を定義する
EC2インスタンス • 異なるAZに同じ設定のEC2インスタンスを構築したい ◦ あらかじめテンプレートを用意して使いまわせるようにする ◦ moduleという形で作成したいリソースのテンプレートを作っておき、 main.tfからは moduleブロックを使って呼び出すようにする •
EC2インスタンスを構築するにはEC2インスタンスの構築に利用する AWS公式のAMIを指定しなければいけない ◦ 既にAWS上に存在するリソースを利用するには dataブロックを使う
モジュールの呼び出し方 • モジュールを利用したい場合、 moduleブロックを使って呼び出 すことができる • default値がない変数は全て記 述しないとエラーになるため注 意する
モジュールの作り方① • modulesディレクトリを作成 ◦ モジュール用のコードはこのディレ クトリの下に作成する • modulesディレクトリの中に http_serverディレクトリを作り ◦
Terraformはモジュールをディレク ト リ単位で分割して作成する ◦ モジュールの具体的内容を定義す るmain.tfと、moduleで定義した内 容を外部から参照するための変数 名を定義するoutputs.tfを作成
モジュールの作り方② • モジュールが受け取る引数を指 定 ◦ moduleでリソースを構築する時に 動的に決定したい内容は引数で受 け取るようにする ◦ 引数を宣言したいときは
variable属 性を使う ◦ 今回はどのサブネットに、どんなセ キュリティグループを付与して、イ ンスタンスタイプをどうするかなど を指定できるようにする ◦ デフォルト値を指定したいときは default属性を利用する
モジュールの作り方③ • AWSの公式AMIを指定する ◦ Terraformで管理されていない、既 にAWS上に存在するリソースを参 照するには、dataブロックを使用す る ◦ 今回はAMIの名前とstateを条件
に、条件に該当する AMIのなかで 最新のものを利用する
モジュールの作り方④ • dataブロックやmoduleの引数と して与えられる変数をもとに、 EC2インスタンスのリソースを作 成する
モジュールの作り方⑤ • moduleで作ったEC2インスタン スのidはあとで利用するため、 moduleの呼び出し元から参照 できるようにしておく • outputブロックを使わないと、モ ジュール外部からモジュールで 作成したリソースの情報にアク
セスできるようにならない!
ロードバランサー • 実装が簡単に済むため、あ えてクラシックロードバラン サーを使用する • モジュールで構築したEC2イ ンスタンスのIDは module.NAME.ATTRIBUTE で参
照する
もう一度実行してみよう • もう一度 terraform init ◦ moduleを新しく追加・更新したときは terraform initでmoduleを読み込む必要があ る
• 実行計画を見て想定通りであれば、 terraform applyで実行! • aws elb describe-load-balancersコマン ドなどでDNS名を把握してアクセスして みて、apacheのテストページが表示され ていれば成功! $ aws elb describe-load-balancers { "LoadBalancerDescriptions": [ { "LoadBalancerName": "terraform-example-elb", "DNSName": "terraform-example-elb-935365947.ap-northeast-1.elb.amazonaws.com", "CanonicalHostedZoneName": "terraform-example-elb-935365947.ap-northeast-1.elb.amazonaws.com", "CanonicalHostedZoneNameID": "Z14GRHDCWA56QT", "ListenerDescriptions": [ { "Listener": { "Protocol": "HTTP", "LoadBalancerPort": 80, "InstanceProtocol": "HTTP", "InstancePort": 80 }, "PolicyNames": [] } ],
リソースを削除する • このまま放置しているとずっと課金されてしまうので、リソースを削除する ◦ terraformで作成したリソースを削除したいときは、 terraform destroyコマンドを実行する
押さえておくべきドキュメント・書籍 • 公式のAWS Providerドキュメント (英語) ◦ https://www.terraform.io/docs/providers/aws/ ◦ AWSの各種resourceブロックやdataブ ロックで指定できるオプション、使用例
が細かく載っている ◦ 画面左上の検索窓から検索もできるの で使いやすい ◦ 使ったことがないリソースを作るときは 一度は確認した方がいい
押さえておくべきドキュメント・書籍 • 実践Terraform ◦ もともと同人誌として売り出されていた Pragmatic Terraform on AWSという本 をもとに、大幅に加筆されて商業誌化さ
れた ◦ 同人誌版のクォリティが非常に高く、期 待できる ◦ Terraform をAWSで使うときのリファレ ン ス、あるいはTerraformの設計に迷った 時の指針として利用できる
押さえておくべきドキュメント・書籍 • Terraform職人入門: 日々の運用で 学んだ知見を淡々とまとめる ◦ 実際にTerraformを運用する視点から、 実践的なTIPsが詰まった良記事
ご清聴ありがとうございました!