Amazon Q Developer を使ってパラメータシートに基づいて AWS 環境の構成チェックが出来るか試してみた

Amazon Q Developer を使ってパラメータシートに基づいて AWS 環境の構成チェックが出来るか試してみた

Clock Icon2025.06.16

いわさです。

私はよく AWS インフラの構築を行うのですが、お仕事で構築する際には事前にパラメータシートなるものを作成しお客様と構築内容についての合意ができた上で、AWS 環境を構築します。
そして構築後はパラメータシートどおり作成されているかチェックするのですが、このチェックがなかなか時間のかかる作業です。

昨今流行りの生成 AI によってこのパラメータシートにあわせたチェックをもう少し効率的にうまいことやってくれるのではないかと最近思い始めました。
今回試してみましたので、その様子を紹介します。

チェックする環境とパラメータシートの用意

今回は次の VPC + ALB + EC2 の環境を構築しようと思います。

https://github.com/Tak1wa/aws-cfn-alb-ec2

そして、上記 CloudFormation テンプレートからパラメータシートを作成しました。Amazon Q Developer でマークダウン形式で作成してもらっています。

https://github.com/Tak1wa/aws-cfn-alb-ec2/blob/main/aws-parameter-sheet.md

ただし、上記パラメータシートから以下の点を変更してデプロイしてみます。これを Amazon Q Developer によって指摘ほしいです。

  • ユーザーデータなし
  • EBS最適化なし、
  • インスタンスプロファイルなし、
  • AMI が AL2 ではなく AL2023

変更したテンプレートが以下です。

AWSTemplateFormatVersion: '2010-09-09'
Description: hoge

Parameters:
  BaseAMI:
    Type: AWS::EC2::Image::Id
    Default: ami-0bb2c57f7cfafb1cb
  KeyPairWeb:
    Description: Name of an existing EC2 KeyPair to enable SSH access to the instances for Web
    Type: AWS::EC2::KeyPair::KeyName

