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
Amazon Bedrock AgentCore ワークショップ JAWS UG TOHOKU / amazon-bedrock-agentcore-workshop-jawsug-tohoku-2026
gawa
9
690
小さくはじめるSLI/SLO ~育てながら組織に定着させる実践知~ / Starting Small with SLI/SLOs: Building Adoption Through Continuous Growth
nari_ex
5
1.7k
200個のGitHubリポジトリを横断調査したかった
icck
0
110
NAB Show 2026 動画技術関連レポート / NAB Show 2026 Report
cyberagentdevelopers
PRO
0
170
AmazonRoute 53ではじめてのドメイン取得!HTTPS化までの道のりを整理してみた
usanchuu
3
130
AIソロプレナー時代に2ヶ月で20人増員した事業創造会社の開発組織の話
miyatakoji
0
600
2026TECHFRESH畢業分享會 - 葬送的通靈師:化系統與用戶雜訊成行動訊號
line_developers_tw
PRO
0
800
20260619 私の日常業務での生成 AI 活用
masaruogura
1
120
攻撃者視点で考えるDetection Engineering
cryptopeg
1
1.2k
地球に⽣きるAI —GeoAIと「中間領域」— / AI Living on Earth — GeoAI and the “Intermediate Layer” —
ykiyota
0
280
プロダクト開発から業務改善コンサルまで。事業全体へ「染み出す」ことで広がるエンジニアの可能性
ham0215
0
100
Disciplined Vibes: Scaling AI-Assisted Engineering
sheharyar
0
130
Featured
See All Featured
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.5k
Git: the NoSQL Database
bkeepers
PRO
432
67k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
190
Building a Scalable Design System with Sketch
lauravandoore
463
34k
Optimizing for Happiness
mojombo
378
71k
Building Adaptive Systems
keathley
44
3k
Raft: Consensus for Rubyists
vanstee
141
7.5k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.1k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
200
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
290
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
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が詰まった良記事
ご清聴ありがとうございました!