【AWS】いつから私の書いたCodeだと錯覚していた？AWS Console-to-Codeを検証！

## この記事で伝えたいこと

- AWS Console-to-Codeをハンズオンしているよ
- AWS Console-to-Codeの展望や実用に耐えうるかを考察しているよ

## はじめに

この記事では「この前リリースされた機能って実際に動かすとどんな感じなんだろう」とか「もしかしたら内容次第では使えるかも」などAWSサービスの中でも特定の機能にフォーカスして検証していく記事です。主な内容としては実践したときのメモを中心に書きます。（忘れやすいことなど）
誤りなどがあれば書き直していく予定です。

今回はAWS Console-to-Code（以下、AWS CtoC）を検証してみます。

## AWSマネジメントコンソールを操作したらコードが生成されるってさ？

コンソールを操作したらコードが生成されるって？！なんだって？
AWS Console-to-CodeはAWS re:Invent 2023でプレビュー版として発表されたサービスです。

プレビューとして発表されたときのwhats-newとしては以下のとおりです。

[コンソールアクションに対するコードを生成する AWS Console-to-Code (プレビュー) の発表 - whats-new](https://aws.amazon.com/jp/about-aws/whats-new/2023/11/aws-console-to-code-preview-generate-console-actions/)

正式リリースとして告知がなされたのは2024年10月10日です。（以下、参考リンク）

- [Convert AWS console actions to reusable code with AWS Console-to-Code, now generally available - AWS News Blog](https://aws.amazon.com/jp/blogs/aws/convert-aws-console-actions-to-reusable-code-with-aws-console-to-code-now-generally-available/)

- [Announcing general availability of Console to Code to generate code whats-new](https://aws.amazon.com/jp/about-aws/whats-new/2024/10/general-availability-console-to-code-generate-code/)

紹介ブログ

- [AWS コンソールアクションを再利用可能なコードに変換する AWS Console-to-Code の一般提供を開始 - Amazon Web Services ブログ](https://aws.amazon.com/jp/blogs/news/convert-aws-console-actions-to-reusable-code-with-aws-console-to-code-now-generally-available/)

[リンク](https://docs.aws.amazon.com/ja_jp/amazonq/latest/qdeveloper-ug/chat-costs.html)

## 対応状況（リージョン・サービス）

実際に使うまえにもろもろ確認したいと思います。まず、ドキュメントを確認してみましょう。
ドキュメントには以下のように記載がありました。

> 現在、米国東部 (バージニア北部) リージョンでのみ利用可能です。

[Console-to-Code を使用してコンソールアクション用のコードを生成する docs](https://docs.aws.amazon.com/ja_jp/ec2/latest/devguide/console-to-code.html)

後述しますが、実際に使ってみたら東京リージョンでも利用できました。

## 料金

さっそく触りたいところですが、その前に料金を見ていきましょう。
実を言うとこの機能は追加料金なしで利用できます。

[参考：Console-to-Code を使用してコンソールアクション用のコードを生成する](https://docs.aws.amazon.com/ja_jp/ec2/latest/devguide/console-to-code.html)

## 実際に触ってみた

AWS マネジメントコンソールからVPCを開きます。

![Screenshot 2024-11-06 at 5.40.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/3c176567-15b4-561d-f8bd-6c8d9ae2a7b0.png)

マネジメントコンソールの右側、Amazon Qのアイコンの下にAWS CtoCのアイコンがあります。アイコンをクリックします。

![Screenshot 2024-11-06 at 5.33.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/eb7e5ac1-84b0-e64a-5246-78ef6eba081c.png)

新しいウィンドウで開くので`Start Recording`をクリックします。
`Start Recording`でレコーディングを開始するとここから先のマネジメントコンソールの操作が記録されます。

![Screenshot 2024-11-06 at 5.34.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/7fc4bcf4-9b13-06c6-17f2-469d87a5a460.png)

今回はVPCを作ってみましょう。

## Start Recording

### VPCを作る

左メニューから`Your VPCs`をクリックします。

![Screenshot 2024-11-06 at 5.43.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/3ad635a8-8595-a87c-ba0d-4dfaf27afed1.png)

`Create VPC`でVPCを作成します。

![Screenshot 2024-11-06 at 5.44.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/eb10057a-2b09-8b4f-1714-91ce273e9efb.png)

各項目を埋めていきます。

|項目|値|
|:---|:---|
|Resource to create|VPC only|
|Name tag|aws-ctoc|
|IPv4 CIDR|10.0.0.0/24|

それ以外はデフォルトで問題ありません。
最後に`Create VPC`ではなく、`Preview code`を実行します。

![Screenshot 2024-11-06 at 5.46.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/76a82591-07d7-2307-9b8f-6f2f9ccd2a30.png)

画面右側のメニューが異なる画面に切り替わるので`Add to recording`を実行します。

![Screenshot 2024-11-06 at 5.51.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/ce4287a7-b727-ba15-c1fe-2d6f95178d1b.png)

## CDKの生成

レコーディングが終わったので実際にコードを生成してみましょう。`Generate CFN YAML`から`Generate CDK TypeScript`をクリックします。

※`Generate CFN YAML`なのにCDKなのかってツッコミはなしでお願いします。

![Screenshot 2024-11-06 at 5.54.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/031e3136-319d-5207-4230-e76ea8ee3653.png)

しばらく待ちましょう。

実行結果

```typescript
import * as cdk from 'aws-cdk-lib';
import * as ec2 from 'aws-cdk-lib/aws-ec2';

const stack = new cdk.Stack();

const vpc = new ec2.Vpc(stack, 'aws-ctoc', {
  cidr: '10.0.0.0/24',
  instanceTenancy: ec2.DefaultInstanceTenancy.DEFAULT,
  natGateways: 0,
  maxAzs: 2,
  vpcName: 'aws-ctoc'
});
```

```text
Reasoning: {
The provided AWS CLI command creates a new VPC with the following properties:
- Instance tenancy is set to "default"
- CIDR block is set to "10.0.0.0/24"
- A tag with key "Name" and value "aws-ctoc" is added to the VPC

In the CDK code, I create a new `ec2.Vpc` construct with the following properties:
- `cidr`: Set to the provided CIDR block '10.0.0.0/24'
- `instanceTenancy`: Set to `ec2.DefaultInstanceTenancy.DEFAULT` which corresponds to the "default" instance tenancy in the CLI command
- `natGateways`: Set to 0 since the CLI command does not create any NAT gateways
- `maxAzs`: Set to 2 which is the default value for the number of availability zones
- `vpcName`: Set to 'aws-ctoc' to match the tag value provided in the CLI command

The `ec2.Vpc` construct in the CDK creates a new VPC with the specified properties and applies the provided tag to the VPC resource.
}

```

AZの指定まで入れた覚えはないですが、おおむね問題なく生成されています。`Reasoning`をみるとどのような過程で生成したかまで確認できます。

## CloudFormationの生成

次にCloudFormationのコードを生成します。`Generate CFN YAML`から`Generate CFN YAML`をクリックします。

![Screenshot 2024-11-06 at 5.55.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/d9fcb291-b8d8-0bd6-326d-12eec74a1c0c.png)

実行結果

```yaml
Resources:
  VPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 10.0.0.0/24
      InstanceTenancy: default
      Tags:
        - Key: Name
          Value: aws-ctoc
```

```text
Reasoning: {The provided AWS CLI command creates a new VPC with a CIDR block of 10.0.0.0/24, default instance tenancy, and a tag with the key "Name" and value "aws-ctoc". In CloudFormation, this can be represented using the AWS::EC2::VPC resource type. The CidrBlock and InstanceTenancy properties are set based on the CLI command, and the Tags property is created using the tag-specifications parameter.}
```

問題なく生成されました。ただし、CDKと違ってAZの指定がありません。それもそのはずCloudFormationのテンプレートでVPCを作成する際にはAZの指定はありません。（以下、参考ドキュメント）

[AWS::EC2::VPC](https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpc.html)

シンプルにVPCを作ったとき、CDKのほうがいくらか粒度細かくできるということがわかりました。

## この機能はどこで使える

ハンズオンは以上です。
まだ対応しているサービスが少ないがゆえに使い方を見出せない側面があります。
対応サービスが増えたらマネジメントコンソールによる設定とコードによる定義を見比べてトラブルシューティングができるかなと思います。

対応しているサービスが増えたとしてもこの機能だけで希望のコードを生成できるとも限らないので
今のところは参考程度に見ておきましょう。

## まとめ

AWSマネジメントコンソールを操作したらコードが生成されるサービス、AWS Console-to-Codeを見ました。昔からあったら良いなと思う機能だった反面、まだ理想には遠いという印象を持ちました。

ただ、コンソールによる構築からコードによる構築に慣れるための一歩として使うならば、とても良い機能だと思いました。