👌

AWSインフラ設計のベストプラクティスを完全に理解した

に公開

自己紹介

東京在住。フリーランスで7年目、主にウェブアプリケーション開発をしてきました。
Nest.js, Ruby on Rails, Goでバックエンド開発をメインにしています。

業務でのインフラ系の経験は、SREチームのレビューを受けながらバッチ処理用に複数のAWSサービスを疎通させたことくらいでした。

きっかけ、動機、モチベ

直近で3件ほど、内製化・リプレイス系の案件に携わってきました。

SREチームのレビューを受けながらバッチ処理用に複数のAWSサービスを疎通させる経験もでき、インフラへの解像度が少しずつ上がってきました。

その経験が面白くなってきたこともあり、ちゃんとインフラを体系的に学びたいと思ったのがきっかけです。

バックエンドエンジニアとして経験年数が増えるにつれて「インフラもできる?」という相談が来ることも増えてきました。せっかくなら、ベストプラクティスをきちんと押さえた上で自信を持って設計・構築できるようになりたい、というのがモチベーションです。

学んだこと

AWS 基礎

まず、AWSアカウントをゼロから作成します。マルチアカウント構成を前提とし、環境ごとにアカウントを分離。すべてをAWS Organizations配下に整理していきます。

次に、AWS IAM Identity Centerでシングルサインオン構成を設計します。IAMスイッチロールの仕組みも学び、困った時にメンターがアカウントへアクセスする動線も整えます。

その後はネットワーク構築です。VPC、サブネット、インターネットゲートウェイ、NATゲートウェイを順番に作ります。最終的にはECS+RDS構成でヘルスチェックが通る状態を目指します。

これらの構築を通じて、下記の点を理解できました。

  • AWSリソースの命名規則
  • ECSをプライベートサブネットで動かすセキュアな構成
  • セキュリティグループの配置戦略
  • IAMの最小権限設計
  • ECSタスク実行ロールとECSタスクロールの役割分担
  • 環境変数の管理(S3とSecrets Managerの使い分け)
  • ECRへのDockerイメージのpush基盤の構築(Makefileによる自動化)
  • ALBの構成とECSサービスの紐づけ
  • ACM(証明書)によるHTTPS対応
  • DNS委任設定を使ったマルチアカウントでのドメイン管理の分離
  • NATゲートウェイからNATインスタンスへのリプレースによるコスト削減

いろんな現場でよくあるアンチパターンを理解しつつ、ゼロベースで綺麗に設計し、その設計にした根拠を説明できる構成力を身につけました。

初めてのインフラ構築、アプリケーション開発とのギャップで頭が痛かったです。ミスると動かないから神経使うのに、疎通できても達成感(実際にモノが動いている感)がなくてモチベーションとの戦いでした。


AWS 基礎コース 構成図

AWS 実践

AWS基礎で構築した内容をさらに発展させ、より現場に近いサービス構成でインフラを構築して動かしていきました。

こちらは実際に動かしてる感があって、スムーズに進むことができました!

  • 踏み台サーバーとポートフォワーディング
  • ECSタスク単発実行・DBマイグレーション
  • EventBridge Schedulerによるバッチ処理
  • SES・SQS
  • Amplify・S3・CloudFront
  • オートスケーリング・負荷試験・Fargate Spot
  • Session Managerを使った踏み台サーバーへのセキュアなアクセス設計
  • SQSのデッドレターキューを使ったメッセージ信頼性の確保
  • グレースフルシャットダウンの実装によるSQSポーリングの安全な終了
  • ECS Execを使ったコンテナ内でのデバッグ手法
  • OAC(Origin Access Control)によるCloudFront経由でのS3アクセス制御
  • Lambda@EdgeとCloudFront Functionsの違いと使い分け
  • CloudFrontのキャッシュポリシーとキャッシュ無効化(Invalidation)の設計
  • CloudFrontのビヘイビアを使ったリバースプロキシ構成
  • DKIM・SPF・DMARCによるメール認証の設計(SES構築時)
  • IAMのPassRoleの概念と適切な権限設計
  • CloudFrontのネットワーク転送コスト削減の手法
  • イケてる構成図のアウトプット

特に、グレースフルシャットダウンの実装と動作確認(実際にログを見る)、オートスケーリングの実装と動作確認(実際に負荷をかける)まで行うので、しっかり身についているなと実感しました。


AWS 実践コース 構成図

まとめ

ちょっとしたエラー対応ならAIでなんとかできる時代になったからこそ、AIを使いつつ自分の基礎力を高めていきたいと思います。

Discussion