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
SDDの運用にめげずに向き合った話
sansantech
PRO
1
130
おそらく日本で唯一のDevRelインターン生として
husengs7
0
170
ミイダス株式会社 テックチームのご紹介 / MIIDAS Tech Team
miidas
0
160
Incremental HTTP
kazuho
5
2.1k
生成AIを使って「人が」考える技術 ― AI時代の人機共想と実践ノウハウ|UNITT AC2026
ishiirikie
0
560
[2026-09-30]ロックンロールは鳴り止まないっ - 信頼性かまってちゃん - 「データ駆動を投げ捨ててまで。」追いかける信頼性改善に向けた取り組みの話
tosite
0
210
生成AIと進める探索的データ分析(2026.10.03 第122回Tokyo.R勉強会)
tatamiya
2
1.4k
インバスケット試験対策アプリを 作って見えたAIエージェント構築 ナレッジ2選
shichijoyuhi
1
130
組み立てて楽しむ AWS Blocks 入門
kmiya84377
0
220
[AWS 秋のクラウドオペレーション祭り 2026]AWS DevOps Agentで変わるリリースと運用対応 ~リリース管理機能と Directed actions のご紹介~
furuton
4
1k
あなたの知らないAmazon VPC Route Server/Amazon VPC Route Server you don't know about
masakiokuda
2
230
DWH の限界突破! AI エージェント向け爆速リアルタイムデータ基盤 ClickHouse
jozono
1
210
Featured
See All Featured
What's in a price? How to price your products and services
michaelherold
247
13k
Evolving SEO for Evolving Search Engines
ryanjones
0
310
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.6k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
The Invisible Side of Design
smashingmag
301
52k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
74
42k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
1
620
RailsConf 2023
tenderlove
30
1.6k
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
3.3k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
570
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.8k
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が詰まった良記事
ご清聴ありがとうございました!