Resources:
  VPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 10.0.0.0/16
      EnableDnsSupport: true
      EnableDnsHostnames: true
      InstanceTenancy: default
  PublicSubnet1:
    Type: AWS::EC2::Subnet
    DependsOn: AttachGateway
    Properties:
      AvailabilityZone: !Select [ 0, "Fn::GetAZs": {Ref: "AWS::Region"}]
      CidrBlock: 10.0.0.0/24
      VpcId: !Ref VPC
  PublicSubnet1RouteTableAssociation:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      SubnetId: !Ref PublicSubnet1
      RouteTableId: !Ref PublicRouteTable
  PublicSubnet2:
    Type: AWS::EC2::Subnet
    DependsOn: AttachGateway
    Properties:
      AvailabilityZone: !Select [ 1, "Fn::GetAZs": {Ref: "AWS::Region"}]
      CidrBlock: 10.0.1.0/24
      VpcId: !Ref VPC
  PublicSubnet2RouteTableAssociation:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      SubnetId: !Ref PublicSubnet2
      RouteTableId: !Ref PublicRouteTable
  ProtectedSubnet1:
    Type: AWS::EC2::Subnet
    DependsOn: AttachGateway
    Properties:
      AvailabilityZone: !Select [ 0, "Fn::GetAZs": {Ref: "AWS::Region"}]
      CidrBlock: 10.0.2.0/24
      VpcId: !Ref VPC
  ProtectedSubnet1RouteTableAssociation:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      SubnetId: !Ref ProtectedSubnet1
      RouteTableId: !Ref ProtectedRouteTable1
  ProtectedSubnet2:
    Type: AWS::EC2::Subnet
    DependsOn: AttachGateway
    Properties:
      AvailabilityZone: !Select [ 1, "Fn::GetAZs": {Ref: "AWS::Region"}]
      CidrBlock: 10.0.3.0/24
      VpcId: !Ref VPC
  ProtectedSubnet2RouteTableAssociation:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      SubnetId: !Ref ProtectedSubnet2
      RouteTableId: !Ref ProtectedRouteTable2

  InternetGateway:
    Type: AWS::EC2::InternetGateway
  AttachGateway:
    Type: AWS::EC2::VPCGatewayAttachment
    Properties:
      VpcId: !Ref VPC
      InternetGatewayId: !Ref InternetGateway
  NatGateway1:
    Type: AWS::EC2::NatGateway
    Properties:
      AllocationId: !GetAtt EipNatGateway1.AllocationId
      SubnetId: !Ref PublicSubnet1
  NatGateway2:
    Type: AWS::EC2::NatGateway
    Properties:
      AllocationId: !GetAtt EipNatGateway2.AllocationId
      SubnetId: !Ref PublicSubnet2

  PublicRouteTable:
    Type: AWS::EC2::RouteTable
    DependsOn: AttachGateway
    Properties:
      VpcId: !Ref VPC
  PublicRoute:
    Type: AWS::EC2::Route
    DependsOn: AttachGateway
    Properties:
      RouteTableId: !Ref PublicRouteTable
      DestinationCidrBlock: 0.0.0.0/0
      GatewayId: !Ref InternetGateway

  ProtectedRouteTable1:
    Type: AWS::EC2::RouteTable
    DependsOn: AttachGateway
    Properties:
      VpcId: !Ref VPC    
  ProtectedRoute1:
    Type: AWS::EC2::Route
    Properties:
      RouteTableId: !Ref ProtectedRouteTable1
      DestinationCidrBlock: 0.0.0.0/0
      NatGatewayId: !Ref NatGateway1

  ProtectedRouteTable2:
    Type: AWS::EC2::RouteTable
    DependsOn: AttachGateway
    Properties:
      VpcId: !Ref VPC
  ProtectedRoute2:
    Type: AWS::EC2::Route
    Properties:
      RouteTableId: !Ref ProtectedRouteTable2
      DestinationCidrBlock: 0.0.0.0/0
      NatGatewayId: !Ref NatGateway2

  EipNatGateway1:
    Type: AWS::EC2::EIP
    Properties:
      Domain: vpc
  EipNatGateway2:
    Type: AWS::EC2::EIP
    Properties:
      Domain: vpc

  WebAlbServerSecurityGroup:
    Type: "AWS::EC2::SecurityGroup"
    Properties:
        GroupDescription: "hoge"
        GroupName: hoge-web-alb-sg
        VpcId: !Ref VPC
        SecurityGroupIngress:
          - IpProtocol: tcp
            FromPort: 80
            ToPort: 80
            CidrIp: 0.0.0.0/0
          - IpProtocol: tcp
            FromPort: 443
            ToPort: 443
            CidrIp: 0.0.0.0/0
  WebAsgSecurityGroup:
    Type: "AWS::EC2::SecurityGroup"
    Properties:
      GroupDescription: "hoge"
      GroupName: hoge-web-sg
      VpcId: !Ref VPC
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: 80
          ToPort: 80
          SourceSecurityGroupId: !Ref WebAlbServerSecurityGroup

  WebLoadBalancer:
    Type: AWS::ElasticLoadBalancingV2::LoadBalancer
    Properties:
      Type: "application"
      Scheme: "internet-facing"
      Name: hoge-web-alb
      IpAddressType: ipv4
      Subnets: 
        - !Ref PublicSubnet1
        - !Ref PublicSubnet2
      SecurityGroups: 
        - !Ref WebAlbServerSecurityGroup

  WebListenerHTTP:
    Type: AWS::ElasticLoadBalancingV2::Listener
    Properties:
      DefaultActions:
        - Type: forward
          TargetGroupArn: !Ref WebTargetGroup
      LoadBalancerArn: !Ref WebLoadBalancer
      Port: 80
      Protocol: HTTP

  WebTargetGroup:
    Type: AWS::ElasticLoadBalancingV2::TargetGroup
    Properties:
      Name: hoge-web-tg
      Port: 80
      Protocol: HTTP
      HealthCheckEnabled: true
      HealthCheckProtocol: 'HTTP'
      HealthCheckPath: '/'
      HealthCheckPort: '80'
      HealthyThresholdCount: 5
      UnhealthyThresholdCount: 3
      HealthCheckTimeoutSeconds: 5
      HealthCheckIntervalSeconds: 10
      Matcher:
        HttpCode: '200'
      VpcId: !Ref VPC
      TargetType: instance
      Targets:
        - Id: !Ref WebServer

  WebServer:
    Type: AWS::EC2::Instance
    Properties:
      InstanceType: t3.medium
      BlockDeviceMappings:
        - DeviceName: /dev/xvda
          Ebs:
            VolumeType: gp3
            VolumeSize: 8
            DeleteOnTermination: true
            Encrypted: true
      SubnetId: !Ref ProtectedSubnet1
      SecurityGroupIds:
        - !Ref WebAsgSecurityGroup
      ImageId: !Ref BaseAMI
      KeyName: !Ref KeyPairWeb
      DisableApiTermination: false
      EbsOptimized: false

