概要

  • 今回は、2024年10月にGA(General Availability) となったConsole-to-Code を紹介します。この機能は、AWS マネジメントコンソールで行ったアクションを記録し、再利用可能なコードに変換できる機能です。興味深いですね。
  • 記事の執筆時点で、Amazon EC2、Amazon VPC、Amazon RDS のサービスのみ対応しています。コードの変換は、AWS CLI、CloudFormation YAML あるいは JSON、CDK に対応しているようです。

 

Console-to-Codeでアクションを記録する

  • 試しに、EC2 インスタンスを作成し、アクションを記録します。
  • EC2のマネジメントコンソールから、右端にある① のマークを押します。次に、②の「記録を開始」を選択します。

 

  • 記録が開始されました。いつも通りにEC2 インスタンスを作成します。
  • 具体的には、名前(Nameタグ)、AMIにami-0ef29ab52ff72213b、インスタンスタイプにt2.micro、キーペア、VPC、サブネット、セキュリティグループ、ストレージ設定、IAMプロファイル、ユーザーデータを指定しました。

 

  • EC2 インスタンスが作成できました。
  • 右端のアイコンを押し、Console-to-Code を開き、「停止」を押して記録を止めます。

 

コードを生成してEC2を構築する

  • 次は、コードを生成します。
  • CloudFormation のYAML を生成します。「CFN YAMLを生成」を選択します。

 

  • コードのレビュー画面が表示されます。AWS CLIではないため、下方にある「許可」を押します。

 

 

  • CloudFormation のYAML が生成されました。

 

  • 「ダウンロード」ではなく「コピー」を押します。

 

 

  • 「コピー」を押した結果、以下のコードが生成されました。
Resources:
  EC2Instance:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: ami-0ef29ab52ff72213b
      InstanceType: t2.micro
      KeyName: niikawa-testkey
      UserData:
        Fn::Base64: !Sub |
          #!/bin/bash
          sudo hostnamectl set-hostname niikawa-test-linux
      BlockDeviceMappings:
        - DeviceName: /dev/xvda
          Ebs:
            Encrypted: false
            DeleteOnTermination: true
            Iops: 3000
            SnapshotId: snap-0xxxxxxxxxxxxxxxx
            VolumeSize: 10
            VolumeType: gp3
            Throughput: 125
      NetworkInterfaces:
        - AssociatePublicIpAddress: true
          DeviceIndex: 0
          GroupSet:
            - sg-0xxxxxxxxxxxxxxxx
          SubnetId: subnet-xxxxxxxx
      CreditSpecification:
        CPUCredits: standard
      Tags:
        - Key: Name
          Value: niikawa-test-ec2
      IamInstanceProfile:
        Arn: arn:aws:iam::111111111111:instance-profile/niikawa-ec2-ssm
      MetadataOptions:
        HttpEndpoint: enabled
        HttpPutResponseHopLimit: 2
        HttpTokens: required
      PrivateDnsNameOptions:
        HostnameType: ip-name
        EnableResourceNameDnsARecord: false
        EnableResourceNameDnsAAAARecord: false

Reasoning: {The provided AWS CLI command creates an EC2 instance with the specified properties like image ID, instance type, key pair, user data script, EBS volume, network interface, CPU credit specification, tags, IAM instance profile, metadata options, and private DNS name options. I have mapped each of these properties to the corresponding CloudFormation resource properties under the AWS::EC2::Instance resource type. The UserData property is base64 encoded as required by CloudFormation. The BlockDeviceMappings property is defined as a list with a single mapping for the root EBS volume. The NetworkInterfaces property is defined as a list with the specified subnet ID, security group, and public IP assignment. The count parameter from the CLI is not needed in CloudFormation as it will create the specified number of resources by default.}

 

  • 「ダウンロード」を押した場合、以下のコードが生成されました。(こちらは正しく生成されていません)
Resources:
  EC2Instance:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: ami-0ef29ab52ff72213b
      InstanceType: t2.micro
      KeyName: niikawa-testkey
      UserData:
        Fn::Base64: !Sub |
          

 

  • CloudFormation からコードを使用してリソースを作成します。

 

  • 無事に、EC2インスタンスが作成されました。

 

  • 色々と可能性を感じるサービスですね!今後のアップデートも楽しみです!