ClaudeCodeにAWS CloudFormationを作らせてみた

目次

概要

Claude Codeを活用し、AWS CloudFormationテンプレートを用いてインフラ環境の構築を試みました。

CloudFormationとは

🔄 インフラの自動化・効率化

  • 手動作業に起因するヒューマンエラーの削減
  • 複数のリソースを数分で一括作成・削除
  • 繰り返し作業の大幅な時間短縮

📋 コードによるインフラ管理(IaC: Infrastructure as Code)

  • インフラ構成をYAML/JSONで可視化・文書化
  • Gitでバージョン管理・変更履歴追跡が可能
  • コードレビューによる品質向上

🔁 環境の完全な再現性

  • 開発・ステージング・本番環境の統一
  • 災害復旧時の迅速な環境復元

🔗 リソース間の依存関係自動解決

  • VPC → サブネット → EC2の順序を自動判定
  • 削除時も依存関係を考慮した逆順実行
  • 複雑な構成でも整合性を保証

💰 コスト管理・最適化

  • 不要な環境の確実な削除(リソース残りなし)
  • テスト環境の夜間自動停止・朝の自動起動
  • リソース使用量の透明性向上

🛡️ セキュリティ・ガバナンス向上

  • 承認されたテンプレートのみでのデプロイ
  • セキュリティ設定の標準化・強制
  • 設定ドリフトの検出・修正

ClaudeCodeに指示を出して作成してもらう

# AWSのCloudFormationのyamlファイルを作成してください。
## 構成
・EC2
最低スペックでお願いします。IPは固定化不要です。
railsを起動させたいので、インストールなどお願いします。

・RDS
postgresqlで、最低スペックでお願いします。
EC2と接続できるようにセキュリティグループ回りを設定してください。

rails-postgres-stack_v1.yaml

AWSTemplateFormatVersion: '2010-09-09'
Description: 'Rails application with PostgreSQL RDS - minimum configuration'

Parameters:
  KeyName:
    Description: 'EC2 Key Pair for SSH access'
    Type: 'AWS::EC2::KeyPair::KeyName'
    ConstraintDescription: 'Must be the name of an existing EC2 KeyPair'

