Skip to content

Commit 0ec5fa5

Browse files
authored
feat(aws): Allow stack configuration of Aurora RDS scaling (#727)
* fix: update Aurora Postgres Engine to 13.16, to enable auto-pause feature * chore: update pulumi aws rds to v6
1 parent 137a528 commit 0ec5fa5

File tree

7 files changed

+89
-59
lines changed

7 files changed

+89
-59
lines changed

cloud/aws/common/config.go

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,12 +51,19 @@ type BatchComputeEnvConfig struct {
5151
LaunchTemplate *EcsLaunchTemplate `mapstructure:"launch-template,omitempty"`
5252
}
5353

54+
type AuroraRdsClusterConfig struct {
55+
MinCapacity float64 `mapstructure:"min-capacity"`
56+
MaxCapacity float64 `mapstructure:"max-capacity"`
57+
SecondsUntilAutoPause *int `mapstructure:"seconds-until-auto-pause"`
58+
}
59+
5460
type AwsConfig struct {
5561
ScheduleTimezone string `mapstructure:"schedule-timezone,omitempty"`
5662
Import AwsImports
5763
Refresh bool
5864
Apis map[string]*AwsApiConfig
59-
BatchComputeEnvConfig *BatchComputeEnvConfig `mapstructure:"batch-compute-env,omitempty"`
65+
BatchComputeEnvConfig *BatchComputeEnvConfig `mapstructure:"batch-compute-env,omitempty"`
66+
AuroraRdsClusterConfig *AuroraRdsClusterConfig `mapstructure:"aurora-rds-cluster,omitempty"`
6067
config.AbstractConfig[*AwsConfigItem] `mapstructure:"config,squash"`
6168
}
6269

@@ -92,6 +99,11 @@ var defaultBatchComputeEnvConfig = &BatchComputeEnvConfig{
9299
LaunchTemplate: nil,
93100
}
94101

102+
var defaultAuroraRdsClusterConfig = &AuroraRdsClusterConfig{
103+
MinCapacity: 0.5,
104+
MaxCapacity: 1,
105+
}
106+
95107
var defaultAwsConfigItem = AwsConfigItem{
96108
Telemetry: 0,
97109
}
@@ -140,6 +152,10 @@ func ConfigFromAttributes(attributes map[string]interface{}) (*AwsConfig, error)
140152
return nil, err
141153
}
142154

