はじめに
JAWS-UG札幌にて、Amazon Q Developerのワークショップを開催して頂いたので、早速いくつか試してみます!
まずは、@katzueno様、ありがとうございました!
今回はコンソールの操作を記録して、IaCツールのフォーマットへ変換してくれるConsole-to-Codeについてです。
Console-to-Codeってなに?
コンソールには、リソースの作成とプロトタイプのテストを行うためのガイド付きのパスが用意されています。同じリソースを大規模に作成する場合は、オートメーションコードが必要です。 Console-to-Code は、オートメーションコードの開始に役立つ Amazon Q Developer の機能です。 Console-to-Codeは、デフォルト設定や互換性のあるパラメータを含むコンソールアクションを記録します。次に、生成 AI を使用して、必要なアクションに任意の infrastructure-as-code (IaC ) 形式のコードを提案します。コンソールワークフローは、指定したパラメータ値が一緒に有効であることを確認するため、 を使用して Console-to-Code生成するコードには互換性のあるパラメータ値があります。このコードを出発点として使用し、特定のユースケースの本番環境に対応するようにカスタマイズできます。
ユーザが操作していない初期値も含めて、IaCツールのフォーマットを作ってくれるツールみたいです。
今までは、とりあえずコンソール上で手動作成して、その後にIaCで作成し直す…なんでことがあり、それなりの工数が必要でしたが、それが不要になりそうです!
現在、IaC化可能な対象は以下の通りです。
- CDK Java
- CDK Python
- CDK TypeScript
- CloudFormation JSON
- CloudFormation YAML
対象リソースについては、以下の通り。(2024/11/1時点)
- Amazon EC2
- Amazon VPC
- Amazon RDS
さっそく試してみる!
まずはConsole-to-Codeの有効化。
画面右端の赤枠のところから操作可能。
「記録を開始」で、操作の記録が開始されます。
RDSインスタンスの作成
今回はSQLServerを別件で触る予定があったので、ほぼデフォルト設定で作ってみます。
マスターユーザの管理はSeacrets Managerを利用し、セキュリティグループは新規に適当に作成しました。
記録の停止
一通り操作し終わったら「停止」を押下して、記録を止めます。
記録されたアクションには、DBインスタンス、セキュリティグループとのそのインバウンドルールを作ったことが記載されてました。
作成対象を選択し、IaC化!
書き込み操作を全て選択し、CFN YAMLを作成
ボタンでIaC化してみます!
初回だけ、同意が必要です。
出来上がったyaml
こんなyamlができました。
Resources:
SQLServerSG:
Type: AWS::EC2::SecurityGroup
Properties:
GroupName: SQLServerSG
GroupDescription: Created by RDS management console
VpcId: vpc-0497180e1b4818371
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 1433
ToPort: 1433
CidrIp: 60.69.219.227/32
SQLServerInstance:
Type: AWS::RDS::DBInstance
Properties:
Engine: sqlserver-ex
EngineVersion: 15.00.4395.2.v1
LicenseModel: license-included
DBInstanceIdentifier: SQLServer
MasterUsername: admin
DBInstanceClass: db.t3.small
DBSubnetGroupName: mori-vpc
VPCSecurityGroups:
- !Ref SQLServerSG
AvailabilityZone: ap-northeast-1a
Port: 1433
StorageType: gp3
AllocatedStorage: 20
BackupRetentionPeriod: 0
PerformanceInsightsRetentionPeriod: 7
MonitoringRoleArn: arn:aws:iam::111111111111:role/rds-monitoring-role
MonitoringInterval: 60
DBParameterGroupName: default.sqlserver-ex-15.0
OptionGroupName: default:sqlserver-ex-15-00
MaxAllocatedStorage: 1000
NetworkType: IPV4
CACertificateIdentifier: rds-ca-rsa2048-g1
あと、こんな説明についても、出力されています。
Reasoning: {The provided CLI commands create an EC2 security group named "SQLServerSG" with an ingress rule allowing TCP traffic on port 1433 from the IP 60.69.219.227/32. It also creates an RDS DB instance named "SQLServer" with SQL Server Express 15.00.4395.2.v1 as the engine, using the license-included model. The instance is configured with a t3.small instance class, using the "mori-vpc" subnet group, and associated with the "SQLServerSG" security group. Other properties like storage, backup retention, monitoring, parameter group, and option group are set based on the CLI parameters. The generated CloudFormation template creates the corresponding resources with the specified properties.}
生成されたyamlで実際にスタックを作ってみる。
作成されたyamlは、テンプレートバージョンの指定がないのでAWSTemplateFormatVersion: 2010-09-09
を先頭に追加して、CloudFormationでスタックを作ってみます。
・・・あれ?マスターパスワードのところでエラーが出てますね。
Seacrets Managerのリソース作成が対応していないのが原因?
手動でマスターパスワードを設定した場合は?
セルフマネージドで設定した場合も試してみます。
一つエラーが出ましたが、そこだけ手動で直せば無事作成できました!
+ AWSTemplateFormatVersion: 2010-09-09
Resources:
SQLServerDBInstance:
Type: AWS::RDS::DBInstance
Properties:
Engine: sqlserver-ex
EngineVersion: 15.00.4395.2.v1
LicenseModel: license-included
DBInstanceIdentifier: SQLServer-OrginMasterPasswordCfn
MasterUsername: admin
DBInstanceClass: db.t3.small
DBSubnetGroupName: mori-vpc
VPCSecurityGroups:
- !Ref SQLServerSG
AvailabilityZone: ap-northeast-1a
Port: 1433
StorageType: gp3
AllocatedStorage: 20
BackupRetentionPeriod: 7
+ EnablePerformanceInsights: true
PerformanceInsightsRetentionPeriod: 7
MonitoringRoleArn: arn:aws:iam::111111111111:role/rds-monitoring-role
MonitoringInterval: 60
DBParameterGroupName: default.sqlserver-ex-15.0
OptionGroupName: default:sqlserver-ex-15-00
MaxAllocatedStorage: 1000
NetworkType: IPV4
CACertificateIdentifier: rds-ca-rsa2048-g1
MasterUserPassword: adminadmin
SQLServerSG:
Type: AWS::EC2::SecurityGroup
Properties:
GroupName: SQLServerSG_usepass_Cfn
GroupDescription: Created by RDS management console
VpcId: vpc-0497180e1b4818371
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 1433
ToPort: 1433
CidrIp: 60.69.219.227/32
さいごに
まだま今後に期待!って感じですが、
将来的にはIaC化の効率化にとても役に立ちそうでわくわくしました!