サイトアイコン 協栄情報ブログ

AWS構築の振り返り(7/1~7/14)

お世話になっております。
クラウド事業部の錦織です。

これまで実際にAWSを使う機会はほとんどありませんでしたが、今回設計・構築する機会を頂き学ぶことができました。

本ブログでは、その経験をもとに学んだことを記載していきます。※なお、本記事で紹介する構築方法はあくまで一例です。実際の環境や目的に応じて構築をお願いいたします。

構築の目的

高可用性を備えたAWS構成を設計・構築できるようになることを目指しました。

構成図概要


VPCとサブネット構築

対象画面:AWS Management Console > サービス > VPC > 左メニュー「VPC」>「VPCを作成」

操作手順

・「VPCとその他のリソースを作成」を選択
・ 名前 myapp を入力
・ IPv4 CIDR を 10.0.0.0/16 に設定
・ IPv6 CIDR は「なし」
・ テナンシーは「デフォルト」
・ サブネット数はパブリックサブネット2、プライベートサブネット4
・ サブネット CIDR ブロックは手動カスタマイズ
・ DNS ホスト名・DNS 解決オプションは両方「有効」
・ 「VPC を作成」ボタンをクリック

構成まとめ

・プロジェクト名:myapp
・IPv4 CIDR:10.0.0.0/16
・AZ:ap-northeast-3a / ap-northeast-3b
・サブネット構成:パブリック2、プライベート4


NATゲートウェイ構築手順

目的

プライベートサブネットのEC2インスタンスからインターネットへの通信を可能にする。NATゲートウェイを構築し、冗長化・可用性を確保します。

1. NATゲートウェイの作成

2. 冗長化(複数AZ配置)

3. プライベートサブネットのルート設定


セキュリティグループ構築手順

目的

ALB、EC2、RDS、EFSの各構成要素間で必要な通信を制御しつつ、管理しやすい環境を構築します。

ALB 用 SG(インターネット向け)

EC2 用 SG(ALB 経由通信)

RDS 用 SG(EC2 から DB 接続)

EFS 用 SG(EC2 からファイル共有)


RDSの作成

目的

RDS の高可用性と耐障害性を確保するため、適切にサブネットグループを作成し、マルチAZ構成

1. サブネットグループの作成

2. RDS インスタンスの作成

3. マルチAZ構成の有効化


EFS ファイルシステムの作成手順

目的

EC2 インスタンス間でのファイル共有を実現する為、EFSを構築。

  1. EFS コンソールを開く

    • AWS マネジメントコンソールにサインインし、EFSを開きます。
  2. ファイルシステムの作成

    • 左メニューから「ファイルシステム」を選択し、「ファイルシステムを作成」をクリックします。
  3. 設定のカスタマイズ

    • 「カスタマイズ」を選択し、以下の設定を行います:

      • 名前myapp-efs
      • VPCmyapp-vpc
      • タイプリージョン(Regional)
      • 自動バックアップ無効
  4. ネットワーク設定

    • マウントターゲット
      • private1 サブネット
      • private2 サブネット
    • セキュリティグループmyapp-efs-sg(EFS 用に事前作成したセキュリティグループを指定)
    • ファイルシステムポリシー:不要(研修用途のため設定しません)
  5. 確認と作成

    • 設定内容を確認し、「作成」をクリックします。

IAM ロールの作成手順

目的

EC2 インスタンスに必要な IAM ロールを作成し、SSM、RDS、CloudWatch エージェント用の権限を付与します。これにより、インスタンスからの RDS 接続、CloudWatch へのメトリクス送信、SSM を利用した管理が可能となります。

1. EC2 用 IAM ロールの作成

  1. IAM コンソールを開く

    • AWS マネジメントコンソールにサインインし、IAMを開きます。
  2. ロールの作成

    • 左メニューから「ロール」を選択し、「ロールを作成」をクリックします。
  3. 信頼されたエンティティの設定

    • 「信頼されたエンティティの種類」で「AWS サービス」を選択し、「EC2」を選択します。
  4. ポリシーのアタッチ

    • 以下のポリシーを選択します:
      • AmazonSSMManagedInstanceCore
      • CloudWatchAgentServerPolicy
      • SecretsManagerReadWrite(RDS 接続用)
  5. ロールの設定

    • ロール名:myapp-ssm-rds-cloudwatch-role
    • 名前タグ:myapp-ssm-role
  6. ロールの作成

    • 設定内容を確認し、「ロールを作成」をクリックします。

