Console-to-Code Preview: Test Drive, Bright Future
Tags: aws, amazon, ai, infrastructureascode
Published: 2023-12-13 17:03:42

Every November brings excitement to the tech world with the Amazon Web Services (AWS) re:Invent conference. This year, the focus was on Generative AI (GenAI). Among the many GenAI releases was a new EC2 console feature called "[Console-to-Code](https://aws.amazon.com/about-aws/whats-new/2023/11/aws-console-to-code-preview-generate-console-actions/)." This tool transforms console actions into code. I love this idea. Using this tool, newcomers can more easily adopt the best practice of using Infrastructure as Code (IaC). This tool can even help seasoned IaC professionals create new templates while adding rarely used resource types. Let's take this new feature for a test drive.

First, let's create a spot instance and get a CloudFormation template. Hmm, it did not recognize the console action of creating a new spot instance. Oh well. Let's create an on-demand instance. It did see those actions and generated the following CloudFormation YAML:
```
Resources:
  EC2Instance: 
    Type: AWS::EC2::Instance
    Properties:
      ImageId: ami-0230bd60aa48260c6
      InstanceType: t2.micro
      KeyName: mine
      BlockDeviceMappings: 
        - DeviceName: /dev/xvda
          Ebs:
            Encrypted: true
            DeleteOnTermination: true
            Iops: 3000
            KmsKeyId: arn:aws:kms:us-east-1:XXXXXXXXXXXX:key/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
            SnapshotId: snap-xxxxxxxxxxxxxxxxx
            VolumeSize: 8
            VolumeType: gp3
            Throughput: 125
      NetworkInterfaces:
        - AssociatePublicIpAddress: true
          DeviceIndex: 0
          GroupSet: 
            - sg-xxxxxxxxxxxxxxxxx
      TagSpecifications:
        - ResourceType: instance
          Tags:
            - Key: Name
              Value: My Test
      MetadataOptions:
        HttpTokens: required
        HttpEndpoint: enabled
        HttpPutResponseHopLimit: 2
      PrivateDnsNameOptions:
        HostnameType: ip-name
        EnableResourceNameDnsARecord: true
        EnableResourceNameDnsAAAARecord: false
      ClientToken: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
      Count: 1
      
  SecurityGroupIngress:
    Type: AWS::EC2::SecurityGroupIngress
    Properties:
      GroupId: sg-xxxxxxxxxxxxxxxxx
      IpProtocol: tcp
      FromPort: 22
      ToPort: 22
      CidrIp: 0.0.0.0/0
      
  SecurityGroup:
    Type: AWS::EC2::SecurityGroup  
    Properties:
      GroupName: launch-wizard-1
      GroupDescription: launch-wizard-1 created 2023-12-11T17:23:59.534Z
      VpcId: vpc-xxxxxxxxxxxxxxxxx
```
Let's save that as a YAML file and try to create an identical EC2 instance using the CloudFormation console. That attempt failed with the following:
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qca1tiqd6z4j4seoigmn.png)
I see the problem. "TagSpecifications:" and "- ResourceType: instance" are invalid properties. Remove those two lines and two indention levels for the "Tags:" block. Now, let's try again. Now, the CloudFormation creation failed with the following:
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/i5nej5xaycr251zofwf9.png)
Let's remove the "MetadataOptions" property and the keys within and try again. Next, the CloudFormation stack creation failed with the following:
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/trmk197j00sk55g2vyg1.png)
I am less concerned about this because no one should create a security group with a default name like launch-wizard-x. Let's try again. This time, it failed with the following:
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/l267153y306mhwkhus8x.png)
"Count: 1." Where did that come from? Terraform? Remove that line and try again. Next, it failed with the following:
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/e648pge3jb0eijr4it8y.png)
Remove the "ClientToken:" line and try again. Now, it failed with the following:
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/draa2rlwxl80jogpgsek.png)
Remove the "Throughput:" line and try again. It worked!
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qbrr6ztuqiogmjq1dasn.png)
I thought creating an EC2 instance with all default settings except my key pair would be a simple test of this new feature. However, after needing to fix the provided template over six iterations to deploy successfully, I conclude that this feature is unfortunately not ready to be used. It is fun to play with, though. I understand this feature is still in preview, but what can this current version successfully do? The current version is limited in scope to the EC2 console. In the EC2 console, what is more fundamental than creating an EC2 instance?

In conclusion, I love the idea of this new feature, and I greatly look forward to it being improved and expanded to other AWS services. This feature will help more customers achieve the best practice of using IaC. I cannot wait for an announcement of improvements to this service so I can take it for another test drive.

Thanks for reading!