Console to Code が一般提供開始されたので触ってみた!

AWS

2024.10.18

Topics

はじめに

こんにちは、Paseri です!

2024年10月10日から Amazon Q Developer を利用した Console to Code の一般提供が開始されました!
本記事ではサービスの特徴や利点、注意する点などをご紹介できればと思います!

今回は簡単な EC2 環境を構築することでどのような動作が行わるれるのか検証します!

サービス概要

Console to Code は、AWS マネジメントコンソール上の操作を記録することでコード化を行うサービスです。
これにより、一から CloudFormation 等のテンプレートを作成する手間を削減することができます。

(Google翻訳)
Console to Code を使用すると、AWS マネジメントコンソールでのプロトタイプ作成から本番環境へのデプロイ用のコード作成への移行が簡単、高速、かつコスト効率よく行えます。お客様は、1 回のクリックで、好みの形式でコンソールアクションのコードを生成できます。生成されたコードは、お客様が開始してタスクの自動化パイプラインをブートストラップするのに役立ちます。
コードを生成する Console to Code の一般提供開始を発表 – AWS

2024年10月11日時点で、以下3つのサービスをサポートしています。

  • Amazon VPC
  • Amazon EC2
  • Amazon RDS

料金

Console to Code は Amazon Q Developer の料金に基づいて発生します。

Amazon Q Developer の無料枠で利用することもできますが、月あたりのコード生成量に制限があります。
無料利用枠の場合、月に1,000行までのコードを生成することが可能です。

有料枠(Pro)の場合では、月4,000行までのコード生成が可能になります。
それ以上のコード生成は1行につき0.003USDの料金が発生します。

詳細は以下をご覧ください。
AI コーディングアシスタント – Amazon Q 開発者向け料金 – AWS

触ってみた

Console to Code の確認

EC2 のダッシュボードを開くと画面右端のタブに新しくアイコンが追加されています。
このアイコンを選択することで Console to Code のタブを開くことができます。
特に設定を行うことなくいつでも記録を行えるようです。

記録を開始を選択してみます。

記録が開始されました。
任意のタイミングで停止やリセットができるようです。
また、一度停止しても任意のタイミングで再開することが可能となっています。

若干不便に感じたのですが、Google Chromeの別タブに移動してしまうと記録されていないようです。
そのため、一つのタブに集中して作業を行う必要があります。

リソースの作成

それでは実際にリソースを作成し、どのようにコードが生成されるのか見ていきます。
今回はコンソール上で以下の構成を作成し、Console to Code によるコード化を行います。

記録を有効にした状態で VPC と周辺のリソース、EC2 インスタンスを作成します。


コードの生成

次にコードの生成を実行します。

記録を確認すると作業を区切りながら記録しているため、コードを分割して生成することもできるようです。
現在、CloudFormation は JSON か YAML の二つを選択することができます。
今回は YAML で生成しました。

※ 記事作成前の検証時(初回操作)に表示されました。
このタイミングで Console to Code がクロスリージョンの呼び出しを許可する必要があります。

許可することにより、コードの生成が実行されます。
どの種類のコードを生成するように選択しても CLI コマンドは生成されるようです。
このコマンドはファイルとしてダウンロードすることも可能です。

CloudFormation 用の YAML コードです。
タブの最下部まで進むとダウンロードをすることができます。
(コードは長いため記事の最後に記載にしています。)

ローカルPC上にダウンロードしました。
ファイル名を編集することはできないため、必要ならダウンロード後に名前を変更する必要があります。

CloudFormation へアップロード

生成されたコードが問題なく利用できるのか確認するために実際にデプロイしてみます。

ダウンロードしたファイルを CloudFormation のスタックへアップロードを行います。
ですが、ファイルをそのまま CloudFormation にアップロードしようとするとエラーが出てしまいます。

ファイルの中を確認してみるとコメントの部分まで記載されていました。
こちらはコードではないため、エディタで編集を行い削除します。

