Skip to content

Commit

Permalink
feat(rds): support 's3export' for Postgres database instances (#16124)
Browse files Browse the repository at this point in the history
As mentioned in #14546, Postgres database instances did not support `s3export` when most of the `s3 import/export` features were added in #10370. This PR fills in that gap now that `s3export` is [available](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/postgresql-s3-export.html) for Postgres.

The supported versions are documented [here](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/postgresql-s3-export.html) and I manually verified via AWS CLI that Postgres 13+ supports `s3export` as well.

Looking into the test suite, I think it makes more sense to modify the existing test than to create an entirely new one, similar to how other database instances test s3 import/export at the same time. But I can also move it to its own test if necessary.

I also fixed a very minor doc typo in `cluster-instance.ts`.

Closes #14546. 

----

*By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license*
  • Loading branch information
kaizencc authored Aug 25, 2021
1 parent ae34d4a commit 1d54a45
Show file tree
Hide file tree
Showing 4 changed files with 32 additions and 23 deletions.
7 changes: 4 additions & 3 deletions packages/@aws-cdk/aws-rds/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -359,11 +359,12 @@ You can read more about loading data to (or from) S3 here:

* Aurora MySQL - [import](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Integrating.LoadFromS3.html)
and [export](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Integrating.SaveIntoS3.html).
* Aurora PostgreSQL - [import](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraPostgreSQL.Migrating.html)
* Aurora PostgreSQL - [import](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraPostgreSQL.Migrating.html#USER_PostgreSQL.S3Import)
and [export](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/postgresql-s3-export.html).
* Microsoft SQL Server - [import & export](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/SQLServer.Procedural.Importing.html)
* Microsoft SQL Server - [import and export](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/SQLServer.Procedural.Importing.html)
* PostgreSQL - [import](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/PostgreSQL.Procedural.Importing.html)
* Oracle - [import & export](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/oracle-s3-integration.html)
and [export](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/postgresql-s3-export.html)
* Oracle - [import and export](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/oracle-s3-integration.html)

The following snippet sets up a database cluster with different S3 buckets where the data is imported and exported -

Expand Down
2 changes: 1 addition & 1 deletion packages/@aws-cdk/aws-rds/lib/cluster-engine.ts
Original file line number Diff line number Diff line change
Expand Up @@ -403,7 +403,7 @@ export interface AuroraPostgresEngineFeatures {
readonly s3Import?: boolean;

/**
* Whether this version of the Aurora Postgres cluster engine supports the S3 data import feature.
* Whether this version of the Aurora Postgres cluster engine supports the S3 data export feature.
*
* @default false
*/
Expand Down
40 changes: 24 additions & 16 deletions packages/@aws-cdk/aws-rds/lib/instance-engine.ts
Original file line number Diff line number Diff line change
Expand Up @@ -545,6 +545,13 @@ export interface PostgresEngineFeatures {
* @default false
*/
readonly s3Import?: boolean;

/**
* Whether this version of the Postgres engine supports the S3 data export feature.
*
* @default false
*/
readonly s3Export?: boolean;
}

/**
Expand Down Expand Up @@ -779,13 +786,13 @@ export class PostgresEngineVersion {
/** Version "10.13". */
public static readonly VER_10_13 = PostgresEngineVersion.of('10.13', '10', { s3Import: true });
/** Version "10.14". */
public static readonly VER_10_14 = PostgresEngineVersion.of('10.14', '10', { s3Import: true });
public static readonly VER_10_14 = PostgresEngineVersion.of('10.14', '10', { s3Import: true, s3Export: true });
/** Version "10.15". */
public static readonly VER_10_15 = PostgresEngineVersion.of('10.15', '10', { s3Import: true });
public static readonly VER_10_15 = PostgresEngineVersion.of('10.15', '10', { s3Import: true, s3Export: true });
/** Version "10.16". */
public static readonly VER_10_16 = PostgresEngineVersion.of('10.16', '10', { s3Import: true });
public static readonly VER_10_16 = PostgresEngineVersion.of('10.16', '10', { s3Import: true, s3Export: true });
/** Version "10.17". */
public static readonly VER_10_17 = PostgresEngineVersion.of('10.17', '10', { s3Import: true });
public static readonly VER_10_17 = PostgresEngineVersion.of('10.17', '10', { s3Import: true, s3Export: true });

/** Version "11" (only a major version, without a specific minor version). */
public static readonly VER_11 = PostgresEngineVersion.of('11', '11', { s3Import: true });
Expand All @@ -804,13 +811,13 @@ export class PostgresEngineVersion {
/** Version "11.8". */
public static readonly VER_11_8 = PostgresEngineVersion.of('11.8', '11', { s3Import: true });
/** Version "11.9". */
public static readonly VER_11_9 = PostgresEngineVersion.of('11.9', '11', { s3Import: true });
public static readonly VER_11_9 = PostgresEngineVersion.of('11.9', '11', { s3Import: true, s3Export: true });
/** Version "11.10". */
public static readonly VER_11_10 = PostgresEngineVersion.of('11.10', '11', { s3Import: true });
public static readonly VER_11_10 = PostgresEngineVersion.of('11.10', '11', { s3Import: true, s3Export: true });
/** Version "11.11". */
public static readonly VER_11_11 = PostgresEngineVersion.of('11.11', '11', { s3Import: true });
public static readonly VER_11_11 = PostgresEngineVersion.of('11.11', '11', { s3Import: true, s3Export: true });
/** Version "11.12". */
public static readonly VER_11_12 = PostgresEngineVersion.of('11.12', '11', { s3Import: true });
public static readonly VER_11_12 = PostgresEngineVersion.of('11.12', '11', { s3Import: true, s3Export: true });

/** Version "12" (only a major version, without a specific minor version). */
public static readonly VER_12 = PostgresEngineVersion.of('12', '12', { s3Import: true });
Expand All @@ -819,22 +826,22 @@ export class PostgresEngineVersion {
/** Version "12.3". */
public static readonly VER_12_3 = PostgresEngineVersion.of('12.3', '12', { s3Import: true });
/** Version "12.4". */
public static readonly VER_12_4 = PostgresEngineVersion.of('12.4', '12', { s3Import: true });
public static readonly VER_12_4 = PostgresEngineVersion.of('12.4', '12', { s3Import: true, s3Export: true });
/** Version "12.5". */
public static readonly VER_12_5 = PostgresEngineVersion.of('12.5', '12', { s3Import: true });
public static readonly VER_12_5 = PostgresEngineVersion.of('12.5', '12', { s3Import: true, s3Export: true });
/** Version "12.6". */
public static readonly VER_12_6 = PostgresEngineVersion.of('12.6', '12', { s3Import: true });
public static readonly VER_12_6 = PostgresEngineVersion.of('12.6', '12', { s3Import: true, s3Export: true });
/** Version "12.7". */
public static readonly VER_12_7 = PostgresEngineVersion.of('12.7', '12', { s3Import: true });
public static readonly VER_12_7 = PostgresEngineVersion.of('12.7', '12', { s3Import: true, s3Export: true });

/** Version "13" (only a major version, without a specific minor version). */
public static readonly VER_13 = PostgresEngineVersion.of('13', '13', { s3Import: true });
public static readonly VER_13 = PostgresEngineVersion.of('13', '13', { s3Import: true, s3Export: true });
/** Version "13.1". */
public static readonly VER_13_1 = PostgresEngineVersion.of('13.1', '13', { s3Import: true });
public static readonly VER_13_1 = PostgresEngineVersion.of('13.1', '13', { s3Import: true, s3Export: true });
/** Version "13.2". */
public static readonly VER_13_2 = PostgresEngineVersion.of('13.2', '13', { s3Import: true });
public static readonly VER_13_2 = PostgresEngineVersion.of('13.2', '13', { s3Import: true, s3Export: true });
/** Version "13.3". */
public static readonly VER_13_3 = PostgresEngineVersion.of('13.3', '13', { s3Import: true });
public static readonly VER_13_3 = PostgresEngineVersion.of('13.3', '13', { s3Import: true, s3Export: true });

/**
* Create a new PostgresEngineVersion with an arbitrary version.
Expand Down Expand Up @@ -864,6 +871,7 @@ export class PostgresEngineVersion {
this.postgresMajorVersion = postgresMajorVersion;
this._features = {
s3Import: postgresFeatures?.s3Import ? 's3Import' : undefined,
s3Export: postgresFeatures?.s3Export ? 's3Export' : undefined,
};
}
}
Expand Down
6 changes: 3 additions & 3 deletions packages/@aws-cdk/aws-rds/test/instance-engine.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -274,12 +274,12 @@ nodeunitShim({
test.done();
},

'returns s3 import feature if the version supports it'(test: Test) {
const engineNewerVersion = rds.DatabaseInstanceEngine.postgres({ version: rds.PostgresEngineVersion.VER_12_3 });
'returns s3 import/export feature if the version supports it'(test: Test) {
const engineNewerVersion = rds.DatabaseInstanceEngine.postgres({ version: rds.PostgresEngineVersion.VER_13_3 });

const engineConfig = engineNewerVersion.bindToInstance(new cdk.Stack(), {});
test.equals(engineConfig.features?.s3Import, 's3Import');
test.equals(engineConfig.features?.s3Export, undefined);
test.equals(engineConfig.features?.s3Export, 's3Export');

test.done();
},
Expand Down

0 comments on commit 1d54a45

Please sign in to comment.