Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Terraform_on_AWS入門.pdf
Search
takayukiOchiai
December 05, 2019
Technology
560
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
140
Other Decks in Technology
See All in Technology
2026.06.13_AI時代に事業会社が「SIer出身エンジニア」を求める理由 / Why Businesses Seek Engineers with a System Integrator Background in the AI Era
jumtech
0
1k
現地で盛り上がった WWDC26 Keynote
zozotech
PRO
1
200
ポケモンの型をTypeScriptの型システムで表現してみた
subroh0508
0
370
非エンジニアがClaudeと挑んだ「1ヶ月間プロダクト30本ノック」
askokc
0
330
AIソロプレナー時代に2ヶ月で20人増員した事業創造会社の開発組織の話
miyatakoji
0
600
FDE という解 ― 暗黙知と明示知をつなぐ、伴走型エンジニアリング ―
otanet
0
130
Claude Code×Terraform IaC テンプレート駆動開発
itouhi
1
490
LLMと共に進化するプロセスを目指して
ymatsuwitter
12
4k
AIっぽい文章を採点して人間らしく直すアプリを作ってみた
yama3133
2
130
NAB Show 2026 動画技術関連レポート / NAB Show 2026 Report
cyberagentdevelopers
PRO
0
170
Amazon Bedrock AgentCore ワークショップ JAWS UG TOHOKU / amazon-bedrock-agentcore-workshop-jawsug-tohoku-2026
gawa
9
690
ルールやカスタム機能、どう活かす?ハンズオンで体感するIBM Bobの出力コントロール
muehara
1
130
Featured
See All Featured
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
330
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.7k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
2
1.1k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5.9k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
231
23k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
610
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.1k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
Unsuck your backbone
ammeep
672
58k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
Art, The Web, and Tiny UX
lynnandtonic
304
22k
We Have a Design System, Now What?
morganepeng
55
8.2k
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が詰まった良記事
ご清聴ありがとうございました!