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
570
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
AIを活用するために決めた "やらないこと" - 価値に注目する / Not betting on AI
soudai
PRO
1
520
日経電子版を支えていく Kasane Design System/fec_fukuoka
nikkei_engineer_recruiting
0
1.5k
アクセスキーこわい やめかたと漏らさない工夫
sassssan68
1
230
Genieを崇めよ
kameitomohiro
0
130
TinyGo 開発サイクルを高速化する:Go で作るエミュレータ入門
zozotech
PRO
1
740
DEFCON_CHV_CTF_Write-up.pdf
bata_24
0
150
生成AIエージェントを用いた、 手動テスト手順書から自動テストへの 変換手法の検討
magicpod
0
160
AIネイティブプロダクトで顧客価値を最大化するプロダクトエンジニアとFDEの協働
righttouch
PRO
0
310
synctest時代のhttptest Go 1.27で変わるHTTPサーバテストの裏側 / go conference2026 synctest and httptest
budougumi0617
1
3k
AI 時代のスタートアップエコシステ厶から考究する技術的負債との向き合い方
m3m0r7
PRO
2
2.1k
20260912_スクフェス三河
kgnkhkr
0
380
AIエージェントの自己改善をどう設計するか / How to Design Self-Improvement for AI Agents
22mi
23
15k
Featured
See All Featured
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
50
10k
Optimizing for Happiness
mojombo
378
71k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
490
30 Presentation Tips
portentint
PRO
1
390
How to make the Groovebox
asonas
2
2.4k
Crafting Experiences
bethany
1
340
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
580
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
480
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.4k
VelocityConf: Rendering Performance Case Studies
addyosmani
331
25k
Documentation Writing (for coders)
carmenintech
77
5.5k
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が詰まった良記事
ご清聴ありがとうございました!