Slide 1

Slide 1 text

Aurora Serverless v2をaws Custom Resource(を使って)作成してみた

Slide 2

Slide 2 text

Agenda ● Aurora Serverless V2 ● IaCで構築したい ● 各ツールでの対応状況 ● aws Custom Resource をつかって ● 実際のコード ● まとめ

Slide 3

Slide 3 text

About us Soushi Hiruta コンテナを活用したマイクロサービス基盤設計、構築 SPA、BackendAPI基盤設計、構築 AWS CDK歴 1.5年ほど

Slide 4

Slide 4 text

前提条件 ● AWS CDK 2.28.1 ● Node.js v16.14.2 npm v8.5

Slide 5

Slide 5 text

Aurora Serverless v2スケール検証 ●

Slide 6

Slide 6 text

Aurora Serverless v2スケール検証 ● 100人のユーザがとあるサイトに同時にアクセスするような環 境をシミュレートを想定してpgbench 11.12から実施 transaction type: scaling factor: 100 query mode: simple number of clients: 100 number of threads: 1 number of transactions per client: 1000 number of transactions actually processed: 100000/100000 latency average = 471.550 ms tps = 212.066468 (including connections establishing) tps = 212.086562 (excluding connections establishing)

Slide 7

Slide 7 text

Aurora Serverless v2負荷がけ

Slide 8

Slide 8 text

Aurora Serverless v2監視観点 ● 負荷に応じて、ACUがスケールする。 ● Cloudwatch metrics でAverageとMaximumで差があるのは、事 前にある程度の予測がつく負荷の増減は、平均で、予定外の負 荷への対処は最大値をみるといい

Slide 9

Slide 9 text

構築自動化はしておきたい ● AWS CLI(boto3)、Cloudformation、AWS CDK、Teraform

Slide 10

Slide 10 text

AWS CLIでも作れますが。。。 ● aws rds create-db-cluster --db-cluster-identifier demo-aurora-serverless --db-cluster-parameter-group-name amazon-eks-vpc-private-s-rdsclusterparametergroup-lg8u5xkpnnjx --vpc-security-group-ids sg-0215b5f619554b318 --db-subnet-group-name subnet-aurora-postgresql --engine aurora-postgresql --engine-version 13.6 --master-username postgresql --master-user-password demo-aurora-root --storage-encrypted --no-enable-iam-database-authentication --serverless-v2-scaling-configuration MinCapacity=0.5,MaxCapacity=2 aws rds create-db-instance --db-instance-identifier demo-aurora-serverless-instance --engine aurora-postgresql --availability-zone ap-northeast-1a --db-parameter-group-name amazon-eks-vpc-private-subnets-wit-vpce-rdsparametergroup-1r19qjjkh2swg --engine-version 13.6 --db-cluster-identifier demo-aurora-serverless --db-instance-class db.serverless AWS CLIでも作成できますが、指定す るパラメータもめちゃくちゃ指定する必 要がある!

Slide 11

Slide 11 text

AWS CDK ● https://github.com/aws/aws-cdk/issues/20197

Slide 12

Slide 12 text

Cloudformation ● https://github.com/aws-cloudformation/cloudformation-coverage-roadmap/issues/1150

Slide 13

Slide 13 text

Teraform ● https://github.com/terraform-aws-modules/terraform-aws-rds-aurora/issues/269

Slide 14

Slide 14 text

boto3 ●

Slide 15

Slide 15 text

AWS SDK for go ● https://github.com/aws/aws-sdk-go-v2/blob/main/CHANGELOG.md

Slide 16

Slide 16 text

やっぱり、AWS CDK ● issueのコメントみていくと、ServerlessV2Configuration のところを、 awsCustomResourceでつくっているサンプルコードが投稿されてあり ました。

Slide 17

Slide 17 text

awsCustom Resource https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.custom_resources.AwsCustomResource. html

Slide 18

Slide 18 text

実際のコード

Slide 19

Slide 19 text

DatabaseCluster ●

Slide 20

Slide 20 text

AwsCustomResource ● クラスタ作成、更新時に ServerlessV2ScalingConfigrationパラメータを設定するのに 利用している

Slide 21

Slide 21 text

CDK Tips

Slide 22

Slide 22 text

fromSecretNameV2 ● credentials: Credentials.fromGeneratedSecret("postgres"), 上記でDBへの接続情報は、SecretManagerに書き込んでくれますが、 SecretMaanagerには、-<ランダムな文字列>で作成されるので、 fromSecretNameV2でを指定した場合、こんなリソースないとエラー となってしまう。 上記で作成されたSecretのArnを、ssm parameter storeで書き込んで、別Stackで、 fromSecretAttributesでSecretを取得するようにした。 https://zenn.dev/chatii/articles/708e4b55da1263

Slide 23

Slide 23 text

ParameterGroup ● ParameterGroupコンストラクトを利用していますが、instancesPropsの中の あるparametergroupとDatabaseCluster直下のparametergroupプロパティに よって、Cluster Parameter Groupあるいは、Parameter Groupとして認識す る。

Slide 24

Slide 24 text

まとめ ● ● 対応が待たれる場合でも、awsCustomResourceを利用して作成 できる ●

Slide 25

Slide 25 text

紹介したリファレンス ● ● https://github.com/boto/boto3/blob/develop/CHANGELOG.rst ● https://github.com/aws/aws-cdk/issues/20197 ● https://github.com/aws-cloudformation/cloudformation-covera ge-roadmap/issues/1150 ● https://github.com/aws/aws-sdk-go-v2/blob/main/CHANGELO G.md ● https://zenn.dev/chatii/articles/708e4b55da1263 ● https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUser Guide/aurora-serverless-v2.setting-capacity.html