これをデプロイしました。

EFC73310-EE64-4C55-8E59-63E3707BFE61_1_105_c.jpeg

環境チェック

今回はまずは Amazon Q Developer コンソールチャットを使ってみます。マネジメントコンソールから使えるやつです。
先日のアップデートでこちらもエージェントモードで動くようになったので、サクッとマネジメントコンソールから確認できると使いやすいかなと思ったためです。

https://aws.amazon.com/about-aws/whats-new/2025/06/agentic-capabilities-amazon-q-developer-chat-aws-management-console-chat-applications/

ただ、試してみたところまだコンソールチャットだと期待どおりの出力を得ることができなかったりしたので、Amazon Q Developer CLI でも試しています。

Amazon Q Developer コンソールチャットを使う場合

まず AWS 環境をデプロイしたアカウント上で Amazon Q Developer コンソールチャットを起動します。

52124FDD-EC5D-4467-AB3E-3E3BEC77D457_1_105_c.jpeg

まず、パラメータシートの内容をそのままを与えて「このとおり構築されてるかチェックしてください」みたいな指示をしようと思ったのですが、どうやらコンソールチャットの入力は 1000 文字までらしいのでそのまま渡すことが出来ませんでした。

2E073C25-1AA8-46B4-8633-5D4E90D3440C_4_5005_c.jpeg

また本日時点で日本語にも対応していないので、パラメータシートの与え方自体も工夫する必要があります。

4E68281F-F5E8-435F-B9FB-DAF8CCA98881.png

例えば EC2 などリソースごとのパラメータ情報を部分的に英語で与えてやるとうまく反応してくれました。

5DB78132-271D-47B5-9F1F-DAEA21E070F1.png

全てではないのですが、一部は期待どおり指摘してくれました。
インスタンスタイプや EBS 最適化については言及してくれています。AMI については特に指摘ありませんでした。

DDBBC6B8-387D-405B-817C-BC168311264F.png

続いてパラメータシートを公開リポジトリに配置し、URL ベースで与えてみました。
この場合は一応すべてのパラメータをチェックしてくれているようでした。チェック結果をマークダウン形式で出力するように指示しています。

6EA83FD2-076D-4488-81E4-F5AAB950C4D8.png

そして出力された結果が以下になります。ただし、あまりうまくチェックできていない気がします。先程は指摘してくれた EBS 最適化やインスタンスタイプについても指摘がありませんでした。むむ。

# AWS Resource Configuration Check

This file compares the actual AWS resource configurations in the Tokyo region (ap-northeast-1) with the specifications provided in the parameter sheet.

## VPC Configuration

| Resource | Parameter | Expected Value (Based on Common Patterns) | Actual Value | Status |
|----------|-----------|------------------------------------------|--------------|--------|
| VPC | CIDR Block | 10.0.0.0/16 | 10.0.0.0/16 | Match |
| VPC | DNS Support | Enabled | Enabled | Match |
| VPC | DNS Hostnames | Enabled | Enabled | Match |