Resources:
  # VPC
  VPC:
    Type: 'AWS::EC2::VPC'
    Properties:
      CidrBlock: '10.0.0.0/16'
      EnableDnsHostnames: true
      EnableDnsSupport: true
      Tags:
        - Key: 'Name'
          Value: 'Rails-PostgreSQL-VPC'

  # Internet Gateway
  InternetGateway:
    Type: 'AWS::EC2::InternetGateway'
    Properties:
      Tags:
        - Key: 'Name'
          Value: 'Rails-PostgreSQL-IGW'

  InternetGatewayAttachment:
    Type: 'AWS::EC2::VPCGatewayAttachment'
    Properties:
      InternetGatewayId: !Ref InternetGateway
      VpcId: !Ref VPC

  # Public Subnet
  PublicSubnet:
    Type: 'AWS::EC2::Subnet'
    Properties:
      VpcId: !Ref VPC
      AvailabilityZone: !Select [0, !GetAZs '']
      CidrBlock: '10.0.1.0/24'
      MapPublicIpOnLaunch: true
      Tags:
        - Key: 'Name'
          Value: 'Rails-PostgreSQL-Public-Subnet'

  # Private Subnet for RDS
  PrivateSubnet1:
    Type: 'AWS::EC2::Subnet'
    Properties:
      VpcId: !Ref VPC
      AvailabilityZone: !Select [0, !GetAZs '']
      CidrBlock: '10.0.2.0/24'
      Tags:
        - Key: 'Name'
          Value: 'Rails-PostgreSQL-Private-Subnet-1'

  PrivateSubnet2:
    Type: 'AWS::EC2::Subnet'
    Properties:
      VpcId: !Ref VPC
      AvailabilityZone: !Select [1, !GetAZs '']
      CidrBlock: '10.0.3.0/24'
      Tags:
        - Key: 'Name'
          Value: 'Rails-PostgreSQL-Private-Subnet-2'

  # Route Table
  PublicRouteTable:
    Type: 'AWS::EC2::RouteTable'
    Properties:
      VpcId: !Ref VPC
      Tags:
        - Key: 'Name'
          Value: 'Rails-PostgreSQL-Public-Routes'

  DefaultPublicRoute:
    Type: 'AWS::EC2::Route'
    DependsOn: InternetGatewayAttachment
    Properties:
      RouteTableId: !Ref PublicRouteTable
      DestinationCidrBlock: '0.0.0.0/0'
      GatewayId: !Ref InternetGateway

  PublicSubnetRouteTableAssociation:
    Type: 'AWS::EC2::SubnetRouteTableAssociation'
    Properties:
      RouteTableId: !Ref PublicRouteTable
      SubnetId: !Ref PublicSubnet

  # Security Groups
  EC2SecurityGroup:
    Type: 'AWS::EC2::SecurityGroup'
    Properties:
      GroupDescription: 'Security group for Rails EC2 instance'
      VpcId: !Ref VPC
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: 22
          ToPort: 22
          CidrIp: '0.0.0.0/0'
        - IpProtocol: tcp
          FromPort: 3000
          ToPort: 3000
          CidrIp: '0.0.0.0/0'
        - IpProtocol: tcp
          FromPort: 80
          ToPort: 80
          CidrIp: '0.0.0.0/0'
      SecurityGroupEgress:
        - IpProtocol: -1
          CidrIp: '0.0.0.0/0'
      Tags:
        - Key: 'Name'
          Value: 'Rails-EC2-SecurityGroup'

  RDSSecurityGroup:
    Type: 'AWS::EC2::SecurityGroup'
    Properties:
      GroupDescription: 'Security group for PostgreSQL RDS'
      VpcId: !Ref VPC
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: 5432
          ToPort: 5432
          SourceSecurityGroupId: !Ref EC2SecurityGroup
      Tags:
        - Key: 'Name'
          Value: 'PostgreSQL-RDS-SecurityGroup'

  # DB Subnet Group
  DBSubnetGroup:
    Type: 'AWS::RDS::DBSubnetGroup'
    Properties:
      DBSubnetGroupDescription: 'Subnet group for PostgreSQL RDS'
      SubnetIds:
        - !Ref PrivateSubnet1
        - !Ref PrivateSubnet2
      Tags:
        - Key: 'Name'
          Value: 'PostgreSQL-DB-SubnetGroup'

  # RDS Instance
  PostgreSQLDatabase:
    Type: 'AWS::RDS::DBInstance'
    Properties:
      DBInstanceIdentifier: 'rails-postgresql-db'
      DBInstanceClass: 'db.t3.micro'
      Engine: 'postgres'
      EngineVersion: '15.4'
      AllocatedStorage: 20
      StorageType: 'gp2'
      DBName: 'railsapp'
      MasterUsername: 'railsuser'
      MasterUserPassword: 'RailsPassword123!'
      VPCSecurityGroups:
        - !Ref RDSSecurityGroup
      DBSubnetGroupName: !Ref DBSubnetGroup
      BackupRetentionPeriod: 0
      MultiAZ: false
      PubliclyAccessible: false
      StorageEncrypted: false
      DeletionProtection: false
      Tags:
        - Key: 'Name'
          Value: 'Rails-PostgreSQL-Database'

  # EC2 Instance
  RailsEC2Instance:
    Type: 'AWS::EC2::Instance'
    Properties:
      ImageId: 'ami-0c02fb55956c7d316'  # Amazon Linux 2 AMI (update as needed)
      InstanceType: 't2.micro'
      KeyName: !Ref KeyName
      NetworkInterfaces:
        - AssociatePublicIpAddress: true
          DeviceIndex: 0
          GroupSet:
            - !Ref EC2SecurityGroup
          SubnetId: !Ref PublicSubnet
      UserData:
        Fn::Base64: !Sub |
          #!/bin/bash
          yum update -y

          # Install development tools
          yum groupinstall -y "Development Tools"
          yum install -y git curl wget

          # Install Node.js (required for Rails asset pipeline)
          curl -fsSL <https://rpm.nodesource.com/setup_18.x> | bash -
          yum install -y nodejs

          # Install PostgreSQL client
          yum install -y postgresql postgresql-devel

          # Install rbenv and Ruby
          git clone <https://github.com/rbenv/rbenv.git> /home/ec2-user/.rbenv
          echo 'export PATH="/home/ec2-user/.rbenv/bin:$PATH"' >> /home/ec2-user/.bashrc
          echo 'eval "$(rbenv init -)"' >> /home/ec2-user/.bashrc

          git clone <https://github.com/rbenv/ruby-build.git> /home/ec2-user/.rbenv/plugins/ruby-build

          chown -R ec2-user:ec2-user /home/ec2-user/.rbenv

          # Install Ruby as ec2-user
          sudo -u ec2-user bash -c 'source /home/ec2-user/.bashrc && rbenv install 3.2.0 && rbenv global 3.2.0'

          # Install Bundler and Rails
          sudo -u ec2-user bash -c 'source /home/ec2-user/.bashrc && gem install bundler rails'

          # Create database configuration file
          mkdir -p /home/ec2-user/rails_app
          cat > /home/ec2-user/rails_app/database_config.txt << EOL
          Database Host: ${PostgreSQLDatabase.Endpoint.Address}
          Database Port: ${PostgreSQLDatabase.Endpoint.Port}
          Database Name: railsapp
          Username: railsuser
          Password: RailsPassword123!
          EOL
          chown -R ec2-user:ec2-user /home/ec2-user/rails_app

          # Create a sample Rails app setup script
          cat > /home/ec2-user/setup_rails_app.sh << 'EOL'
          #!/bin/bash
          cd /home/ec2-user
          source ~/.bashrc

          # Create new Rails app with PostgreSQL
          rails new myapp --database=postgresql
          cd myapp

          # Configure database connection
          DB_HOST=$(cat /home/ec2-user/rails_app/database_config.txt | grep "Database Host:" | cut -d' ' -f3)

          cat > config/database.yml << EOF
          default: &default
            adapter: postgresql
            encoding: unicode
            pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
            host: $DB_HOST
            port: 5432
            username: railsuser
            password: RailsPassword123!

          development:
            <<: *default
            database: railsapp

          production:
            <<: *default
            database: railsapp
          EOF

          # Install gems
          bundle install

          # Create and migrate database
          bundle exec rails db:create
          bundle exec rails db:migrate

          # Generate a simple controller for testing
          bundle exec rails generate controller Home index

          echo "Rails app setup complete!"
          echo "To start the server, run: cd myapp && bundle exec rails server -b 0.0.0.0"
          EOL

          chmod +x /home/ec2-user/setup_rails_app.sh
          chown ec2-user:ec2-user /home/ec2-user/setup_rails_app.sh

      Tags:
        - Key: 'Name'
          Value: 'Rails-Application-Server'

