[アップデート] Amazon DynamoDB でも Console-to-Code がサポートされました
いわさです。
AWS には Console-to-Code では一部サービスで Console-to-Code というマネジメントコンソール上の機能を使うことができます。
この機能を使うとマネジメントコンソール上でリソースに対して行った操作を記録し、そこから書き込みアクションを Amazon Q Developer で分析させて CloudFormation や CDK のソースコードを生成することができます。
この Console-to-Code、これまで EC2、VPC、RDS でのみサポートされていたのですが、先日のアップデートで DynamoDB も追加されました。
個人的には CloudTrail や IaC Generator でやりたいことは実現できていたかつもっと広い範囲にサービスがサポートされていたので Console-to-Code を使うことは少なかったのですが、DAX の作成もサポートされているのかなど少し気になる点があったので試してみましたので、様子を紹介します。
記録されるものの確認
まずは DynamoDB コンソールを確認してみます。
Console-to-Code がサポートされている機能の場合はヘルプパネルや Amazon Q を表示するアイコンエリアに次のように Console-to-Code 用のアイコンが追加されるのですが、DynamoDB コンソール上にも追加されていることを確認しました。
こちらを押すと Console-to-Code 用のパネルが表示されます。
操作の記録はユーザーが明示的に開始したタイミングから記録されます。
次の「記録を開始」ボタンを押すことで記録できます。
「記録を開始」ボタンを押すとと次のように「記録が進行中」と表示されます。この状態でマネジメントコンソール上で操作した内容が記録されます。
注意事項として、画面上にも記載されていますが「記録を開始」ボタンを押したこのタブでのみの操作が記録されますので注意しましょう。
テーブルを作成を開始しようとしたところ、画面上で操作した内容っぽいものが Console-to-Code パネルの「記録されたアクション」一覧に追加されはじめました。
読み取り専用操作も記録されるんですね。
適当なテーブルを作成してみると、次のように CreateTable などの書き込みアクションが記録されていることを確認出来ました。なるほど。
ポイントインタイムリカバリ機能など追加のオプション機能も有効化してみます。
次のように書き込みアクションとして UpdateContinuousBackups が実行されていることがわかりますね。CreateTable 以外も色々と考慮されていそうです。
ちなみに追加で DAX クラスターも作成してみたのですが、こちらも問題なく記録されていそうでした。
記録されたものを出力する
操作の記録が出来たら、記録されたものの中からどれを選択してどういう形式で出力するのかを選択します。
注意点がいくつかありまして、まず選択できるオペレーションは最大 20 個までとなっています。
また、読み取りアクションも選択はできるのですが、出力時には除外されるようになっています。
なので、次のように書き込みアクションのみを選択するようにし、その上で 20 個を超える場合は分割して操作しましょう。
出力形式は複数選択することが出来ます。
CDK であれば Java、Python、TypeScript から、CloudFormation の場合は JSON、YAML です。
CloudFromation/CKD 出力の初回操作時は次のようにクロスリージョン呼び出し実行について許可する必要があります。
CLI コマンドの出力のみであれば不要です。
上記を許可すると次のように Amazon Q Developer が CloudFormation コードの生成を開始します。
少し待つと次のようにコードが生成されるのでコピーするかダウンロード操作を行います。
上記にも免責事項的に記載されていますが、あくまでもこのコードをそのまま使うのではなくこれをベースに色々と調整していく必要があります。
なお、今回生成されたコードをダウンロードしたものは以下になります。
CFN/YAML
---
AWSTemplateFormatVersion: '2010-09-09'
Description: 'AWS CloudFormation template for DynamoDB table, DAX cluster, and Application Auto Scaling'
Resources:
# DynamoDB Table
DynamoDBTable:
Type: 'AWS::DynamoDB::Table'
Properties:
AttributeDefinitions:
- AttributeName: aaa
AttributeType: S
BillingMode: PAY_PER_REQUEST
KeySchema:
- AttributeName: aaa
KeyType: HASH
TableName: hoge0810table
TableClass: STANDARD
PointInTimeRecoverySpecification:
PointInTimeRecoveryEnabled: true
RecoveryPeriodInDays: 35
TimeToLiveSpecification:
AttributeName: hoge-time
Enabled: true
# Application Auto Scaling Policy
ApplicationAutoScalingPolicy:
Type: 'AWS::ApplicationAutoScaling::ScalingPolicy'
Properties:
PolicyName: console_d64b88cd-e50f-4a60-a700-ce3b971f6966;-scaling-policy
PolicyType: TargetTrackingScaling
ScalableDimension: dynamodb:table:ReadCapacityUnits
ServiceNamespace: dynamodb
ResourceId: !Sub 'table/${DynamoDBTable}'
TargetTrackingScalingPolicyConfiguration:
PredefinedMetricSpecification:
PredefinedMetricType: DynamoDBReadCapacityUtilization
TargetValue: 70
# DAX Subnet Group
DAXSubnetGroup:
Type: 'AWS::DAX::SubnetGroup'
Properties:
Description: ''
SubnetGroupName: hoge0810daxsubnet
SubnetIds:
- subnet-b461c1fc
# DAX Cluster
DAXCluster:
Type: 'AWS::DAX::Cluster'
Properties:
ClusterName: hoge0810cluster
NodeType: dax.r7i.large
IamRoleArn: 'arn:aws:iam::123456789012:role/service-role/hoge0810dax'
ReplicationFactor: 3
SubnetGroupName: !Ref DAXSubnetGroup
SecurityGroupIds:
- sg-ea2297a6
ParameterGroupName: default.dax1.0
SSESpecification:
Enabled: true
NetworkType: ipv4
ClusterEndpointEncryptionType: TLS
Reasoning:
1) Libraries and their versions used: AWS::DynamoDB::Table, AWS::ApplicationAutoScaling::ScalingPolicy, AWS::DAX::SubnetGroup, AWS::DAX::Cluster
2) AWS resources impacted: DynamoDB table, Application Auto Scaling policy, DAX subnet group, DAX cluster
3) AWS actions performed: Create DynamoDB table, create Application Auto Scaling policy for DynamoDB table read capacity, create DAX subnet group, create DAX cluster
4) The generated YAML creates a DynamoDB table with specified attributes, billing mode, key schema, and enables point-in-time recovery and time-to-live specification. It also creates an Application Auto Scaling policy to scale the DynamoDB table's read capacity based on utilization. Additionally, it creates a DAX subnet group and a DAX cluster with specified configurations like node type, replication factor, security group, and encryption settings.
さいごに
本日は Amazon DynamoDB でも Console-to-Code がサポートされたので使ってみました。
キャッチアップできていなかったのですが、Amazon Q Developer が動いているんですね。
無料で使い始めることができるのですが、無料枠の上限に達した場合は Amazon Q Developer Pro を利用する必要がある点が言及されていました。その場合は IAM Identity Center でマネジメントコンソールにアクセスできる必要があります。