## Subnet Configuration

| Resource | Parameter | Expected Value (Based on Common Patterns) | Actual Value | Status |
|----------|-----------|------------------------------------------|--------------|--------|
| Public Subnet 1 | CIDR Block | 10.0.0.0/24 | 10.0.0.0/24 | Match |
| Public Subnet 1 | Availability Zone | ap-northeast-1a | ap-northeast-1a | Match |
| Public Subnet 2 | CIDR Block | 10.0.1.0/24 | 10.0.1.0/24 | Match |
| Public Subnet 2 | Availability Zone | ap-northeast-1c | ap-northeast-1c | Match |
| Protected Subnet 1 | CIDR Block | 10.0.2.0/24 | 10.0.2.0/24 | Match |
| Protected Subnet 1 | Availability Zone | ap-northeast-1a | ap-northeast-1a | Match |
| Protected Subnet 2 | CIDR Block | 10.0.3.0/24 | 10.0.3.0/24 | Match |
| Protected Subnet 2 | Availability Zone | ap-northeast-1c | ap-northeast-1c | Match |

## Security Group Configuration

| Resource | Parameter | Expected Value (Based on Common Patterns) | Actual Value | Status |
|----------|-----------|------------------------------------------|--------------|--------|
| ALB Security Group | Inbound Rules | Allow HTTP(80), HTTPS(443) from anywhere | Allow HTTP(80), HTTPS(443) from anywhere | Match |
| ALB Security Group | Outbound Rules | Allow all traffic | Allow all traffic | Match |
| Web Server Security Group | Inbound Rules | Allow HTTP(80) from ALB SG | Allow HTTP(80) from ALB SG | Match |
| Web Server Security Group | Outbound Rules | Allow all traffic | Allow all traffic | Match |

## EC2 Instance Configuration

| Resource | Parameter | Expected Value (Based on Common Patterns) | Actual Value | Status |
|----------|-----------|------------------------------------------|--------------|--------|
| Web Server | Instance Type | t3.medium | t3.medium | Match |
| Web Server | AMI ID | ami-0bb2c57f7cfafb1cb | ami-0bb2c57f7cfafb1cb | Match |
| Web Server | Subnet | Protected Subnet 1 | subnet-090093282fad04c04 (Protected Subnet 1) | Match |
| Web Server | Security Group | hoge-web-sg | hoge-web-sg | Match |
| Web Server | Key Pair | hoge | hoge | Match |

## Application Load Balancer Configuration

| Resource | Parameter | Expected Value (Based on Common Patterns) | Actual Value | Status |
|----------|-----------|------------------------------------------|--------------|--------|
| ALB | Type | Internet-facing | Internet-facing | Match |
| ALB | VPC | vpc-07bf1c267016aeec3 | vpc-07bf1c267016aeec3 | Match |
| ALB | Subnets | Public Subnet 1, Public Subnet 2 | subnet-0af790174b0f9700f, subnet-057a49ce44f66e2d8 | Match |
| ALB | Security Group | hoge-web-alb-sg | sg-0cac95bbd0d9ae5a9 (hoge-web-alb-sg) | Match |
| ALB | Listener | HTTP:80 | HTTP:80 | Match |
| ALB | Target Group | hoge-web-tg | hoge-web-tg | Match |
| ALB | Target Group Protocol | HTTP:80 | HTTP:80 | Match |
| ALB | Health Check Path | / | / | Match |
| ALB | Cross-zone Load Balancing | Enabled | Enabled | Match |

## CloudFormation Stack

| Resource | Parameter | Expected Value (Based on Common Patterns) | Actual Value | Status |
|----------|-----------|------------------------------------------|--------------|--------|
| Stack Name | Name | hoge0615ec2 | hoge0615ec2 | Match |
| Stack Resource | Logical ID for EC2 | WebServer | WebServer | Match |

Note: This comparison is based on the actual resources found in the Tokyo region and common best practices. Without access to the exact parameter sheet, some expected values are inferred from typical configurations.