Outputs:
  EC2InstanceId:
    Description: 'EC2 Instance ID'
    Value: !Ref RailsEC2Instance

  EC2PublicIP:
    Description: 'EC2 Instance Public IP'
    Value: !GetAtt RailsEC2Instance.PublicIp

  EC2PublicDNS:
    Description: 'EC2 Instance Public DNS'
    Value: !GetAtt RailsEC2Instance.PublicDnsName

  DatabaseEndpoint:
    Description: 'PostgreSQL Database Endpoint'
    Value: !GetAtt PostgreSQLDatabase.Endpoint.Address

  DatabasePort:
    Description: 'PostgreSQL Database Port'
    Value: !GetAtt PostgreSQLDatabase.Endpoint.Port

  SSHCommand:
    Description: 'SSH Command to connect to EC2'
    Value: !Sub 'ssh -i ${KeyName}.pem ec2-user@${RailsEC2Instance.PublicIp}'

  RailsSetupInstructions:
    Description: 'Instructions to setup Rails application'
    Value: 'SSH into the instance and run: ./setup_rails_app.sh'

命名規則を指定していなかったので、追加で依頼。

各種AWSの命名に関して、「study_test_name_」をつけてください

rails-postgres-stack_v2.yaml

実行結果1: エラー

表示されたエラーをClaude Codeに分析を依頼したところ、キーペアを事前に用意が必要ということが判明しました。

CloudFormationでキーペアを作成するとSystemManagerに保存される特殊仕様になります。
今回はテストなので一旦事前に手動で作成しました。

> rails-postgres-stack.yamlから起動したところ、エラーがでました。解析して修正をお願いします。
> リソース study-test-name-rails-v1 は ROLLBACK_IN_PROGRESS 状態です
> この AWS::CloudFormation::Stack リソースは ROLLBACK_IN_PROGRESS 状態です。
>
> Parameter validation failed: parameter value for parameter name KeyName does not exist. Rollback requested by user.

⏺ エラーの原因はKeyNameパラメータで指定したEC2キーペアが存在しないことです。