155+
if awsConfig.AuroraRdsClusterConfig == nil {
156+
awsConfig.AuroraRdsClusterConfig = defaultAuroraRdsClusterConfig
157+
}
158+
143159
for configName, configVal := range awsConfig.Config {
144160
// Add omitted values from default configs where needed.
145161
err := mergo.Merge(configVal, defaultAwsConfigItem)

cloud/aws/deploy/deploy.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,14 +40,14 @@ import (
4040
"github.com/pulumi/pulumi-aws/sdk/v5/go/aws/ecr"
4141
"github.com/pulumi/pulumi-aws/sdk/v5/go/aws/iam"
4242
"github.com/pulumi/pulumi-aws/sdk/v5/go/aws/lambda"
43-
"github.com/pulumi/pulumi-aws/sdk/v5/go/aws/rds"
4443
"github.com/pulumi/pulumi-aws/sdk/v5/go/aws/resourcegroups"
4544
"github.com/pulumi/pulumi-aws/sdk/v5/go/aws/s3"
4645
"github.com/pulumi/pulumi-aws/sdk/v5/go/aws/scheduler"
4746
"github.com/pulumi/pulumi-aws/sdk/v5/go/aws/secretsmanager"
4847
"github.com/pulumi/pulumi-aws/sdk/v5/go/aws/sqs"
4948
"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/codebuild"
5049
awsec2 "github.com/pulumi/pulumi-aws/sdk/v6/go/aws/ec2"
50+
"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/rds"
5151
"github.com/pulumi/pulumi-awsx/sdk/go/awsx/ec2"
5252
"github.com/pulumi/pulumi-docker/sdk/v4/go/docker"
5353
"github.com/pulumi/pulumi-random/sdk/v4/go/random"
@@ -107,7 +107,7 @@ type NitricAwsPulumiProvider struct {
107107

108108
var _ provider.NitricPulumiProvider = (*NitricAwsPulumiProvider)(nil)
109109

110-
const pulumiAwsVersion = "6.6.0"
110+
const pulumiAwsVersion = "6.67.0"
111111

112112
func (a *NitricAwsPulumiProvider) Config() (auto.ConfigMap, error) {
113113
return auto.ConfigMap{

cloud/aws/deploy/sql.go

Lines changed: 26 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ import (
3131
deploymentspb "github.com/nitrictech/nitric/core/pkg/proto/deployments/v1"
3232
"github.com/pulumi/pulumi-aws/sdk/v5/go/aws/ecr"
3333
"github.com/pulumi/pulumi-aws/sdk/v5/go/aws/iam"
34-
"github.com/pulumi/pulumi-aws/sdk/v5/go/aws/rds"
3534
"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/codebuild"
35+
"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/rds"
3636
"github.com/pulumi/pulumi-docker/sdk/v4/go/docker"
3737
"github.com/pulumi/pulumi-random/sdk/v4/go/random"
3838
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
@@ -83,23 +83,33 @@ func (a *NitricAwsPulumiProvider) rds(ctx *pulumi.Context) error {
8383
return err
8484
}
8585

86+
scaling := rds.ClusterServerlessv2ScalingConfigurationArgs{
87+
MinCapacity: pulumi.Float64(a.AwsConfig.AuroraRdsClusterConfig.MinCapacity),
88+
MaxCapacity: pulumi.Float64(a.AwsConfig.AuroraRdsClusterConfig.MaxCapacity),
89+
}
90+
91+
if a.AwsConfig.AuroraRdsClusterConfig.SecondsUntilAutoPause != nil && *a.AwsConfig.AuroraRdsClusterConfig.SecondsUntilAutoPause > 0 {
92+
if a.AwsConfig.AuroraRdsClusterConfig.MinCapacity != 0 {
93+
return fmt.Errorf("seconds-until-auto-pause can only be set when min-capacity is 0")
94+
}
95+
scaling.SecondsUntilAutoPause = pulumi.Int(*a.AwsConfig.AuroraRdsClusterConfig.SecondsUntilAutoPause)
96+
}
97+
8698
a.DatabaseCluster, err = rds.NewCluster(ctx, "postgresql", &rds.ClusterArgs{
87-
Engine: pulumi.String(rds.EngineTypeAuroraPostgresql),
88-
EngineVersion: pulumi.String("13.14"),
99+
ApplyImmediately: pulumi.Bool(true),
100+
Engine: pulumi.String(rds.EngineTypeAuroraPostgresql),
101+
EngineVersion: pulumi.String("13.16"),
89102
// TODO: limit number of availability zones
90-
AvailabilityZones: pulumi.ToStringArray(a.VpcAzs),
91-
DatabaseName: pulumi.String("nitric"),
92-
MasterUsername: pulumi.String("nitric"),
93-
MasterPassword: a.DbMasterPassword.Result,
94-
EngineMode: pulumi.String(rds.EngineModeProvisioned),
95-
Serverlessv2ScalingConfiguration: &rds.ClusterServerlessv2ScalingConfigurationArgs{
96-
MaxCapacity: pulumi.Float64(1),
97-
MinCapacity: pulumi.Float64(0.5),
98-
},
99-
VpcSecurityGroupIds: pulumi.StringArray{a.RdsSecurityGroup.ID()},
100-
DbSubnetGroupName: dbSubnetGroup.Name,
101-
SkipFinalSnapshot: pulumi.Bool(true),
102-
Tags: pulumi.ToStringMap(tags.Tags(a.StackId, "database-cluster", "DatabaseCluster")),
103+
AvailabilityZones: pulumi.ToStringArray(a.VpcAzs),
104+
DatabaseName: pulumi.String("nitric"),
105+
MasterUsername: pulumi.String("nitric"),
106+
MasterPassword: a.DbMasterPassword.Result,
107+
EngineMode: pulumi.String(rds.EngineModeProvisioned),
108+
Serverlessv2ScalingConfiguration: &scaling,
109+
VpcSecurityGroupIds: pulumi.StringArray{a.RdsSecurityGroup.ID()},
110+
DbSubnetGroupName: dbSubnetGroup.Name,
111+
SkipFinalSnapshot: pulumi.Bool(true),
112+
Tags: pulumi.ToStringMap(tags.Tags(a.StackId, "database-cluster", "DatabaseCluster")),
103113
// NOTE: Workaround for https://github.com/pulumi/pulumi-aws/issues/2426
104114
// Aurora instances don't support StorageType so we need to ignore changes otherwise we'll get unsolicited replacements
105115
}, pulumi.IgnoreChanges([]string{"storageType"}))

cloud/aws/go.mod

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -41,12 +41,12 @@ require (
4141
github.com/onsi/ginkgo v1.16.5
4242
github.com/onsi/gomega v1.34.2
4343
github.com/pkg/errors v0.9.1
44-
github.com/pulumi/pulumi-aws/sdk/v5 v5.35.0
45-
github.com/pulumi/pulumi-aws/sdk/v6 v6.32.0
44+
github.com/pulumi/pulumi-aws/sdk/v5 v5.43.0
45+
github.com/pulumi/pulumi-aws/sdk/v6 v6.67.0
4646
github.com/pulumi/pulumi-awsx/sdk v1.0.6
4747
github.com/pulumi/pulumi-docker/sdk/v4 v4.1.0
4848
github.com/pulumi/pulumi-random/sdk/v4 v4.8.2
49-
github.com/pulumi/pulumi/sdk/v3 v3.137.0
49+
github.com/pulumi/pulumi/sdk/v3 v3.148.0
5050
github.com/robfig/cron/v3 v3.0.1
5151
github.com/samber/lo v1.38.1
5252
github.com/uw-labs/lichen v0.1.7
@@ -75,7 +75,7 @@ require (
7575
github.com/Masterminds/semver/v3 v3.3.0 // indirect
7676
github.com/Microsoft/go-winio v0.6.2 // indirect
7777
github.com/OpenPeeDeeP/depguard/v2 v2.2.0 // indirect
78-
github.com/ProtonMail/go-crypto v1.0.0 // indirect
78+
github.com/ProtonMail/go-crypto v1.1.3 // indirect
7979
github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da // indirect
8080
github.com/agext/levenshtein v1.2.3 // indirect
8181
github.com/alecthomas/go-check-sumtype v0.1.4 // indirect
@@ -131,7 +131,7 @@ require (
131131
github.com/containerd/log v0.1.0 // indirect
132132
github.com/cpuguy83/go-md2man/v2 v2.0.4 // indirect
133133
github.com/curioswitch/go-reassign v0.2.0 // indirect
134-
github.com/cyphar/filepath-securejoin v0.2.4 // indirect
134+
github.com/cyphar/filepath-securejoin v0.3.6 // indirect
135135
github.com/daixiang0/gci v0.13.5 // indirect
136136
github.com/davecgh/go-spew v1.1.1 // indirect
137137
github.com/denis-tingaikin/go-header v0.5.0 // indirect
@@ -151,8 +151,8 @@ require (
151151
github.com/ghostiam/protogetter v0.3.6 // indirect
152152
github.com/go-critic/go-critic v0.11.4 // indirect
153153
github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect
154-
github.com/go-git/go-billy/v5 v5.5.0 // indirect
155-
github.com/go-git/go-git/v5 v5.12.0 // indirect
154+
github.com/go-git/go-billy/v5 v5.6.1 // indirect
155+
github.com/go-git/go-git/v5 v5.13.1 // indirect
156156
github.com/go-logr/logr v1.4.2 // indirect
157157
github.com/go-logr/stdr v1.2.2 // indirect
158158
github.com/go-openapi/jsonpointer v0.19.5 // indirect
@@ -196,6 +196,7 @@ require (
196196
github.com/hexops/gotextdiff v1.0.3 // indirect
197197
github.com/inconshreveable/mousetrap v1.1.0 // indirect
198198
github.com/invopop/yaml v0.1.0 // indirect
199+
github.com/iwdgo/sigintwindows v0.2.2 // indirect
199200
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect
200201
github.com/jgautheron/goconst v1.7.1 // indirect
201202
github.com/jingyugao/rowserrcheck v1.1.1 // indirect
@@ -288,7 +289,7 @@ require (
288289
github.com/sirupsen/logrus v1.9.3 // indirect
289290
github.com/sivchari/containedctx v1.0.3 // indirect
290291
github.com/sivchari/tenv v1.10.0 // indirect
291-
github.com/skeema/knownhosts v1.2.2 // indirect
292+
github.com/skeema/knownhosts v1.3.0 // indirect
292293
github.com/sonatard/noctx v0.0.2 // indirect
293294
github.com/sourcegraph/go-diff v0.7.0 // indirect
294295
github.com/spf13/afero v1.11.0 // indirect
@@ -300,7 +301,7 @@ require (
300301
github.com/ssgreg/nlreturn/v2 v2.2.1 // indirect
301302
github.com/stbenjam/no-sprintf-host-port v0.1.1 // indirect
302303
github.com/stretchr/objx v0.5.2 // indirect
303-
github.com/stretchr/testify v1.9.0 // indirect
304+
github.com/stretchr/testify v1.10.0 // indirect
304305
github.com/subosito/gotenv v1.4.1 // indirect
305306
github.com/tdakkota/asciicheck v0.2.0 // indirect
306307
github.com/tetafro/godot v1.4.17 // indirect

0 commit comments

Comments
 (0)