Amazon Q Developer CLI を使う場合

続いて、Amazon Q Developer CLI を試してみます。

ローカル上にパラメータシートを用意し、Amazon Q Developer CLI を開始します。
パラメータシートファイル名を指定し、認証中のプロファイルがアクセスできる AWS 環境とリージョンを指定しました。プロファイルをここで指定したり、MFA 情報を入力したりすることもできます。

% q chat
✓ awslabsaws_documentation_mcp_server loaded in 2.31 s
✓ 1 of 1 mcp servers initialized.

    ⢠⣶⣶⣦⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣤⣶⣿⣿⣿⣶⣦⡀⠀
 ⠀⠀⠀⣾⡿⢻⣿⡆⠀⠀⠀⢀⣄⡄⢀⣠⣤⣤⡀⢀⣠⣤⣤⡀⠀⠀⢀⣠⣤⣤⣤⣄⠀⠀⢀⣤⣤⣤⣤⣤⣤⡀⠀⠀⣀⣤⣤⣤⣀⠀⠀⠀⢠⣤⡀⣀⣤⣤⣄⡀⠀⠀⠀⠀⠀⠀⢠⣿⣿⠋⠀⠀⠀⠙⣿⣿⡆
 ⠀⠀⣼⣿⠇⠀⣿⣿⡄⠀⠀⢸⣿⣿⠛⠉⠻⣿⣿⠛⠉⠛⣿⣿⠀⠀⠘⠛⠉⠉⠻⣿⣧⠀⠈⠛⠛⠛⣻⣿⡿⠀⢀⣾⣿⠛⠉⠻⣿⣷⡀⠀⢸⣿⡟⠛⠉⢻⣿⣷⠀⠀⠀⠀⠀⠀⣼⣿⡏⠀⠀⠀⠀⠀⢸⣿⣿
 ⠀⢰⣿⣿⣤⣤⣼⣿⣷⠀⠀⢸⣿⣿⠀⠀⠀⣿⣿⠀⠀⠀⣿⣿⠀⠀⢀⣴⣶⣶⣶⣿⣿⠀⠀⠀⣠⣾⡿⠋⠀⠀⢸⣿⣿⠀⠀⠀⣿⣿⡇⠀⢸⣿⡇⠀⠀⢸⣿⣿⠀⠀⠀⠀⠀⠀⢹⣿⣇⠀⠀⠀⠀⠀⢸⣿⡿
 ⢀⣿⣿⠋⠉⠉⠉⢻⣿⣇⠀⢸⣿⣿⠀⠀⠀⣿⣿⠀⠀⠀⣿⣿⠀⠀⣿⣿⡀⠀⣠⣿⣿⠀⢀⣴⣿⣋⣀⣀⣀⡀⠘⣿⣿⣄⣀⣠⣿⣿⠃⠀⢸⣿⡇⠀⠀⢸⣿⣿⠀⠀⠀⠀⠀⠀⠈⢿⣿⣦⣀⣀⣀⣴⣿⡿⠃
 ⠚⠛⠋⠀⠀⠀⠀⠘⠛⠛⠀⠘⠛⠛⠀⠀⠀⠛⠛⠀⠀⠀⠛⠛⠀⠀⠙⠻⠿⠟⠋⠛⠛⠀⠘⠛⠛⠛⠛⠛⠛⠃⠀⠈⠛⠿⠿⠿⠛⠁⠀⠀⠘⠛⠃⠀⠀⠘⠛⠛⠀⠀⠀⠀⠀⠀⠀⠀⠙⠛⠿⢿⣿⣿⣋⠀⠀
 ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠛⠿⢿⡧

╭─────────────────────────────── Did you know? ────────────────────────────────╮
│                                                                              │
│      Set a default model by running q settings chat.defaultModel MODEL.      │
│                          Run /model to learn more.                           │
│                                                                              │
╰──────────────────────────────────────────────────────────────────────────────╯

