👁

応用課題

この章では、Terraform講座で学んだ内容を応用した課題に取り組みます。

1. 課題の概要

この講座で学んだ内容をもとに、シンプルなタスク管理APIを動作させるAWSインフラを Terraformでデプロイ します。AWSコンソールからの手動操作ではなく、コードとしてインフラを定義することで、再現性のあるデプロイを実現します。

その上で、構築した内容について、手順を追えたかではなく、なぜその構成を選んだのかを自分の言葉で説明できるか を確認する課題です。メンタリングでの口頭報告 がゴールです。

2. 事前準備

2.1 サンプルアプリケーションのダウンロード

zipには FastAPI + SQLAlchemy で実装されたシンプルなタスク管理APIが入っています。EC2上での実行を想定しており、同梱の setup.sh で systemd サービス化までのセットアップが完了します。

2.2 必要なツール

この章では、以下のツールを使用します。まだインストールしていない場合は、リンク先の手順に沿って準備をお願いします。

ツール名 関連箇所 理由
Visual Studio Code Visual Studio Codeのインストール 応用課題のコードを記述するエディタとして使用する
Terraform Terraformのインストール AWSリソースをコードで構築するために使用する
AWS CLI AWS CLIのインストール TerraformがAWSに接続する際の認証情報を設定するために使用する
Git Git/GitHubのセットアップ ソースコードのバージョン管理に使用する

2.3 必要なアカウント

この章では、以下のアカウントを使用します。まだ用意していない場合は、リンク先の手順に沿って準備をお願いします。

アカウント名 関連箇所 理由
AWSアカウント AWSアカウントの作成 応用課題のAWSリソースを構築する環境として使用する
GitHubアカウント Git/GitHubのセットアップ 応用課題のソースコードのホスティング先として使用する

3. 必須要件

3.1 Terraform でのインフラ構築(EC2構成)

サンプルアプリケーションを動作させるためのAWSインフラを Terraform でデプロイすること。以下を含めること。

  • VPC(Public SubnetとPrivate Subnetを2つ以上のAZに分散)
  • ALB(Public Subnet)
  • EC2インスタンス(Amazon Linux 2023、Private Subnet、FastAPIアプリケーションを動作させる)
  • RDS(MySQL 8.x、Private Subnet、マルチAZ構成)
  • セキュリティグループ(ALB・EC2・RDS間および外部からの通信を制御)

アプリケーションのセットアップ自体は、Terraform でインフラを構築した後に SSH 経由で setup.sh を実行する形で構いません。EC2 の UserData などで起動時に自動セットアップする形を取れれば、より一歩進んだ実装になります。

3.2 コードの構成

  • リージョン・CIDR・インスタンスタイプなどの値は variable で外部化 していること(ハードコーディング禁止)
  • リソース間の依存関係は リソース参照aws_vpc.main.id など)で表現していること
  • ファイルは main.tf / variables.tf / outputs.tf / terraform.tfvars に分割していること
  • 主要なリソースID・エンドポイントは output として外部に公開していること
  • .gitignoreterraform.tfstate*.terraform/*.tfvars(機密情報を含む場合)を除外していること

3.3 README

README に以下を記載すること。

  • 変数化した値の選定理由
  • つまずいたポイント・工夫した箇所

4. 発展課題(任意)

4.1 ECS/Fargateへの移行

EC2ベースで構築した構成を、ECS/Fargateに移行する。

  • アプリケーションをコンテナ化する(Dockerfile + .dockerignore
  • コンテナイメージを ECR にpushし、ECSタスク定義から参照する
  • ECSクラスタを作成し、Fargate起動タイプでタスクを実行する
  • ALBターゲットグループを EC2 から ECS(Fargate)に切り替える
  • 不要となった EC2 関連のTerraformリソースを削除する

4.2 モジュール化

責務やライフサイクルが異なるリソースを モジュール に分割し、再利用しやすい構成にする。例として、ネットワーク基盤(VPC・Subnet等)と、アプリケーション層(EC2 や ECS・ALB等)を別モジュールに分離する形が考えられる。モジュールごとに variables.tf / outputs.tf を用意し、入出力のインターフェースを明示する。

4.3 リモートバックエンドの設定

  • Terraformのstateを S3 + DynamoDB でリモートバックエンド管理する設計に変更する

4.4 独自ドメインでのHTTPS化

  • Route53で独自ドメインを設定する
  • ACMでSSL証明書を発行し、ALBでHTTPS化する

5. メンタリング報告

この応用課題は、構築できたら メンタリングで自分の言葉で説明する ことがゴールです。手順通りに動かせることと、その意図や仕組みを理解していることは別物です。実務では、構築した環境について上司・チームメンバー・お客様に説明する場面が必ず発生します。「なんとなく動いた」で終わらせず、自分の言葉で語れるレベルまで引き上げるのがこの課題の狙いです。

メンタリングでは、メンターから「なぜそうしたのか」「他の選択肢は検討したか」「実務だとどうするか」といった踏み込んだ質問を行います。即答できる状態まで準備しておいてください。

5.1 事前準備の進め方

事前準備の進め方は自由です。話しやすい形式を選んでください。

  • スライドやドキュメントで事前にまとめておく
  • Notion やマークダウンなどでメモを整理しておく
  • 事前にブログにまとめておく
  • 事前資料なしで口頭のみで説明する

など、何でも構いません。

メンターから「どのような質問が来そうか」を事前に考えておくことも、準備の一環として取り組んでみてください。

5.2 報告観点

報告の単位(どこまでをひとまとまりとして説明するか)は、自分で考えて整理してください。構築した内容のうち、伝えるべきだと思う単位で区切り、それぞれについて以下の4つの観点で整理してメンタリングで報告してください。

1. 何をやったか(自分の言葉で)

  • 自分が実際に行った内容を自分の言葉で説明する
  • 事実だけでなく「なぜそうしたのか」まで踏み込む
  • 「課題に書かれている通りに作業した」という説明では不十分

2. どんなメリットがあるか

  • 採用した技術・構成・ツールが、何を解決するために存在するのかを言語化する
  • 「便利だから」「教材で言われたから」ではなく、具体的な利点を自分の言葉で説明する

3. 改善点・より良い方法

  • 自分が構築したものの限界や、もう一段ブラッシュアップする余地を挙げる
  • セキュリティ・コスト・運用負荷など、視点はなんでも構わない
  • すぐに直せなくても、課題感として認識できていることが重要

4. 類似技術との違い

  • 採用した技術と似た選択肢を1つ以上挙げ、それぞれの違いを説明する
  • 自分が選ばなかった選択肢を意識できているかが問われる観点

6. 提出形式

6.1 GitHubリポジトリ

実装したコード(main.tf / variables.tf / outputs.tf / terraform.tfvars / .gitignore / README.md など)をアップロードしたGitHubリポジトリのURLを記載してください。

6.2 まとめ

実装中に苦労したこと、工夫したこと、学んだことを記載してください。

応用課題の採点はプレミアムプランでご利用いただけます。

プランのアップグレード

この教材は役に立ちましたか?

いいねをたくさんいただけると、制作者の励みになり、より多くのセクションが作れるようになります。

感想を一言(任意)

いただいたコメントは次の制作のヒントになります。ぜひお気軽にご投稿ください。

このコメントは他の受講生には公開されません。DevOps Camp運営が、教材改善のために確認します。

0 / 2000