⏺ 解決方法

  1. 既存のキーペアを確認

  aws ec2 describe-key-pairs

  2. キーペアが存在しない場合は作成

  # キーペア作成
  aws ec2 create-key-pair --key-name study-test-key --query 'KeyMaterial' --output text > study-test-key.pem
  chmod 400 study-test-key.pem

  3. CloudFormationスタックの再実行

  # 既存のスタックを削除(ROLLBACKの場合)
  aws cloudformation delete-stack --stack-name study-test-name-rails-v1

  # 削除完了を待機
  aws cloudformation wait stack-delete-complete --stack-name study-test-name-rails-v1

  # 正しいキーペア名で再作成
  aws cloudformation create-stack \\
    --stack-name study-test-name-rails-v1 \\
    --template-body file://rails-postgres-stack.yaml \\
    --parameters ParameterKey=KeyName,ParameterValue=study-test-key

⏺ 重要: CloudFormationテンプレート自体は問題ありません。単純にキーペアが存在しないことが原因です。上記の手順でキーペアを作成してからス
  タックを再実行してください。

手動でキーペアを作成して、CloudFormationを起動するときにセットします。
(先ほどは空欄で実行していました。)

実行結果2: エラー

Postgresで15.4は無効バージョンと表示されました。
確認したところ、確かに選択肢にはないバージョンでした。

> 別のエラーが出ました。どのような内容でしょうか
> この AWS::RDS::DBInstance リソースは CREATE_FAILED 状態です。
>
> Resource handler returned message: "Cannot find version 15.4 for postgres (Service: Rds, Status Code: 400, Request ID: 
> 607039ea-7126-4db0-a584-9af41a41313e) (SDK Attempt Count: 1)" (RequestToken: e86862a6-2e8b-0624-255a-5820a120aec4, HandlerErrorCode: 
> InvalidRequest)

⏺ PostgreSQLのバージョン 15.4 が無効です。指定されたバージョンが存在しないか、利用できないリージョンにいる可能性があります。

⏺ Update(rails-postgres-stack.yaml)

╭─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ Edit file                                                                                                                               │
│ ╭─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │
│ │ rails-postgres-stack.yaml                                                                                                           │ │
│ │                                                                                                                                     │ │
│ │   148          DBInstanceIdentifier: 'study-test-name-rails-postgresql-db'                                                          │ │
│ │   149          DBInstanceClass: 'db.t3.micro'                                                                                       │ │
│ │   150          Engine: 'postgres'                                                                                                   │ │
│ │   151 -        EngineVersion: '15.4'                                                                                                │ │
│ │   151 +        EngineVersion: '15.7'                                                                                                │ │
│ │   152          AllocatedStorage: 20                                                                                                 │ │
│ │   153          StorageType: 'gp2'                                                                                                   │ │
│ │   154          DBName: 'railsapp' 

エラーになるとロールバックが作動するため、作成されたリソースはすべて削除されてしまいます。
(作成途中で見るとリソースが存在していますが、ロールバック完了後にはなくなっています。)

実行結果3: エラー

AMIが使用できないIDでした。
何度かやり取りしたもののうまくいかなかったので、自分でAWSコンソールから確認してAMI IDを修正しています。

> 新しいエラーがでました。こちらの内容の解析をお願いします。
> Resource handler returned message: "The image id '[ami-0c02fb55956c7d316]' does not exist (Service: Ec2, Status Code: 400, Request ID: 
> 36c64af1-02fb-4e4b-ad91-22bb03064278) (SDK Attempt Count: 1)" (RequestToken: c77529a9-89b1-8dd8-da0a-a8fa4b2105af, HandlerErrorCode: 
> InvalidRequest)

⏺ AMI ID ami-0c02fb55956c7d316 が存在しないか、現在のリージョンで利用できません。AMIはリージョン固有のリソースです。

AMIを常に最新化しておきたい場合はSSMから取得するのがよいとのことです。

この方法なら常に最新のAmazon Linux 2 AMIが自動選択され、リージョンに関係なく動作します。

ImageId: '{{resolve:ssm:/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2}}'

実行結果4~5: エラー

何度かClaudeとやり取りを進めました。

実行結果6: 成功!

rails-postgres-stack_v6_amazon_linux2.yaml

EC2のログインも成功しました!

psqlのクライアントツールもインストール済みで、RDSへの接続も問題ありませんでしたが、rubyが入れられていませんでした。

$ssh -i study_test_name.pem ec2-user@**.***.**.***
Last login: Fri Sep 19 04:52:40 2025 from ***-***-***-***.xx.xx-xxx.ne.jp
   ,     #_
   ~\\_  ####_        Amazon Linux 2
  ~~  \\_#####\\
  ~~     \\###|       AL2 End of Life is 2026-06-30.
  ~~       \\#/ ___
   ~~       V~' '->
    ~~~         /    A newer version of Amazon Linux is available!
      ~~._.   _/
         _/ _/       Amazon Linux 2023, GA and supported until 2028-03-15.
       _/m/'           <https://aws.amazon.com/linux/amazon-linux-2023/>

