Console-to-Code使ってみた

記事タイトルとURLをコピーする

はじめに

こんにちは!サーバーワークスの滝澤です。

寒くなってきた今日この頃ですが、みなさんいかがお過ごしでしょうか?
私は3度目の新型コロナに感染してしまい、とてもしんどいです。

さて今回はConsole-to-CodeというIaCサービスが一般提供開始されたのでご紹介したいと思います。

そもそもIaCとは?

IaCはInfrastructure as Codeの略で、インフラストラクチャの設定や管理をコードとして扱う手法のことです。
インフラストラクチャをコードとして扱うことで、以下のメリットが享受できます。

項目 内容
再現性 同じコードを使うことで、同じインフラストラクチャを何度でも再現できます
バージョン管理 コードをバージョン管理システムで管理できるため、変更履歴を追いやすくなります
自動化 セットアップや変更を自動化でき、効率が向上します
一貫性 開発、テスト、本番環境など複数の環境で同じ設定を使えるため、一貫した環境を維持できます

AWSではAWS CloudFormationやAWS CDK、AWS SAMなどがIaCを実現するツールですね。
他にもAWSと連携しているTerraformなどがAWSで使用可能です。

Console-to-Codeって何?

概要

Console-to-CodeはAmazon Q Developerが提供する機能で、AWSマネジメントコンソールで実行されたアクションを再利用可能なコードに変換することでAWSサービスの自動化を支援するツールです。
このツールは、コンソールでのプロトタイピングとワークロードの本番環境に対応したコードのデプロイとギャップを埋めるために設計されています。
Console-to-Codeの主なキーポイントは以下の通りです。

項目 説明
機能 マネジメントコンソールでのアクションを記録し、生成AIを使用してそれらのアクションを複製するコードを提案
フォーマット ・AWS CloudFormation(JSON、YAML)
・AWS CDK(Java、Python、TypeScript)
・AWS CLIコマンド
サービス Amazon EC2、Amazon VPC、Amazon RDSのみ
(2024年10月31日現在)
ベストプラクティス 生成されたコードは、AWSがガイドするベストプラクティスに従っており、デプロイの信頼性を向上させ、本番環境に適したワークロードを作成するのに役立つ
カスタマイズ 生成されたコードを元に、特定のユースケースに合わせてさらにカスタマイズすることが可能
利用可能性 商用AWSリージョンで一般的に利用可能
価格 AWS CDKとCloudFormationフォーマットで月25回のコード生成が可能
Amazon Q Developerのpro版を使用することで月の利用上限無くなります

やってみた

VPC編

  1. AWSマネジメントコンソールにログインします。
  2. 「VPC」を選択します。
  3. 画面右側のAmazon Qの下にあるアイコンをクリックし、「記録を開始」を選択します。
  4. 記録を開始したら、実際にVPCを作成していきます。 実行したアクションが記録されていきます。

  5. VPCの作成が完了したので、「停止」をクリックして記録を停止します。

  6. 記録したアクションを確認するとタイプがWriteでVPCやサブネットが作られたことがわかります。

  7. 試しにルートテーブル作成のアクションを選択し、「CLIをコピー」を実行すると以下のようなコードがコピーされていました。
    aws ec2 create-route --route-table-id "rtb-05d54e5338d934297" --destination-cidr-block "0.0.0.0/0" --nat-gateway-id "nat-05e8455279ca3bf71"

  8. 一連のVPC作成手順をCFnにするため、プルダウンから「CFN YAMLを生成」を選択します。

    この時、AWSアカウント内でクロスリージョン呼び出しを実行する同意が必要となるので、「許可」を選択してください。 

    また、タイプの選択で「すべてのタイプ」を選択している場合、読み取りアクションは生成されたコードから除外される旨のメッセージが表示されます。

  9. コードの生成に成功すると、画像のようにコードが生成されていき、ファイルとしてダウンロードできるようになります。

  10. ダウンロードが完了したら、「リセット」から記録したアクションを消します。

このように簡単にCFnを作成することができました。
ちなみに、作成されたコードの全文は以下の通りです。

Resources:
  TestProjectVPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 10.0.0.0/16
      EnableDnsHostnames: true
      InstanceTenancy: default
      Tags:
        - Key: Name
          Value: test-project-vpc
        - Key: Env
          Value: test

  TestProjectSubnetPublic1:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref TestProjectVPC
      CidrBlock: 10.0.0.0/24
      AvailabilityZone: ap-northeast-1a
      Tags:
        - Key: Name
          Value: test-project-subnet-public1-ap-northeast-1a
        - Key: Env
          Value: test

  TestProjectSubnetPublic2:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref TestProjectVPC  
      CidrBlock: 10.0.16.0/24
      AvailabilityZone: ap-northeast-1c
      Tags:
        - Key: Name
          Value: test-project-subnet-public2-ap-northeast-1c
        - Key: Env
          Value: test

  TestProjectSubnetPrivate1:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref TestProjectVPC
      CidrBlock: 10.0.128.0/24
      AvailabilityZone: ap-northeast-1a
      Tags:
        - Key: Name
          Value: test-project-subnet-private1-ap-northeast-1a
        - Key: Env
          Value: test

  TestProjectSubnetPrivate2:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref TestProjectVPC
      CidrBlock: 10.0.144.0/24
      AvailabilityZone: ap-northeast-1c
      Tags:
        - Key: Name
          Value: test-project-subnet-private2-ap-northeast-1c
        - Key: Env
          Value: test

Reasoning: {The provided AWS CLI commands create a VPC with CIDR 10.0.0.0/16, enable DNS hostnames, and tag it. It also creates 4 subnets - 2 public and 2 private across two availability zones ap-northeast-1a and ap-northeast-1c. The generated CloudFormation YAML creates the corresponding resources - a VPC with the specified properties, and 4 subnets with their respective CIDR blocks, availability zones and tags. The VPC id is referenced for each subnet using the !Ref function. Only the resources specified in the CLI commands are created.}

まとめ

今回はConsole-to-Codeを使ってみました。
とても簡単にIaCを実現できる便利なツールですね。
ただし、作成されたCFnのコードをみて貰えばわかる通り、必要最低限のResourcesセッションのみが作成されます。そのため、実際に使用する際は、DescriptionやMetadata、Parametersなどのセッションも追加してカスタマイズする必要があります。
あくまで、下地として使うことをおすすめします!

この記事が誰かの役に立つと幸いです。

kento.takizawa(記事一覧)

妻と娘をこよなく愛すエンジニア