また、ファイルの中身を確認すると2か所にエラーが出ていました。
この2つの設定項目は起動テンプレート用の項目なため、今回の場合だと指定することができません。
そのため、以下のエラーが出ている部分も削除します。

再度 CloudFormation で操作を行うことで無事にスタックへアップロードすることができました。

コンソールから EC2 を確認すると問題なく2つ目のインスタンスが構築されていました。

今回の検証は以上となります。

最後に今回生成された YAML コードです。(一部公開できない設定値は置き換えています)

console-to-code.yaml

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

  PublicSubnet1:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
      CidrBlock: 10.0.0.0/20
      AvailabilityZone: ap-northeast-1a
      Tags:
        - Key: Name
          Value: paseri-test-subnet-public1-ap-northeast-1a

  InternetGateway:
    Type: AWS::EC2::InternetGateway
    Properties:
      Tags:
        - Key: Name
          Value: paseri-test-igw

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

  PublicRouteTable:
    Type: AWS::EC2::RouteTable
    Properties:
      VpcId: !Ref VPC
      Tags:
        - Key: Name
          Value: paseri-test-rtb-public

  PublicRoute:
    Type: AWS::EC2::Route
    Properties:
      RouteTableId: !Ref PublicRouteTable
      DestinationCidrBlock: 0.0.0.0/0
      GatewayId: !Ref InternetGateway

  SecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupName: paseri-test-sg
      GroupDescription: test Console to Code
      VpcId: !Ref VPC
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: 22
          ToPort: 22
          CidrIp: 0.0.0.0/0

  KeyPair:
    Type: AWS::EC2::KeyPair
    Properties:
      KeyName: paseri-key
      KeyType: rsa
      KeyFormat: pem

  EC2Instance:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: <your-ami-id>
      InstanceType: t2.micro
      KeyName: !Ref KeyPair
      BlockDeviceMappings:
        - DeviceName: /dev/xvda
          Ebs:
            Encrypted: true
            DeleteOnTermination: true
            Iops: 3000
            KmsKeyId: <your-kms-key-arn>
            SnapshotId: <your-snapshot-id>
            VolumeSize: 8
            VolumeType: gp3
      NetworkInterfaces:
        - AssociatePublicIpAddress: true
          DeviceIndex: 0
          GroupSet: 
            - !Ref SecurityGroup
          SubnetId: !Ref PublicSubnet1
      CreditSpecification:
        CPUCredits: standard
      PrivateDnsNameOptions:
        HostnameType: ip-name
        EnableResourceNameDnsARecord: false
        EnableResourceNameDnsAAAARecord: false
      Tags:
        - Key: Name
          Value: paseri-test-ec2

Outputs:
  VPC:
    Description: A reference to the created VPC
    Value: !Ref VPC
    Export:
      Name: !Sub "${AWS::StackName}-VPCID"

  PublicSubnets:
    Description: A list of the public subnets
    Value: !Ref PublicSubnet1
    Export:
      Name: !Sub "${AWS::StackName}-PUB-NETS"

  SecurityGroup:
    Description: Security group for the EC2 instance
    Value: !Ref SecurityGroup
    Export:
      Name: !Sub "${AWS::StackName}-SECGRP"

まとめ

今回は新しく一般提供された「Console to Code」を実際に触りながらご紹介させて頂きました!

操作を記録してコード化」してくれるのはなかなか面白い試みではないでしょうか?
現状サポートされているサービスが3つだけなので今後サポート対象が増えたら嬉しいですね!

検証で利用した環境を料金が発生しない状態で保持しておきたい方や、これからIaCを学習していきたいという方におすすめのサービスです!

ですが、若干構文等の所でまだ信頼しきれないところがあるのでその点は意識する必要がありそうです。

少しでも参考になれば幸いです!
最後までお読み頂きありがとうございました!

テックブログ新着情報のほか、AWSやGoogle Cloudに関するお役立ち情報を配信中!

Paseri

2024年新卒入社。うどん好きな初心者クラウドエンジニア。

Recommends

こちらもおすすめ

Special Topics

注目記事はこちら