/help all commands  •  ctrl + j new lines  •  ctrl + s fuzzy search
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🤖 You are chatting with claude-3.7-sonnet

> AWS環境上に構築されたリソースが正しく作成されているか確認してください。パラメータシート「aws-parameter-sheet.md」のとおりに構築されているかリソースごとに比較し、一致しているパラメータと一致していないパラメータをマークダウンのテーブル形式で列挙し、aws-check-output.mdというファイルに出力してください。リソースは東京リージョンに構築されています。
AWS環境上のリソースが正しく作成されているか確認するために、まずパラメータシートを確認し、その後AWSリソースの実際の状態を確認します。

まず、パラメータシートを確認しましょう。

:

🛠️  Using tool: use_aws (trusted)
 ⋮ 
 ● Running aws cli command:

Service name: ec2
Operation name: describe-internet-gateways
Parameters: 
- Filters: [{"Name":"attachment.vpc-id","Values":["vpc-000f4f53a510464e4"]}]
Profile name: default
Region: us-east-1
Label: Describe Internet Gateways
 ⋮ 
 ● Completed in 1.629s

🛠️  Using tool: use_aws (trusted)
 ⋮ 
 ● Running aws cli command:

Service name: ec2
Operation name: describe-nat-gateways
Parameters: 
- Filter: [{"Name":"vpc-id","Values":["vpc-000f4f53a510464e4"]}]
Profile name: default
Region: us-east-1
Label: Describe NAT Gateways
 ⋮ 
 ● Completed in 1.649s

🛠️  Using tool: use_aws (trusted)
 ⋮ 
 ● Running aws cli command:

Service name: ec2
Operation name: describe-security-groups
Parameters: 
- Filters: [{"Name":"vpc-id","Values":["vpc-000f4f53a510464e4"]}]
Profile name: default
Region: us-east-1
Label: Describe Security Groups
 ⋮ 

しばらく待っていると、use_awsツールが使われていますね。
このツールは、Amazon Q Developer が AWS サービスとやりとりするために AWS CLI を実行するツールです。[1]

数分後にチェックが完了したみたいです。
ファイルが出力され、チェック結果のサマリも教えてくれます。

Creating: aws-check-output.md

 ⋮ 
 ● Completed in 0.1s
AWS環境上のリソースをパラメータシートと比較した結果をファイルに出力しました。主な不一致点は以下の通りです:

1. EC2インスタンスについて:
   • インスタンスタイプが期待値の t3.small ではなく t3.medium になっています
   • AMI が指定されたものと異なります
   • EBS最適化が有効ではなく無効になっています

2. IAMリソースについて:
   • WebRole と WebProfile が存在しません

VPC、サブネット、ゲートウェイ、ルートテーブル、セキュリティグループ、ロードバランサーなどのネットワークリソースは概ね期待通りに構成されています。

詳細な比較結果は aws-check-output.md ファイルに出力しました。このファイルには、各リソースのパラメータごとに期待値と実際の値を比較した結果が含まれています。

> 

インスタンスタイプ、AMI、EBS 最適化と仕込んでいた変更点を概ね指摘してくれました。すごい。
ユーザーデータについては教えてくれませんでした、というか検証結果ファイルを見る感じ比較してくれていないようでした。パラメータシートなどをもう少し工夫する余地があるかもしれない。

以下は出力されたリソース検証結果です。

# AWS リソース検証結果

## VPCリソース

| リソース名 | パラメータ | 期待値 | 実際の値 | 一致 |
|-----------|----------|--------|---------|------|
| VPC | CidrBlock | 10.0.0.0/16 | 10.0.0.0/16 ||
| VPC | EnableDnsSupport | true | 不明 ||
| VPC | EnableDnsHostnames | true | 不明 ||

## サブネットリソース

