新機能Console-to-CodeでEC2を作成する際の注意

この記事を書いたメンバー:

榊原慶太

新機能Console-to-CodeでEC2を作成する際の注意

目次

BeeXの榊原です。先月Amazon Qからコンソール画面上の操作を記録して、その操作をコード化してくれるConsole-to-CodeがGAされたので試しに触ってみました。注意点だけすぐに知りたい方は本記事の最後、まとめをご参照ください。より詳しくConsole-to-Codeを知りたい方は公式ドキュメントや下のリリース記事をご覧ください。


Convert AWS console actions to reusable code with AWS Console-to-Code, now generally available | Amazon Web Services

AWS Console-to-Code generates reusable infrastructure as code from your AWS console actions, supporting Amazon EC2, RDS, and VPC. With a few clicks, get CloudFormation, CDK (TypeScript, Python, Java), or CLI code - a game-changer for streamlining cloud automation workflows.

aws.amazon.com

og_img


こちらの機能は2024/10/10時点では、EC2、VPC、RDSのみ対象となっております。今回は試しにEC2のみ触ってみました。前提として本記事の内容は、2024/11/24時点のものとなっております。

早速使ってみた

EC2のコンソール画面の右上のアイコン>「記録を開始」でコード生成の準備をします。




記録が進行中と表示されたら、さっそくインスタンスを起動させましょう。

EC2起動時コンソール画面のスクリーンショットは省略しますが、設定は以下の内容にして起動しました。特に記載の無いものはデフォルトから変更していません。

・EC2にNameタグ付与
・AMIは「Windows_Server-2022-Japanese-Full-Base-2024.11.13」を利用
・インスタンスタイプはm6i.xlarge
・キーペアやVPC、サブネット、SGは環境内の適当なもの
・ルートボリュームは100GiBでgp3、デフォルトのKMSキーで暗号化
・データボリューム(xvdd)50GiB、gp3、終了時削除をいいえ、デフォルトのKMSキーで暗号化
・IAMインスタンスプロファイルを指定
・終了保護を有効化

起動し終えて、コンソールを確認したらオペレーション「RunInstances」が追加されています。チェックを入れて、CFN YAMLを生成をクリックします。

ちなみにCloudFormationテンプレートを作成する場合、初回は下のように表示されます。ここで許可を選択するとテンプレートファイルがダウンロードできます。

なお現時点ですと出力されるコマンドには以下の選択肢があります。

・AWS CLI
・CDK Java
・CDK Python
・CDK TypeScript
・CloudFormation JSON
・CloudFormation YAML

ダウンロードされたテンプレートは下記の通りでした。

 Resources:

  EC2Instance:

    Type: AWS::EC2::Instance

    Properties:

      ImageId: ami-09eb7f8fa1e947e23

      InstanceType: m6i.xlarge

      KeyName: test20230131

      BlockDeviceMappings:

        - DeviceName: /dev/sda1

          Ebs:

            Encrypted: true

            DeleteOnTermination: true

            Iops: 3000

            KmsKeyId: 1321c80e-d7a6-40c4-99dc-9287d8bfc2f9

            SnapshotId: snap-0699719d8c0b9cf77

            VolumeSize: 100

            VolumeType: gp3

            Throughput: 125

        - DeviceName: xvdd

          Ebs:

            Encrypted: true

            DeleteOnTermination: false

            Iops: 3000

            KmsKeyId: 1321c80e-d7a6-40c4-99dc-9287d8bfc2f9

            VolumeSize: 50

            VolumeType: gp3

            Throughput: 125

      NetworkInterfaces:

        - AssociatePublicIpAddress: false

          DeviceIndex: 0

          GroupSet: 

            - sg-0093b22b1b3d39c2e

          SubnetId: subnet-0ad3eb52274d57478

      IamInstanceProfile:

        Arn: arn:aws:iam::XXXXXXXXXXXX:instance-profile/EC2_SSM

      PrivateDnsNameOptions:

        HostnameType: ip-name

        EnableResourceNameDnsARecord: false

        EnableResourceNameDnsAAAARecord: false

      Tags:

        - Key: Name

          Value: testInstance

Reasoning: {The provided AWS CLI command creates an EC2 instance with the specified properties such as AMI ID, instance type, key pair, block device mappings, network interface, IAM instance profile, private DNS name options, and a tag. The generated CloudFormation YAML code creates an AWS::EC2::Instance resource with the corresponding properties mapped from the CLI command. This ensures that the infrastructure as code accurately represents the intended EC2 instance configuration.}

さて、このままの状態でテンプレートを流したところエラーが出力されました。下記の通り編集を加えましょう。

・EBSを指定する際、スループットの指定はできないためThroughputをコメントアウト
・一番下の行の内容はコメントアウト
・IamInstanceProfileを下記の通り書き換える

# 修正前
IamInstanceProfile:
  Arn: arn:aws:iam::297193093732:instance-profile/EC2_SSM

# 修正後
IamInstanceProfile: EC2_SSM

この状態でEC2インスタンスを起動し、元のEC2インスタンスと差異が無いか念のため調べたところ1点設定が違うところを発見しました。元のインスタンスでは終了保護が有効化されていましたが、終了保護が無効になっていました

ここは環境問わず重要な設定なので、上のyamlファイルのEC2部分にDisbleApiTermination: trueを追記する等して対処しましょう。ちなみにEBSの方はDeleteOnTerminationの設定は反映されていました。(インスタンスID等は当然違う値になるので省略)

まとめ

検証の結果、投稿時点では下記に気を付けて運用すれば、Console-to-Codeを有効に使えると判断しました。

出力されたCloudFormationのyamlファイルについて、
・IAMインスタンスプロファイルの記法を修正
・EBSのThroughputの行と最後の行をコメントアウト
・インスタンスの終了保護の設定を追記

気が向いたら他に残っているVPCとRDSも検証します。ここまでお読みいただきありがとうございました。

カテゴリー

この記事を書いたメンバー

榊原慶太
榊原慶太

技術検証、re:Invent参加、AWS資格全冠のための勉強教材等、幅広く記事にしています。皆様のお役に立てば幸いです。最近は会社ブログメインで記事投稿しています。

SAPシステムや基幹システムのクラウド移行・構築・保守、
DXに関して
お気軽にご相談ください

03-6260-6240 (受付時間 平日9:30〜18:00)