[ec2-user@ip-10-0-1-113 ~]$ psql --version
psql (PostgreSQL) 9.2.24

# RDSへの接続OK
[ec2-user@ip-10-0-1-113 ~]$ psql -h study-test-name-rails-postgresql-db.**********.ap-northeast-1.rds.amazonaws.com -U railsuser -d railsapp
ユーザー railsuser のパスワード: 

railsapp=> 

######
[ec2-user@ip-10-0-1-113 ~]$ ruby -v
-bash: ruby: コマンドが見つかりません

[ec2-user@ip-10-0-1-113 ~]$ rbenv --version
rbenv 1.3.2-10-gd1a19a3

# セットアップシェル
[ec2-user@ip-10-0-1-113 ~]$ ./setup_rails_app.sh
./setup_rails_app.sh: 行 6: rails: コマンドが見つかりません
./setup_rails_app.sh: 7 行: cd: myapp: No such file or directory
./setup_rails_app.sh: 行 12: config/database.yml: No such file or directory
./setup_rails_app.sh: 行 32: bundle: コマンドが見つかりません
./setup_rails_app.sh: 行 35: bundle: コマンドが見つかりません
./setup_rails_app.sh: 行 36: bundle: コマンドが見つかりません
./setup_rails_app.sh: 行 39: bundle: コマンドが見つかりません
Rails app setup complete!
To start the server, run: cd myapp && bundle exec rails server -b 0.0.0.0  

時間が足りずここまでしかできなかったので、Ruby・Railsのインストールは次の課題とします。

EC2, RDSの構築としては問題がなさそうなので、CloudFormationの可能性を感じた検証結果となりました。

●EC2

●RDS

スタックの削除

CloudFormationからスタックの削除をおこなうと、作成されたリソースがすべて削除されます。
依存関係も加味して逆順で削除していってくれるので便利です。

削除された履歴も確認ができるので、1つずつ確認していけば削除されていることが分かります。

注意として、かならずスタックから削除しないととんでもないことが起こります。

CloudFormationから削除
→依存関係で削除失敗
→EC2だけ手動で削除
→オートスケールでEC2が復活
→過剰請求
となってしまった事案がありました。

参考:Zenn – えいとびーと – 「クラウドでIDEを動かしたかっただけなのに」AWSで22万円のクラウド破産した話
https://zenn.dev/eightbeat/articles/ca6ce3d06c0265

今回確認したところ、RDS削除時にスナップショットを残してくれていました。
スナップショットなのでそこまで利用料金は発生しませんでしたが、このような削除漏れが大きな金額になってくるので、注意する必要がありそうです。
(今回は手動で削除しました。)

ClaudeCodeにAWS構成図を見せて作ってもらう

添付の画像を確認して、AWSのCloudFormationのyamlファイルを作成してください。
各種AWSの命名に関して、「study_test_name_」をつけてください

api-gateway-lambda-study.yaml

当初は「LambdaにHello Worldを返す処理を組み込んでほしい」と追加で依頼する予定でしたが、最初の依頼だけでその部分まで対応してくれました。

ただし、Lambda実行環境のPythonランタイムが3.9であったため、最新バージョンに更新するよう追加で依頼しました。

>lambdaのpythonが最新バージョンとなるように修正してください。
>API Gatewayの方にもバージョン概念があれば最新化をお願いします

⏺ Lambda PythonとAPI Gatewayを最新バージョンに更新します。

⏺ Read(api-gateway-lambda-study.yaml)
  ⎿  Read 275 lines (ctrl+o to expand)

⏺ Update(api-gateway-lambda-study.yaml)
  ⎿  Updated api-gateway-lambda-study.yaml with 1 addition and 1 removal
       25        Type: 'AWS::Lambda::Function'
       26        Properties:
       27          FunctionName: 'study_test_name_HelloWorldFunction'
       28 -        Runtime: 'python3.9'
       28 +        Runtime: 'python3.12'
       29          Handler: 'index.lambda_handler'
       30          Role: !GetAtt LambdaExecutionRole.Arn
       31          Code:

⏺ Lambda Pythonを最新版(3.12)に更新しました。

  更新内容:
  - Lambda Runtime: python3.9 → python3.12

  API Gatewayについて:
  現在のテンプレートは既にREST APIの最新の設定を使用しています。API Gateway V2(HTTP API)という選択肢もありますが、REST
  APIの方が機能が豊富で、現在の構成には適しています。

  - REST API: より多くの機能(認証、バリデーション、SDKなど)
  - HTTP API (V2): より軽量で高速、コストも安い

  現在の用途では REST API が適切です。必要に応じてHTTP API版のテンプレートも作成できます。

APIGatewayは少し意地悪して聞いてみましたが、きちんと回答してくれました。

API Gatewayについては回答できるかどうかを検証する意図で質問しましたが、適切に回答が得られました。

Pythonは3.12にアップデートされましたが、2025年9月18日時点では3.13が利用可能であるため、期待した結果としてはあと一歩というところです。

>pythonは現在3.13が最新で提供されているようです。調べてみて問題がなければ修正してください。

⏺ AWS Lambdaで現在サポートされているPythonバージョンを確認します。

⏺ Web Search("AWS Lambda Python runtime versions 2025 latest supported")
  ⎿  Did 1 search in 18s                                                                                                           

⏺ 確認しました。AWS LambdaでPython 3.13が2024年11月にサポート開始され、現在最新版として利用可能です。

⏺ Update(api-gateway-lambda-study.yaml)
  ⎿  Updated api-gateway-lambda-study.yaml with 1 addition and 1 removal
       25        Type: 'AWS::Lambda::Function'
       26        Properties:
       27          FunctionName: 'study_test_name_HelloWorldFunction'
       28 -        Runtime: 'python3.12'
       28 +        Runtime: 'python3.13'
       29          Handler: 'index.lambda_handler'
       30          Role: !GetAtt LambdaExecutionRole.Arn
       31          Code:

⏺ Lambda Pythonランタイムをpython3.13(最新版)に更新しました。

  更新内容:
  - Lambda Runtime: python3.12 → python3.13

  Python 3.13は2024年11月にAWS Lambdaでサポート開始された最新バージョンで、Amazon Linux 2023ベースの provided.al2023
  ランタイム上で動作し、最新の言語機能とパフォーマンス向上が利用できます。

無事にPython 3.13まで更新してくれました。

実行結果1: エラー

繰り返しのため省略。

実行結果2: 成功!

●lambda

●API Gateway

実際にAPIを起動したところ、期待通りにレスポンスが得られました。

$curl  <https://xxxxxxx.execute-api.ap-northeast-1.amazonaws.com/prod>

{
  "message": "Welcome to study_test_name API!",
  "availableEndpoints": [
    {
      "method": "GET",
      "path": "/"
    },
    {
      "method": "GET",
      "path": "/hello"
    },
    {
      "method": "POST",
      "path": "/hello"
    }
  ],
  "timestamp": "2025-09-19T06:50:13.749840"
}

$curl  <https://xxxxxxx.execute-api.ap-northeast-1.amazonaws.com/prod/hello>
{
  "message": "Hello from Lambda!",
  "path": "/hello",
  "method": "GET",
  "timestamp": "2025-09-19T06:50:48.639152",
  "requestId": "86716afb-19bd-4c00-8ba8-9d59092b787f",
  "queryParams": {},
  "requestBody": null
}

$curl  <https://xxxxxxx.execute-api.ap-northeast-1.amazonaws.com/prod/hell> 
{"message":"Missing Authentication Token"}

まとめ

Claude Codeを活用してAWS CloudFormationテンプレートの作成を検証した結果、期待通りに動作することを確認できました。

今回は単純な構成でしたが、複雑になればなるほどCloudFormationが使えるとインフラ構築の効率が大幅に向上し、品質も高く保つことができそうです。

Claude Codeの活用により導入ハードルが下がったように感じているので、今後のインフラ開発をより効率的に進められる可能性を実感できました。

参考

DevelopersIO(Koty Mousa 著):「AWS CloudFormation テンプレートを作ってもらおう!」 https://dev.classmethod.jp/articles/koty-mousa-ai-starter-claude-aws-cloudformation

Qiita(Nightley_dev 著):「CloudFormation使ってみた」
https://qiita.com/Nightley_dev/items/9ba1cf1744d8ae9fe021

DevelopersIO(Koty Mousa 著):「S3にアップロードしたAWS構成図をCloudFormationに変換するシステムを作ってみた」
https://dev.classmethod.jp/articles/bedrock-claude-convert-diagram-to-cfn

役に立ったらシェアしていただけると嬉しいです
  • URLをコピーしました!
  • URLをコピーしました!
目次