| リソース名 | パラメータ | 期待値 | 実際の値 | 一致 |
|-----------|----------|--------|---------|------|
| PublicSubnet1 | CIDR | 10.0.0.0/24 | 10.0.0.0/24 ||
| PublicSubnet1 | アベイラビリティゾーン | AZ-1 | ap-northeast-1a ||
| PublicSubnet2 | CIDR | 10.0.1.0/24 | 10.0.1.0/24 ||
| PublicSubnet2 | アベイラビリティゾーン | AZ-2 | ap-northeast-1c ||
| ProtectedSubnet1 | CIDR | 10.0.2.0/24 | 10.0.2.0/24 ||
| ProtectedSubnet1 | アベイラビリティゾーン | AZ-1 | ap-northeast-1a ||
| ProtectedSubnet2 | CIDR | 10.0.3.0/24 | 10.0.3.0/24 ||
| ProtectedSubnet2 | アベイラビリティゾーン | AZ-2 | ap-northeast-1c ||

## ゲートウェイリソース

| リソース名 | パラメータ | 期待値 | 実際の値 | 一致 |
|-----------|----------|--------|---------|------|
| InternetGateway | 存在 | あり | あり ||
| AttachGateway | VPC接続 | あり | あり ||
| NatGateway1 | 存在 | あり | あり ||
| NatGateway1 | サブネット | PublicSubnet1 | subnet-04a2c519ff533009b (PublicSubnet1) ||
| NatGateway2 | 存在 | あり | あり ||
| NatGateway2 | サブネット | PublicSubnet2 | subnet-0a5636ff95a4e07f0 (PublicSubnet2) ||
| EipNatGateway1 | 存在 | あり | あり ||
| EipNatGateway2 | 存在 | あり | あり ||

## ルートテーブルリソース

| リソース名 | パラメータ | 期待値 | 実際の値 | 一致 |
|-----------|----------|--------|---------|------|
| PublicRouteTable | 存在 | あり | あり ||
| PublicRoute | デフォルトルート | 0.0.0.0/0 → InternetGateway | 0.0.0.0/0 → igw-09847a1fc4ec70e6a ||
| ProtectedRouteTable1 | 存在 | あり | あり ||
| ProtectedRoute1 | デフォルトルート | 0.0.0.0/0 → NatGateway1 | 0.0.0.0/0 → nat-0677eef23175ca5f0 ||
| ProtectedRouteTable2 | 存在 | あり | あり ||
| ProtectedRoute2 | デフォルトルート | 0.0.0.0/0 → NatGateway2 | 0.0.0.0/0 → nat-00730432c15c39e96 ||

## ルートテーブル関連付け

| リソース名 | パラメータ | 期待値 | 実際の値 | 一致 |
|-----------|----------|--------|---------|------|
| PublicSubnet1RouteTableAssociation | 関連付け | PublicSubnet1 → PublicRouteTable | subnet-04a2c519ff533009b → rtb-0e9e4868a563711c9 ||
| PublicSubnet2RouteTableAssociation | 関連付け | PublicSubnet2 → PublicRouteTable | subnet-0a5636ff95a4e07f0 → rtb-0e9e4868a563711c9 ||
| ProtectedSubnet1RouteTableAssociation | 関連付け | ProtectedSubnet1 → ProtectedRouteTable1 | subnet-0f24a5273c5fd7d20 → rtb-0f3c4fac711a363ec ||
| ProtectedSubnet2RouteTableAssociation | 関連付け | ProtectedSubnet2 → ProtectedRouteTable2 | subnet-068c473826d80cce1 → rtb-00ce2df821df34ae5 ||

## セキュリティグループ

| リソース名 | パラメータ | 期待値 | 実際の値 | 一致 |
|-----------|----------|--------|---------|------|
| WebAlbServerSecurityGroup | 名前 | hoge-web-alb-sg | hoge-web-alb-sg ||
| WebAlbServerSecurityGroup | インバウンドルール | TCP 80 (0.0.0.0/0)<br>TCP 443 (0.0.0.0/0) | TCP 80 (0.0.0.0/0)<br>TCP 443 (0.0.0.0/0) ||
| WebAsgSecurityGroup | 名前 | hoge-web-sg | hoge-web-sg ||
| WebAsgSecurityGroup | インバウンドルール | TCP 80 (WebAlbServerSecurityGroup) | TCP 80 (sg-03c9c62782ee41ddb) ||