EC2 インスタンスの作成手順

  1. EC2 ダッシュボードを開く

    • AWS マネジメントコンソールにサインインし、EC2を開きます。
  2. インスタンスの起動

    • 左メニューから「インスタンス」を選択し、「インスタンスを起動」をクリックします。
  3. インスタンスの設定

    • 名前タグ:myapp-ec2-1(または myapp-ec2-2
    • AMI:Amazon Linux 2023(64-bit, x86)
    • インスタンスタイプ:t2.micro または t3(無料利用枠を使用)
    • キーペア:なし(SSM を使用)
    • ネットワーク設定:
      • VPC:myapp-vpc
      • サブネット:myapp-vpc-subnet-private1-ap-northeast-3a(または myapp-vpc-subnet-private2-ap-northeast-3c
      • パブリック IP:無効
    • セキュリティグループ:ec2-security-myapp
  4. IAM ロールのアタッチ

    • 「IAM ロールの設定」で、先ほど作成したロール myapp-ssm-rds-cloudwatch-role を選択します。
  5. ユーザーデータの設定
    任意のスクリプトを設定

  6. インスタンスの起動

    • 設定内容を確認し、「インスタンスを起動」をクリックします。

SSM接続設定

VPCエンドポイント作成(SSM用)

  1. VPCコンソール → 左メニュー「エンドポイント」 → 「エンドポイントを作成」
  2. サービスを選択
    • com.amazonaws.ap-northeast-3.ssm
    • com.amazonaws.ap-northeast-3.ssmmessages
    • com.amazonaws.ap-northeast-3.ec2messages
  3. 名前タグ:myapp-ssm-vpce
  4. DNS有効にする
  5. VPC:myapp-vpc
  6. サブネット:private1, private2
  7. セキュリティグループ:myapp-ssm-sg
  8. 注意:S3エンドポイント作成不要
  9. 各エンドポイントを作成

EC2にロールをアタッチ

  1. EC2コンソール → 対象インスタンスを選択
  2. 「アクション」 > 「セキュリティ」 > 「IAMロールを変更」
  3. ロールに myapp-ssm-role を選択し更新

ALB(Application Load Balancer)作成手順

ターゲットグループの作成

  1. インスタンスを選択
    • ターゲットグループ名:alb-target-myapp
    • プロトコル・ポート:HTTP:80
    • VPC:myapp-vpc
    • ヘルスチェックパス:/index.html
    • インスタンス:EC2を2台とも選択して登録(保留中にして含める)

ALBの作成

  1. AWSコンソール → EC2ダッシュボード

  2. 左メニュー「ロードバランサー」→「ロードバランサーを作成」

  3. 設定内容:

    • タイプ:Application Load Balancer
    • 名前:myapp-alb
    • スキーム:インターネット向け
    • VPC:myapp-vpc
    • マッピング:public1, public2
    • セキュリティグループ:alb-myapp(※デフォルトSGは削除)
    • リスナー:HTTP(80)
    • ターゲットグループ:alb-target-myapp(上で作成したものを選択)
  4. **ALB作成

⏳ プロビジョニングに時間がかかることがあります。


Route 53設定:ドメイン解決 & ACM検証

新規でレコードを作成する場合:

  1. Route 53 ホストゾーンを開く(既存のゾーンを使用)

  2. [レコードを作成] をクリック

    • レコード名:myapp
    • タイプ:A – IPv4
    • ルーティング:シンプルルーティング
    • エイリアス:ON
    • エイリアス先:
      • Application and Classic Load Balancer
      • リージョン:大阪(ap-northeast-3)
      • 対象:作成したロードバランサー(例:myapp-alb)
  3. [作成] をクリック

    数分〜数十分でドメイン名でアクセス可能に。

    既にRoute 53でレコードが存在する場合:

    • レコード編集 → ルーティング先を「今回作成したALB」に変更
    • 保存して完了

ACM証明書作成 & HTTPSリスナー設定手順

【ACM証明書の発行(ALB用)】

目的:ALBでHTTPS通信を可能にする証明書を発行する
画面:ACM → [証明書をリクエスト]

操作手順:

  1. AWS Certificate Managerを開き、「証明書をリクエスト」
  2. サブドメインを入力
  3. 検証方法:DNS検証を選択(推奨)
  4. キータイプ:RSA を選択
  5. 証明書作成後、ACM画面中央のリンクからRoute53にDNSレコード(CNAME)を追加
  6. Route53にCNAMEレコードが追加されたことを確認

【ALBでHTTPSリスナー追加】

目的:HTTPSアクセスをALBで受け付ける
画面:EC2 → ロードバランサー → 対象のALB → [リスナーとルール]

操作手順:

  1. 「リスナーの追加」をクリック
  2. プロトコル:HTTPS
  3. ポート:443
  4. ターゲットグループ:alb-target を選択(既存のターゲットグループ)
  5. 証明書:ACMで作成したSSL証明書を選択
  6. (任意)リスナータグを追加
  7. 「追加作成」をクリック

最後にセキュリティグループの確認


HTTPアクセスのHTTPSリダイレクト設定手順

目的:HTTPアクセスをHTTPSへリダイレクトする

【操作手順】

  1. EC2コンソール → 対象のロードバランサー(ALB)を選択
  2. 「リスナーとルール」タブから http(ポート80)を選択し、「ルールを編集」
  3. アクションで「URL にリダイレクト」を選択
  4. リダイレクト先 URL に https://:443 を指定
  5. ステータスコードは「301(恒久的リダイレクト)」を選択
  6. [保存] をクリック

【セキュリティグループの確認】


ALBアクセスログ保存設定手順(S3バケット作成)

【目的】
ALBのアクセスログをS3に保存する

【S3バケット作成】

  1. AWSコンソール → S3 → 「バケットを作成」
  2. 以下を設定:
    • バケット名:myapp-alb-logs
    • リージョン:ap-northeast-1
    • オブジェクト所有者:ACL無効
    • パブリックアクセス:すべてブロック
    • 注意:バケット名はグローバルで一意であること
  3. 「バケットを作成」をクリック

【バケットポリシーの変更】
バケット作成後:

  1. 対象バケットを選択 → 「アクセス許可」タブ → 「バケットポリシーを編集」
  2. バケットポリシーの貼り付け

SNS設定手順

【目的】
EC2とALBの監視を行い、異常時にメール通知する

■ SNSトピックの作成
画面:SNS → 左メニュー「トピック」 → [トピックを作成]

  1. 名前:myapp-sns-topic
  2. タイプ:標準
  3. サブスクリプション:メール、通知先アドレスを入力
  4. 名前タグ:myapp-sns-topic
  5. 「トピックを作成」→「サブスクリプションを作成」
  6. 確認メールを開いて「confirm」リンクをクリック

CloudWatch エージェント設定(※メモリ監視用)

【インストール & 設定】
対象EC2でagentのインストールを実行。
・監視対象を含んだJSONを設定。

【IAMロール設定】

CloudWatch アラーム作成手順

📍 画面操作手順:
CloudWatch > 左メニュー「アラーム」 > 「アラームを作成」
━━━━━━━━━━━━━━━━━━━━━━━
① EC2 CPUアラーム(myapp-ec2-1, myapp-ec2-2)
━━━━━━━━━━━━━━━━━━━━━━━
・メトリクス:EC2 > Per-Instance Metrics > CPUUtilization
・条件:CPU使用率が 80%以上、90%以上
・通知:myapp-sns-topic
・タグ名:
 - myapp-cpu-alarm-80
 - myapp-cpu-alarm-90

━━━━━━━━━━━━━━━━━━━━━━━
② EC2 メモリアラーム(CloudWatch Agent 必須)
━━━━━━━━━━━━━━━━━━━━━━━
・メトリクス:CWAgent > mem_used_percent
・条件:メモリ使用率が 80%以上、90%以上
・通知:myapp-sns-topic
・タグ名:
 - myapp-mem-alarm-80
 - myapp-mem-alarm-90

━━━━━━━━━━━━━━━━━━━━━━━
③ ALB HealthyHostCount アラーム
━━━━━━━━━━━━━━━━━━━━━━━
・メトリクス:ApplicationELB > HealthyHostCount
・条件:ターゲット数の減少を検知し通知
・通知:myapp-sns-topic
・タグ名:
 - myapp-alb-health-alarm


振り返り

実際に手を動かして構築を進めると分からない部分やエラーに何度も直面し、試行錯誤の連続となりました。こうした過程を通じて、理解してから手を動かすことの重要性に気づかされました。
短期間の取り組みではありましたが、内容は非常に充実しており良い経験でした。まだまだ未熟ではありますが、手を動かして学び続ける姿勢を忘れず成長していきたいと考えています。
今後ともどうぞよろしくお願いいたします。

モバイルバージョンを終了