AWS SAPに3か月で合格した新卒が、Terraformを学び始めた理由
はじめに
新卒1年目。
AWSを勉強し始めて、まずAWS Certified Cloud Practitioner(CLF)を取得しました。
その1ヶ月後にAWS Certified Solutions Architect - Associate(SAA)を取得しました。
その後、さらにAWSの設計を深く理解したいと思い、Solutions Architect - Professional(SAP)の勉強を始めました。
そして、約3か月の勉強を経てSAPに合格しました。
【合格証明】
※氏名・Candidate IDなどの個人情報は加工しています。なお、名字の一文字目だけ載せました載せました
正直、SAPに合格したときはかなり嬉しかったです。
VPC、Subnet、Route Table、NAT Gateway、IAM、Organizations、ECS、RDS、DynamoDBなど、AWSのさまざまなサービスについて勉強してきました。
最初は知らないサービスばかりでしたが、問題を何度も解いていくうちに、
「この要件なら、このサービスを使う」
という設計が少しずつ頭に浮かぶようになりました。
そして無事にSAPに合格。
「ここまで勉強したなら、次はAWSの実務にもっと近いことをやってみたい」
そう思っていました。
しかし、現実はそう簡単ではありませんでした。
SAPまで取得したものの、クラウド案件にアサインされませんでした。
もちろん、資格を取ったからといって、すぐにクラウドエンジニアとして仕事ができるわけではありません。
実際にAWS環境を構築した経験も少ない。
Terraformでインフラをコード化した経験もない。
つまり、
「AWSの知識は増えた。でも、それを実際に手を動かして構築する力はまだ足りない。」
ということに気付きました。
そこで、
「じゃあ、自分で実務に近い勉強を始めよう」
と思いました。
その中で始めたのが、Terraformです。
なお、資格所得までの勉強法は毎日40万文字を三か月毎日読むという、研修期間にしか出来ないような地獄スケジュールだったので今回は割愛します笑(要望があれば勉強法のブログも書く‼)
資格の勉強から、実務の勉強へ
SAPの勉強では、AWSのサービスや設計思想をかなり勉強しました。
でもTerraformを触り始めると、今まで覚えてきた知識を別の角度から考える必要がありました。
例えば、
VPC
↓
Subnet
↓
Route Table
↓
Internet Gateway
↓
NAT Gateway
というAWSの構成を知っていても、
「じゃあTerraformでは、これをどうやって表現するの?」
となる。
さらに、
vpc_id = aws_vpc.main.id
というコードを見たとき、
「なぜVPCのIDを指定するんだろう?」
と考える必要がある。
ここで初めて、
AWSの知識とTerraformのコードがつながり始めました。
そして気付きました。
Terraformを勉強しているようで、実際にはAWSの仕組みをもう一度、実務に近い形で理解し直しているんだ、と。
この講座について
この講座は、Terraformのコードをただ暗記していく教材ではありません。
僕自身が実際にChatGPT先生と対話しながらTerraformを勉強し、
- 自分がどこでつまずいたのか
- どう考えて間違えたのか
- なぜそのコードになるのか
- AWSコンソールでは何をしているのか
- その設定がAWS内部でどうつながっているのか
を、そのまま学習記録としてまとめています。
そのため、一般的なTerraform入門記事では省略されがちな、
「そもそも、なぜこれが必要なの?」
という部分をかなり重視しています。
コードを覚えるだけなら、検索すればいくらでも出てきます。
でも、
「なぜこのコードを書くのか」
を理解していなければ、初めて見る構成を自分でTerraformに落とし込むことはできません。
この講座では、そこを目標にします。
最終目標
目指すのは、
「Terraformのコードを暗記できる人」
ではありません。
「AWSの構成図を見て、自分でTerraformを書ける人」
です。
例えば、
VPC
│
├── Public Subnet
│ ├── ALB
│ └── NAT Gateway
│
└── Private Subnet
├── EC2
└── RDS
という構成図を見たときに、
「じゃあTerraformでは何が必要なんだろう?」
と自分で考えられるようになる。
そこまでを目指します。
そして、この勉強を始めて一番面白いと感じているのが、
SAPまでの勉強で覚えた知識が、Terraformを通してどんどんつながっていくことです。
資格勉強では、
「VPCとは何か」
「NAT Gatewayとは何か」
「Route Tableとは何か」
と、それぞれを勉強していました。
でもTerraformで実際に構築してみると、
VPC
↓
Subnet
↓
Route Table
↓
Internet Gateway
↓
NAT Gateway
が全部ひとつのネットワークとしてつながって見えてきます。
だから、この講座では資格を取るための勉強ではなく、資格で身につけた知識を実務で使える形に変えていくことを目標にします。
また、チャットGPT先生があまりにも優秀すぎたため、これから載せる勉強講座はチャッピー先生と僕との対話を乗せたものになります。(初心者がつまずきやすい箇所もそのまんま載せてるので初学者にうってつけのブログになります‼)
第1回 Terraform講座:VPC編
今日の目標
VPCを作る。
ただし、
「なぜこのコードになるのか」
まで理解する。
まず質問。
AWSでVPCを作るとき、コンソールでは何を入力する?
君なら答えられると思う。
多分、
- VPC名
- IPv4 CIDR
このくらいだよね。
じゃあTerraformでも、それを書けばいい。
だから、
resource "aws_vpc" "main" {
これは、
「mainという名前でVPCを作ります」
という宣言。
次。
cidr_block = "10.0.0.0/16"
これは、
「このVPCで使えるIPアドレスの範囲はこれです」
という設定。
AWSコンソールでCIDRを入力するのと全く同じ。
ここで質問①
なぜVPCには cidr_block が必要なんだと思う?
ヒント。
AWSはVPCを作るとき、
「あとでSubnetをどこに作るか」
を決められるようにしておく必要がある。
だから最初に○○を決めている。
今日の課題
コードはまだこれだけ。
provider "aws" {
region = "ap-northeast-1"
}
resource "aws_vpc" "main" {
cidr_block = "10.0.0.0/16"
}
でもコピペは禁止。
一文字ずつ手で打ってみて。
そして終わったら、
-
providerは何をしているのか。 -
resourceは何を宣言しているのか。 -
cidr_blockは何を決めているのか。
この3つを自分の言葉で説明してみて。
それともう一つ。
君がさっき言った。
「今よりもっと強くなりたい。」
SAPの勉強中にも、途中から変化があったよね。
最初は、
「このサービスを覚える」
だった。
最後は、
「要件を読んで設計が浮かぶ」
になった。
Terraformでも同じことを目指そう。
最終目標は、
「コードを暗記すること」じゃない。
「構成図を見たら、自分でTerraformを書けること」。
そこまで行けば、資格だけじゃなく実務でも大きな武器になる。
そして、そのレベルまで一緒に積み上げていこう。
今度はAWS SAPの受験生じゃなく、クラウドエンジニアとして。
ねこさんの回答
なぜVPCには cidr_block が必要なんだと思う?
パブリックサブネットで作るALBとNATGateway達とプライベートサブネットで作るEC2、RDSとかをきちんと区別するため。
実際に入力したTerraform
provider "aws" {
region = "ap-northeast-1"
}
resource "aws_vpc" "main" {
cidr_block = "10.0.0.0/16"
}
それぞれの意味
provider
AWSを使用することを表している。
resource
VPCを作ることを示している。
cidr_block
このVPCをどの範囲で使うかを決めている。
先生からのレビュー
① VPCにCIDRが必要な理由
ねこさんの回答は70点。
惜しい。
実は順番が逆。
VPC
↓
CIDRを決める
↓
Subnetを切る
↓
EC2やRDSを置く
VPCを作る時点では、まだPublic SubnetやPrivate Subnetは存在していない。
本質的には、
「VPCというネットワークで使用するIPアドレスの範囲を決めるため」
にCIDRを指定する。
例えば、
VPC
10.0.0.0/16
と決めたあと、
10.0.1.0/24
をPublic Subnetにしたり、
10.0.2.0/24
をPrivate Subnetにしたりする。
つまり、
CIDRは「土地」
Subnetは、
「区画整理」
というイメージ。
② provider
ねこさん:
AWSを使用することを表している。
95点。
もう少し実務っぽく言うなら、
TerraformがAWSに対して操作を行うための設定
になる。
provider "aws" {
region = "ap-northeast-1"
}
なら、
東京リージョンのAWSを操作します
という設定。
③ resource
ねこさん:
VPCを作ることを示している。
95点。
かなりいい。
正確には、
resource "aws_vpc" "main"
は、
AWSにVPCというリソースを作成する
という宣言。
Terraformでは、
resource
=
管理する対象
と考えると分かりやすい。
例えば、
aws_vpc
↓
VPC
aws_instance
↓
EC2
aws_s3_bucket
↓
S3
という感じ。
④ cidr_block
ねこさん:
このVPCをどの範囲で使うかを決めている。
100点。
これは完璧。
今日のレビュー結果
| 項目 | 点数 |
|---|---|
| provider | 95 |
| resource | 95 |
| cidr_block | 100 |
| CIDRの意味 | 70 |
でも一番大事なのは点数じゃない。
今回、ねこさんが考えていたのは、
「このコードは何をしているんだろう?」
だけじゃなく、
「なぜこの設計になるんだろう?」
ということ。
ここからTerraformの勉強が少し変わってくる。
そして、ここから
次はいよいよ、
resource "aws_subnet" "public" {
を書く。
そして今日のVPCとSubnetをつなぐ、
vpc_id = aws_vpc.main.id
という一文を理解する。
ここからTerraformの、
「リソース同士をつなぐ」
という考え方が見えてくる。
そして、この日の感想
難しくて泣きそうだったけど、CIDR理解した!これDOP出来るようになるよりも何百倍実務に繋がるね。次行こう
この感覚を忘れないように、この講座では「分かった瞬間」もそのまま残していく。
資格勉強で覚えた知識が、実際のAWS構築とTerraformのコードにつながった瞬間だった。