## IAMリソース

| リソース名 | パラメータ | 期待値 | 実際の値 | 一致 |
|-----------|----------|--------|---------|------|
| WebRole | 存在 | あり | なし ||
| WebProfile | 存在 | あり | なし ||

## ロードバランサーリソース

| リソース名 | パラメータ | 期待値 | 実際の値 | 一致 |
|-----------|----------|--------|---------|------|
| WebLoadBalancer | 名前 | hoge-web-alb | hoge-web-alb ||
| WebLoadBalancer | サブネット | PublicSubnet1, PublicSubnet2 | subnet-04a2c519ff533009b, subnet-0a5636ff95a4e07f0 ||
| WebLoadBalancer | セキュリティグループ | WebAlbServerSecurityGroup | sg-03c9c62782ee41ddb ||
| WebListenerHTTP | ポート | 80 | 80 ||
| WebListenerHTTP | プロトコル | HTTP | HTTP ||
| WebTargetGroup | 名前 | hoge-web-tg | hoge-web-tg ||
| WebTargetGroup | ポート | 80 | 80 ||
| WebTargetGroup | プロトコル | HTTP | HTTP ||
| WebTargetGroup | ヘルスチェックパス | / | / ||

## EC2インスタンス

| リソース名 | パラメータ | 期待値 | 実際の値 | 一致 |
|-----------|----------|--------|---------|------|
| WebServer | インスタンスタイプ | t3.small | t3.medium ||
| WebServer | サブネット | ProtectedSubnet1 | subnet-0f24a5273c5fd7d20 (ProtectedSubnet1) ||
| WebServer | セキュリティグループ | WebAsgSecurityGroup | sg-001a9186b1801872e (WebAsgSecurityGroup) ||
| WebServer | AMI | ami-06098fd00463352b6 | ami-0bb2c57f7cfafb1cb ||
| WebServer | ボリューム | /dev/xvda: gp3, 8GB, 暗号化あり | /dev/xvda: gp3, 8GB, 暗号化あり ||
| WebServer | IAMロール | WebProfile | 不明 ||
| WebServer | キーペア | KeyPairWeb | hoge ||
| WebServer | API終了保護 | 無効 | 不明 ||
| WebServer | EBS最適化 | 有効 | 無効 ||

## 総合評価

パラメータシートと実際の環境を比較した結果、以下の不一致が見つかりました:

1. **EC2インスタンス**:
   - インスタンスタイプが t3.small ではなく t3.medium になっています
   - AMI が指定されたものと異なります
   - EBS最適化が有効ではなく無効になっています

2. **IAMリソース**:
   - WebRole と WebProfile が存在しません

その他のリソース(VPC、サブネット、ゲートウェイ、ルートテーブル、セキュリティグループ、ロードバランサー)は概ね期待通りに構成されています。

かなり良いですね。
しかも Q Developer がうまく実環境から取得できなかった項目もあるみたいで、そのあたりは「❓」になっています。
このあたりは目視で確認しても良いかもしれません。

さいごに

本日は Amazon Q Developer を使ってパラメータシートに基づいて AWS 環境の構成チェックが出来るか試してみました。

コンソールチャットよりも Amazon Q Developer CLI のほうが使いやすかったです。
Q Developer CLI では、チェック結果も概ね期待どおりで不明点も不明だと明確にしてくれているので、完全にお任せは出来なくてもチェック作業を一部手伝ってもらうことは全然出来そうだなと感じました。
コンソールチャットはもう少しという感じでしょうか。

Amazon Q Developer CLI に実環境調査させる系の作業を任せるの、かなり良いですね。
MCP サーバーとかなしで、use_aws使ってエージェントが勝手にやってくれるのが良い。

脚注
  1. ツールのアクセス許可の管理 - Amazon Q Developer ↩︎

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.