AWS Console-to-Code使用してみた

## はじめに
AWSから、AWS Console-to-Code を正式リリースされました。
この機能を使えば、AWSコンソールで行った操作をCloudFormationやAWS CDKのコードに変換でき、Infrastructure as Code (IaC) の実現に役立ちます。

詳しくはこちら：

https://aws.amazon.com/jp/blogs/news/convert-aws-console-actions-to-reusable-code-with-aws-console-to-code-now-generally-available/

## AWS Console-to-Codeの概要
AWS Console-to-Codeは、AWSコンソール上の操作をリアルタイムで記録し、その操作に対応するコード（CLIコマンド、CloudFormation、CDKなど）を生成する機能です。
これにより、手動のコンソール操作から自動化のコード生成まで、効率よくコード化することが可能になります。

### 対応しているAWSサービス
現在、Console-to-Codeは以下の3つのサービスに対応しています。

・Amazon EC2
・Amazon RDS
・Amazon VPC

### サポートされるコードの形式
現時点では、Console-to-Codeは以下のコード形式でIaCコードを生成します。

・AWS CDK（Java, Python, TypeScript）
・CloudFormation（JSON, YAML）

※IaC（Infrastructure as Code）は、サーバのインフラ（CPUやメモリなど）をコードによって構成・管理する技術です。

https://www.redhat.com/ja/topics/automation/what-is-infrastructure-as-code-iac

## AWS Console-to-Codeの使い方
次に、Console-to-Codeを使用して、今回はEC2インスタンスの操作を記録しCLIコマンドを生成する手順を紹介します。

### 手順
1.AWSコンソールで、EC2サービスに移動します。
  インスタンス一覧から、コード化したいインスタンスを選択します。（停止中であれば起動します）。
  
  ![スクリーンショット 2024-10-28 11.21.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3829046/b3cc4b05-277e-770b-e251-9d50fa33b8bb.png)
  
2.Console-to-Codeウィジェットの起動
インスタンスIDをクリックして詳細を開き、画面右側に表示される「Console-to-Code」ウィジェットを選択します。「記録を開始」をクリックして操作を記録します。

 ![スクリーンショット 2024-10-27 21.06.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3829046/d92fee23-20c9-6aa8-365f-e4ed15c1abf7.png)

3.操作の記録
記録が終了したら、「停止」をクリックして記録を完了させます。
「記録を開始」をクリックし、操作を記録。

![スクリーンショット 2024-10-27 22.05.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3829046/c4a9845c-0194-d8ec-1ec8-6adc92a59c5c.png)

4.記録結果の確認とコード生成
記録されたアクションが表示されるので、コード形式（YAML, JSON, CDKなど）を選択してコードを生成します。

![スクリーンショット 2024-10-27 22.09.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3829046/3dfc5646-cfe5-fe6c-7ed6-b3e973437869.png)

5.コードのコピー
必要に応じて生成されたCLIコマンドをコピーし、AWS CloudShellなどで実行します。

![スクリーンショット 2024-10-28 11.31.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3829046/95f59241-8cb1-c261-efa5-7c0834036355.png)

これで、EC2インスタンスを起動するためのCLIコマンドが生成されます。

### 代表的なEC2アクション例
AWS Console-to-Codeでは、以下のようなEC2操作が記録可能です。

#### ・インスタンスの作成
　アクション: RunInstances（インスタンスの起動）

#### ・インスタンスの削除
　アクション: TerminateInstances（インスタンスの終了）
 
#### ・セキュリティグループの設定
　アクション: CreateSecurityGroup（新しいセキュリティグループの作成）
 
#### ・セキュリティグループへのルール追加
　アクション: AuthorizeSecurityGroupIngress（インバウンドルールの追加）
 
#### ・キーペアの作成
アクション: CreateKeyPair（SSHキーペアの生成）

各アクションは、タイムスタンプやリソースIDなどの詳細とともに、CLIコマンドやCloudFormation/CDKコードとして出力されます。

### 生成されたCLIコマンドの例
実際にConsole-to-Codeによって生成されたEC2インスタンスのCLIコマンド例は以下の通りです。

```
aws ec2 run-instances 
--image-id "i-xxxxxxxxxxxx" 
--instance-type "t2.micro" 
--key-name "my-key" 
--network-interfaces '{"AssociatePublicIpAddress":true,"DeviceIndex":0,"Groups":["sg-1a1aa1a1aa1a111a1"]}' 
--credit-specification '{"CpuCredits":"standard"}' --tag-specifications '{"ResourceType":"instance","Tags":[{"Key":"Name","Value":"test"}]}' 
--metadata-options '{"HttpEndpoint":"enabled","HttpPutResponseHopLimit":2,"HttpTokens":"required"}' 
--private-dns-name-options '{"HostnameType":"ip-name","EnableResourceNameDnsARecord":true,"EnableResourceNameDnsAAAARecord":false}' 
--count "1" 
```

このコマンドをAWS CloudShellなどで実行すると、指定した設定でEC2インスタンスを起動できます。
今回は、AWS CloudShellで起動させてみました。

![スクリーンショット 2024-10-27 23.08.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3829046/7071b1b4-7597-e80c-0001-01b4144feebc.png)

## まとめ
AWS Console-to-Codeは、手動で行った操作を簡単にコード化できるため、特にインフラ設定をIaCで管理する方にとって便利なツールだと思います。

現在の対応サービスは限定的ですが、今後の対応拡張が期待されます。

AWSでのコンソール操作を効率化し、自動化する手段として、非常に便利なツールだと感じました。