運用保守しかやったことないのにTerraformにてAWS環境を構築してみた
はじめに
こんにちは、インフラエンジニアのPayです。
今回は、運用保守しか経験がなかった自分が、個人で AWS 環境を Terraform を使って構築してみた話をまとめてみます。
「AWSの構築をこれから学びたい方」「AWS初学者の方」
「上流工程に挑戦したい」「自分の市場価値を高めたい」
そんな方に、少しでも参考になれば嬉しいです。
背景:なぜ構築に挑戦したのか?
私は入社して、現場で約1年間、運用保守を担当していました。
今は次の案件待機中。待機時間はSAA取得を目標に励んでいます。
業務外でも「キャリアアップにつながる行動」に使いたいと思い、AWS環境構築にチャレンジしました。
理由はシンプルです:
-
運用保守だけではキャリアの幅が狭くなる
-
経験- 実績を“自分で”作りたかった
Terraformとは何か
AWSをこれから学ぶ人や初学者の方はまず、「Terraformとは?」と疑問を持たれることでしょう
Terraformとは
IaC(Infrastructure as Code)という考え方に基づき、
AWSなどのクラウドリソースを ソースコードで 管理します。
なぜ Terraform を選んだのか?
AWS には CloudFormation もありますが、自分は Terraform を選択しました。
理由は以下の通りです:
-
マルチクラウド対応:Azure や GCP にも応用可能
-
IaC の市場ニーズ:Infrastructure as Code は今後ますます求められるスキル
-
Git と相性が良い:構成のバージョン管理がしやすい
構築した環境と構成
構築対象:グループ向けの「収支管理アプリ」
目的は、なるべくコストを抑えて「フルマネージド+セキュア」な構成にすること。
-
運用人数が少ない為、メンテナンス等が最小限で済む為にフルマネージドな構成にする必要がある
-
決済情報等を取り扱うため、情報漏洩を防ぐため高いセキュリティ性が必要
使用サービス一覧(無料枠中心)
-
Lambda
-
IAM
-
VPC / Security Groups / NAT Gateway
-
ALB(Application Load Balancer)
-
Route 53
-
DynamoDB
-
S3
-
CloudWatch Logs
-
AWS WAF
-
Cognito
-
Secrets Manager
一部サービス(NAT Gateway や ALB)は有料なので、稼働時間- トラフィックを制限することでコストを抑えました。
処理フロー
【処理の流れ】
モバイルアプリ(React Native)
↓ HTTPS通信(/api/register など)
ALB(Application Load Balancer)
↓
Lambda 関数群(Python)
├─ cashamp-api-register(支払い登録)
└─ cashamp-api-calendar(集計処理)
- VPC内 Private Subnet に配置
- IAM Role:DynamoDB・ENI・Logs にアクセス許可
↓
DynamoDB テーブル群
├─ Payments:tour_id, timestamp, amountなど
└─ Participants:user_id, tours, 名前など
【外部API連携(Slack通知など)】
↑
NAT Gateway(Public Subnet)
- Elastic IPで外部通信を許可
- LambdaがSlack連携時に使用
セキュリティ設計
コンポーネントと対策内容
ALB
- HTTPS (443) のみ許可
- ACMでSSL証明書を利用
Security Group
- ALB→Lambda:特定ポートで通信許可
- Lambda→NAT:外部通信を許可
DynamoDB
- IAM Roleでアクセス制御
- VPC内アクセス限定(Publicアクセスなし)
Lambda
- Private Subnet配置で直接外部通信不可
- NAT経由でのみ外部連携可
- IAMで最小権限の原則に従う
Terraform に大苦戦した話
正直、かなり苦労しました。
研修で少し触った程度では太刀打ちできず、何度もエラーに悩まされました。
ハマりポイントの一例:
-
依存関係による謎のエラー
-
モジュール化によって関数- 変数が激増 → 混乱
-
terraform plan で何度も怒られる
-
エラー文の意味が全然わからない
でもその分、「調べる-試す-壊す」の繰り返しで、確実に力がつきました。
Terraform を用いた構築のメリット
Terraform は試行錯誤に向いているツールだと実感しました。
-
apply までは料金がかからない → 思い切って試せる
-
モジュール単位で整理 → サービス単位で深掘りできた
-
Git 管理 → 変更履歴の安心感
-
ドキュメント読みまくる習慣がついた(意外と大事)
今後やりたいこと
これで満足せず、さらに実践的なスキルを身につけたいです!
-
AWS-SAA の取得(学習中)
-
CloudFront や Step Functions などの高度サービス導入
-
コスト最適化を本格的に学ぶ
-
構成のドキュメント化と他者への説明力を鍛える
最後に
「運用保守しかやってこなかった自分でも、Terraform を使って AWS 環境を構築できた」
これは本当に、自信につながる経験でした。
もしこの記事が少しでも参考になった方は、ぜひ「いいね」やコメントで教えてください!
Discussion
グループ向けの「収支管理アプリ」が完成したらそれも別途記事にしますのであしからず