eoapi-cdk 10.1.0 → 10.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsii +47 -32
- package/LICENSE +21 -0
- package/lib/bastion-host/index.js +1 -1
- package/lib/database/PgBouncer.d.ts +1 -0
- package/lib/database/PgBouncer.js +30 -1
- package/lib/database/index.d.ts +42 -3
- package/lib/database/index.js +44 -5
- package/lib/database/lambda/package.json +2 -1
- package/lib/database/lambda/pgbouncer-health-check/health-check.sh +135 -0
- package/lib/database/lambda/pgbouncer-health-check/index.d.ts +2 -0
- package/lib/database/lambda/pgbouncer-health-check/index.js +221 -0
- package/lib/database/pgbouncer-setup.sh +127 -12
- package/lib/ingestor-api/index.js +1 -1
- package/lib/lambda-api-gateway/index.js +1 -1
- package/lib/lambda-api-gateway-private/index.js +1 -1
- package/lib/stac-api/index.js +2 -2
- package/lib/stac-auth-proxy/index.js +2 -2
- package/lib/stac-browser/index.js +1 -1
- package/lib/stac-loader/index.js +2 -2
- package/lib/stactools-item-generator/index.js +1 -1
- package/lib/tipg-api/index.js +2 -2
- package/lib/titiler-pgstac-api/index.js +2 -2
- package/lib/titiler-pgstac-api/runtime/Dockerfile +4 -0
- package/package.json +1 -1
package/.jsii
CHANGED
|
@@ -4170,7 +4170,7 @@
|
|
|
4170
4170
|
"kind": "interface",
|
|
4171
4171
|
"locationInModule": {
|
|
4172
4172
|
"filename": "lib/database/index.ts",
|
|
4173
|
-
"line":
|
|
4173
|
+
"line": 335
|
|
4174
4174
|
},
|
|
4175
4175
|
"name": "DatabaseParameters",
|
|
4176
4176
|
"properties": [
|
|
@@ -4183,7 +4183,7 @@
|
|
|
4183
4183
|
"immutable": true,
|
|
4184
4184
|
"locationInModule": {
|
|
4185
4185
|
"filename": "lib/database/index.ts",
|
|
4186
|
-
"line":
|
|
4186
|
+
"line": 351
|
|
4187
4187
|
},
|
|
4188
4188
|
"name": "effectiveCacheSize",
|
|
4189
4189
|
"type": {
|
|
@@ -4199,7 +4199,7 @@
|
|
|
4199
4199
|
"immutable": true,
|
|
4200
4200
|
"locationInModule": {
|
|
4201
4201
|
"filename": "lib/database/index.ts",
|
|
4202
|
-
"line":
|
|
4202
|
+
"line": 361
|
|
4203
4203
|
},
|
|
4204
4204
|
"name": "maintenanceWorkMem",
|
|
4205
4205
|
"type": {
|
|
@@ -4215,7 +4215,7 @@
|
|
|
4215
4215
|
"immutable": true,
|
|
4216
4216
|
"locationInModule": {
|
|
4217
4217
|
"filename": "lib/database/index.ts",
|
|
4218
|
-
"line":
|
|
4218
|
+
"line": 339
|
|
4219
4219
|
},
|
|
4220
4220
|
"name": "maxConnections",
|
|
4221
4221
|
"type": {
|
|
@@ -4231,7 +4231,7 @@
|
|
|
4231
4231
|
"immutable": true,
|
|
4232
4232
|
"locationInModule": {
|
|
4233
4233
|
"filename": "lib/database/index.ts",
|
|
4234
|
-
"line":
|
|
4234
|
+
"line": 366
|
|
4235
4235
|
},
|
|
4236
4236
|
"name": "maxLocksPerTransaction",
|
|
4237
4237
|
"type": {
|
|
@@ -4247,7 +4247,7 @@
|
|
|
4247
4247
|
"immutable": true,
|
|
4248
4248
|
"locationInModule": {
|
|
4249
4249
|
"filename": "lib/database/index.ts",
|
|
4250
|
-
"line":
|
|
4250
|
+
"line": 381
|
|
4251
4251
|
},
|
|
4252
4252
|
"name": "randomPageCost",
|
|
4253
4253
|
"type": {
|
|
@@ -4263,7 +4263,7 @@
|
|
|
4263
4263
|
"immutable": true,
|
|
4264
4264
|
"locationInModule": {
|
|
4265
4265
|
"filename": "lib/database/index.ts",
|
|
4266
|
-
"line":
|
|
4266
|
+
"line": 376
|
|
4267
4267
|
},
|
|
4268
4268
|
"name": "seqPageCost",
|
|
4269
4269
|
"type": {
|
|
@@ -4280,7 +4280,7 @@
|
|
|
4280
4280
|
"immutable": true,
|
|
4281
4281
|
"locationInModule": {
|
|
4282
4282
|
"filename": "lib/database/index.ts",
|
|
4283
|
-
"line":
|
|
4283
|
+
"line": 346
|
|
4284
4284
|
},
|
|
4285
4285
|
"name": "sharedBuffers",
|
|
4286
4286
|
"type": {
|
|
@@ -4296,7 +4296,7 @@
|
|
|
4296
4296
|
"immutable": true,
|
|
4297
4297
|
"locationInModule": {
|
|
4298
4298
|
"filename": "lib/database/index.ts",
|
|
4299
|
-
"line":
|
|
4299
|
+
"line": 371
|
|
4300
4300
|
},
|
|
4301
4301
|
"name": "tempBuffers",
|
|
4302
4302
|
"type": {
|
|
@@ -4312,7 +4312,7 @@
|
|
|
4312
4312
|
"immutable": true,
|
|
4313
4313
|
"locationInModule": {
|
|
4314
4314
|
"filename": "lib/database/index.ts",
|
|
4315
|
-
"line":
|
|
4315
|
+
"line": 356
|
|
4316
4316
|
},
|
|
4317
4317
|
"name": "workMem",
|
|
4318
4318
|
"type": {
|
|
@@ -4818,9 +4818,9 @@
|
|
|
4818
4818
|
"assembly": "eoapi-cdk",
|
|
4819
4819
|
"base": "constructs.Construct",
|
|
4820
4820
|
"docs": {
|
|
4821
|
-
"remarks": "This is a wrapper around the
|
|
4821
|
+
"remarks": "This construct creates an optimized pgSTAC database setup that includes:\n- RDS PostgreSQL instance with pgSTAC extension\n- PgBouncer connection pooler (enabled by default)\n- Automated health monitoring system\n- Optimized database parameters for the selected instance type\n\n## Connection Pooling with PgBouncer\n\nBy default, this construct deploys PgBouncer as a connection pooler running on\na dedicated EC2 instance. PgBouncer provides several benefits:\n\n- **Connection Management**: Pools and reuses database connections to reduce overhead\n- **Performance**: Optimizes connection handling for high-traffic applications\n- **Scalability**: Allows more concurrent connections than the RDS instance alone\n- **Health Monitoring**: Includes comprehensive health checks to ensure availability\n\n### PgBouncer Configuration\n- Pool mode: Transaction-level pooling (default)\n- Maximum client connections: 1000\n- Default pool size: 20 connections per database/user combination\n- Instance type: t3.micro EC2 instance\n\n### Health Check System\nThe construct includes an automated health check system that validates:\n- PgBouncer service is running and listening on port 5432\n- Connection tests to ensure accessibility\n- Cloud-init setup completion before validation\n- Detailed diagnostics for troubleshooting\n\n### Connection Details\nWhen PgBouncer is enabled, applications connect through the PgBouncer instance\nrather than directly to RDS. The `pgstacSecret` contains connection information\npointing to PgBouncer, and the `connectionTarget` property refers to the\nPgBouncer EC2 instance.\n\nTo disable PgBouncer and connect directly to RDS, set `addPgbouncer: false`.\n\nThis is a wrapper around the `rds.DatabaseInstance` higher-level construct\nmaking use of the BootstrapPgStac construct.",
|
|
4822
4822
|
"stability": "experimental",
|
|
4823
|
-
"summary": "An RDS instance with pgSTAC installed."
|
|
4823
|
+
"summary": "An RDS instance with pgSTAC installed and PgBouncer connection pooling."
|
|
4824
4824
|
},
|
|
4825
4825
|
"fqn": "eoapi-cdk.PgStacDatabase",
|
|
4826
4826
|
"initializer": {
|
|
@@ -4829,7 +4829,7 @@
|
|
|
4829
4829
|
},
|
|
4830
4830
|
"locationInModule": {
|
|
4831
4831
|
"filename": "lib/database/index.ts",
|
|
4832
|
-
"line":
|
|
4832
|
+
"line": 83
|
|
4833
4833
|
},
|
|
4834
4834
|
"parameters": [
|
|
4835
4835
|
{
|
|
@@ -4855,7 +4855,7 @@
|
|
|
4855
4855
|
"kind": "class",
|
|
4856
4856
|
"locationInModule": {
|
|
4857
4857
|
"filename": "lib/database/index.ts",
|
|
4858
|
-
"line":
|
|
4858
|
+
"line": 72
|
|
4859
4859
|
},
|
|
4860
4860
|
"methods": [
|
|
4861
4861
|
{
|
|
@@ -4864,7 +4864,7 @@
|
|
|
4864
4864
|
},
|
|
4865
4865
|
"locationInModule": {
|
|
4866
4866
|
"filename": "lib/database/index.ts",
|
|
4867
|
-
"line":
|
|
4867
|
+
"line": 234
|
|
4868
4868
|
},
|
|
4869
4869
|
"name": "getParameters",
|
|
4870
4870
|
"parameters": [
|
|
@@ -4903,7 +4903,7 @@
|
|
|
4903
4903
|
"immutable": true,
|
|
4904
4904
|
"locationInModule": {
|
|
4905
4905
|
"filename": "lib/database/index.ts",
|
|
4906
|
-
"line":
|
|
4906
|
+
"line": 78
|
|
4907
4907
|
},
|
|
4908
4908
|
"name": "connectionTarget",
|
|
4909
4909
|
"type": {
|
|
@@ -4926,7 +4926,7 @@
|
|
|
4926
4926
|
"immutable": true,
|
|
4927
4927
|
"locationInModule": {
|
|
4928
4928
|
"filename": "lib/database/index.ts",
|
|
4929
|
-
"line":
|
|
4929
|
+
"line": 77
|
|
4930
4930
|
},
|
|
4931
4931
|
"name": "pgstacVersion",
|
|
4932
4932
|
"type": {
|
|
@@ -4940,7 +4940,22 @@
|
|
|
4940
4940
|
"immutable": true,
|
|
4941
4941
|
"locationInModule": {
|
|
4942
4942
|
"filename": "lib/database/index.ts",
|
|
4943
|
-
"line":
|
|
4943
|
+
"line": 81
|
|
4944
|
+
},
|
|
4945
|
+
"name": "pgbouncerHealthCheck",
|
|
4946
|
+
"optional": true,
|
|
4947
|
+
"type": {
|
|
4948
|
+
"fqn": "aws-cdk-lib.CustomResource"
|
|
4949
|
+
}
|
|
4950
|
+
},
|
|
4951
|
+
{
|
|
4952
|
+
"docs": {
|
|
4953
|
+
"stability": "experimental"
|
|
4954
|
+
},
|
|
4955
|
+
"immutable": true,
|
|
4956
|
+
"locationInModule": {
|
|
4957
|
+
"filename": "lib/database/index.ts",
|
|
4958
|
+
"line": 80
|
|
4944
4959
|
},
|
|
4945
4960
|
"name": "secretBootstrapper",
|
|
4946
4961
|
"optional": true,
|
|
@@ -4955,7 +4970,7 @@
|
|
|
4955
4970
|
"immutable": true,
|
|
4956
4971
|
"locationInModule": {
|
|
4957
4972
|
"filename": "lib/database/index.ts",
|
|
4958
|
-
"line":
|
|
4973
|
+
"line": 79
|
|
4959
4974
|
},
|
|
4960
4975
|
"name": "securityGroup",
|
|
4961
4976
|
"optional": true,
|
|
@@ -4969,7 +4984,7 @@
|
|
|
4969
4984
|
},
|
|
4970
4985
|
"locationInModule": {
|
|
4971
4986
|
"filename": "lib/database/index.ts",
|
|
4972
|
-
"line":
|
|
4987
|
+
"line": 73
|
|
4973
4988
|
},
|
|
4974
4989
|
"name": "db",
|
|
4975
4990
|
"type": {
|
|
@@ -4982,7 +4997,7 @@
|
|
|
4982
4997
|
},
|
|
4983
4998
|
"locationInModule": {
|
|
4984
4999
|
"filename": "lib/database/index.ts",
|
|
4985
|
-
"line":
|
|
5000
|
+
"line": 74
|
|
4986
5001
|
},
|
|
4987
5002
|
"name": "pgstacSecret",
|
|
4988
5003
|
"type": {
|
|
@@ -5005,7 +5020,7 @@
|
|
|
5005
5020
|
"kind": "interface",
|
|
5006
5021
|
"locationInModule": {
|
|
5007
5022
|
"filename": "lib/database/index.ts",
|
|
5008
|
-
"line":
|
|
5023
|
+
"line": 274
|
|
5009
5024
|
},
|
|
5010
5025
|
"name": "PgStacDatabaseProps",
|
|
5011
5026
|
"properties": [
|
|
@@ -5019,7 +5034,7 @@
|
|
|
5019
5034
|
"immutable": true,
|
|
5020
5035
|
"locationInModule": {
|
|
5021
5036
|
"filename": "lib/database/index.ts",
|
|
5022
|
-
"line":
|
|
5037
|
+
"line": 308
|
|
5023
5038
|
},
|
|
5024
5039
|
"name": "addPgbouncer",
|
|
5025
5040
|
"optional": true,
|
|
@@ -5037,7 +5052,7 @@
|
|
|
5037
5052
|
"immutable": true,
|
|
5038
5053
|
"locationInModule": {
|
|
5039
5054
|
"filename": "lib/database/index.ts",
|
|
5040
|
-
"line":
|
|
5055
|
+
"line": 332
|
|
5041
5056
|
},
|
|
5042
5057
|
"name": "bootstrapperLambdaFunctionOptions",
|
|
5043
5058
|
"optional": true,
|
|
@@ -5055,7 +5070,7 @@
|
|
|
5055
5070
|
"immutable": true,
|
|
5056
5071
|
"locationInModule": {
|
|
5057
5072
|
"filename": "lib/database/index.ts",
|
|
5058
|
-
"line":
|
|
5073
|
+
"line": 323
|
|
5059
5074
|
},
|
|
5060
5075
|
"name": "customResourceProperties",
|
|
5061
5076
|
"optional": true,
|
|
@@ -5078,7 +5093,7 @@
|
|
|
5078
5093
|
"immutable": true,
|
|
5079
5094
|
"locationInModule": {
|
|
5080
5095
|
"filename": "lib/database/index.ts",
|
|
5081
|
-
"line":
|
|
5096
|
+
"line": 315
|
|
5082
5097
|
},
|
|
5083
5098
|
"name": "pgbouncerInstanceProps",
|
|
5084
5099
|
"optional": true,
|
|
@@ -5096,7 +5111,7 @@
|
|
|
5096
5111
|
"immutable": true,
|
|
5097
5112
|
"locationInModule": {
|
|
5098
5113
|
"filename": "lib/database/index.ts",
|
|
5099
|
-
"line":
|
|
5114
|
+
"line": 280
|
|
5100
5115
|
},
|
|
5101
5116
|
"name": "pgstacDbName",
|
|
5102
5117
|
"optional": true,
|
|
@@ -5114,7 +5129,7 @@
|
|
|
5114
5129
|
"immutable": true,
|
|
5115
5130
|
"locationInModule": {
|
|
5116
5131
|
"filename": "lib/database/index.ts",
|
|
5117
|
-
"line":
|
|
5132
|
+
"line": 301
|
|
5118
5133
|
},
|
|
5119
5134
|
"name": "pgstacUsername",
|
|
5120
5135
|
"optional": true,
|
|
@@ -5132,7 +5147,7 @@
|
|
|
5132
5147
|
"immutable": true,
|
|
5133
5148
|
"locationInModule": {
|
|
5134
5149
|
"filename": "lib/database/index.ts",
|
|
5135
|
-
"line":
|
|
5150
|
+
"line": 287
|
|
5136
5151
|
},
|
|
5137
5152
|
"name": "pgstacVersion",
|
|
5138
5153
|
"optional": true,
|
|
@@ -5150,7 +5165,7 @@
|
|
|
5150
5165
|
"immutable": true,
|
|
5151
5166
|
"locationInModule": {
|
|
5152
5167
|
"filename": "lib/database/index.ts",
|
|
5153
|
-
"line":
|
|
5168
|
+
"line": 294
|
|
5154
5169
|
},
|
|
5155
5170
|
"name": "secretsPrefix",
|
|
5156
5171
|
"optional": true,
|
|
@@ -7696,6 +7711,6 @@
|
|
|
7696
7711
|
"symbolId": "lib/titiler-pgstac-api/index:TitilerPgstacApiLambdaRuntimeProps"
|
|
7697
7712
|
}
|
|
7698
7713
|
},
|
|
7699
|
-
"version": "10.
|
|
7700
|
-
"fingerprint": "
|
|
7714
|
+
"version": "10.2.4",
|
|
7715
|
+
"fingerprint": "M+MIgofb3T0CiInM+HburxstD8Pn3AYdsTZigrb0ljQ="
|
|
7701
7716
|
}
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Development Seed
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -158,5 +158,5 @@ class BastionHost extends constructs_1.Construct {
|
|
|
158
158
|
}
|
|
159
159
|
exports.BastionHost = BastionHost;
|
|
160
160
|
_a = JSII_RTTI_SYMBOL_1;
|
|
161
|
-
BastionHost[_a] = { fqn: "eoapi-cdk.BastionHost", version: "10.
|
|
161
|
+
BastionHost[_a] = { fqn: "eoapi-cdk.BastionHost", version: "10.2.4" };
|
|
162
162
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZDQU1xQjtBQUNyQiwyQ0FBdUM7QUFFdkM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpR0c7QUFDSCxNQUFhLFdBQVksU0FBUSxzQkFBUztJQUd4QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXVCO1FBQy9ELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLG1CQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXJDLHFCQUFxQjtRQUNyQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUkscUJBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRTtZQUNyRCxHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUc7WUFDZCxVQUFVLEVBQUUsRUFBRSxVQUFVLEVBQUUscUJBQUcsQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFO1lBQ2pELFlBQVksRUFBRSxHQUFHLFNBQVMsZUFBZTtZQUN6QyxZQUFZLEVBQUUscUJBQUcsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUMvQixxQkFBRyxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsRUFDckMscUJBQUcsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUN0QjtZQUNELFlBQVksRUFBRSxxQkFBRyxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQztnQkFDL0MsVUFBVSxFQUFFLHFCQUFHLENBQUMscUJBQXFCLENBQUMsY0FBYztnQkFDcEQsT0FBTyxFQUFFLHFCQUFHLENBQUMsa0JBQWtCLENBQUMsTUFBTTthQUN2QyxDQUFDO1lBQ0YsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRO1lBQ3hCLHlCQUF5QixFQUFFLElBQUk7U0FDaEMsQ0FBQyxDQUFDO1FBRUgsb0JBQW9CO1FBQ3BCLElBQUksS0FBSyxDQUFDLGVBQWUsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNsQyxJQUFJLHFCQUFHLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUU7Z0JBQ3pCLFVBQVUsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVU7Z0JBQ3BDLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLENBQUM7YUFDMUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELHNDQUFzQztRQUN0QyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQy9CLEtBQUssQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFDdEMscUJBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUNsQixvQ0FBb0MsQ0FDckMsQ0FBQztRQUVGLGtDQUFrQztRQUNsQyxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN2QyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQ2pDLHFCQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFDbkIscUJBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLEVBQ2pDLFlBQVksQ0FDYixDQUFDO1FBQ0osQ0FBQztRQUVELHFCQUFxQjtRQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FDM0IsSUFBSSxxQkFBRyxDQUFDLGVBQWUsQ0FBQztZQUN0QixPQUFPLEVBQUU7Z0JBQ1AsZUFBZTtnQkFDZiwrQkFBK0I7Z0JBQy9CLGVBQWU7YUFDaEI7WUFDRCxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUM7U0FDakIsQ0FBQyxDQUNILENBQUM7UUFFRixJQUFJLHVCQUFTLENBQUMsSUFBSSxFQUFFLG9CQUFvQixFQUFFO1lBQ3hDLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVU7WUFDL0IsVUFBVSxFQUFFLEdBQUcsU0FBUyxjQUFjO1NBQ3ZDLENBQUMsQ0FBQztRQUNILElBQUksdUJBQVMsQ0FBQyxJQUFJLEVBQUUsMkJBQTJCLEVBQUU7WUFDL0MsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCO1lBQ3JDLFVBQVUsRUFBRSxHQUFHLFNBQVMscUJBQXFCO1NBQzlDLENBQUMsQ0FBQztRQUNILElBQUksdUJBQVMsQ0FBQyxJQUFJLEVBQUUsaUNBQWlDLEVBQUU7WUFDckQsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMscUJBQXFCO1lBQzFDLFVBQVUsRUFBRSxHQUFHLFNBQVMsa0JBQWtCO1NBQzNDLENBQUMsQ0FBQztJQUNMLENBQUM7O0FBekVILGtDQTBFQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIFN0YWNrLFxuICBhd3NfZWMyIGFzIGVjMixcbiAgYXdzX2lhbSBhcyBpYW0sXG4gIGF3c19yZHMgYXMgcmRzLFxuICBDZm5PdXRwdXQsXG59IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcblxuLyoqXG4gKiBUaGUgZGF0YWJhc2UgaXMgbG9jYXRlZCBpbiBhbiBpc29sYXRlZCBzdWJuZXQsIG1lYW5pbmcgdGhhdCBpdCBpcyBub3QgYWNjZXNzaWJsZSBmcm9tIHRoZSBwdWJsaWMgaW50ZXJuZXQuIEFzIHN1Y2gsIHRvIGludGVyYWN0IHdpdGggdGhlIGRhdGFiYXNlIGRpcmVjdGx5LCBhIHVzZXIgbXVzdCB0dW5uZWwgdGhyb3VnaCBhIGJhc3Rpb24gaG9zdC5cbiAqXG4gKiAjIyMgQ29uZmlndXJpbmdcbiAqXG4gKiBUaGlzIGNvZGViYXNlIGNvbnRyb2xzIF93aG9fIGlzIGFsbG93ZWQgdG8gY29ubmVjdCB0byB0aGUgYmFzdGlvbiBob3N0LiBUaGlzIHJlcXVpcmVzIHR3byBzdGVwczpcbiAqXG4gKiAxLiBBZGRpbmcgdGhlIElQIGFkZHJlc3MgZnJvbSB3aGljaCB5b3UgYXJlIGNvbm5lY3RpbmcgdG8gdGhlIGBpcHY0QWxsb3dsaXN0YCBhcnJheVxuICogMS4gQ3JlYXRpbmcgYSBiYXN0aW9uIGhvc3Qgc3lzdGVtIHVzZXIgYnkgYWRkaW5nIHRoZSB1c2VyJ3MgY29uZmlndXJhdGlvbiBpbmZvcm0gdG8gYHVzZXJkYXRhLnlhbWxgXG4gKlxuICogIyMjIyBBZGRpbmcgYW4gSVAgYWRkcmVzcyB0byB0aGUgYGlwdjRBbGxvd2xpc3RgIGFycmF5XG4gKlxuICogVGhlIGBCYXN0aW9uSG9zdGAgY29uc3RydWN0IHRha2VzIGluIGFuIGBpcHY0QWxsb3dsaXN0YCBhcnJheSBhcyBhbiBhcmd1bWVudC4gRmluZCB5b3VyIElQIGFkZHJlc3MgKGVnIGBjdXJsIGFwaS5pcGlmeS5vcmdgKSBhbmQgYWRkIHRoYXQgdG8gdGhlIGFycmF5IGFsb25nIHdpdGggdGhlIHRyYWlsaW5nIENJRFIgYmxvY2sgKGxpa2VseSBgLzMyYCB0byBpbmRpY2F0ZSB0aGF0IHlvdSBhcmUgYWRkaW5nIGEgc2luZ2xlIElQIGFkZHJlc3MpLlxuICpcbiAqICMjIyMgQ3JlYXRpbmcgYSB1c2VyIHZpYSBgdXNlcmRhdGEueWFtbGBcbiAqXG4gKiBBZGQgYW4gZW50cnkgdG8gdGhlIGB1c2Vyc2AgYXJyYXkgd2l0aCBhIHVzZXJuYW1lIChsaWtlbHkgbWF0Y2hpbmcgeW91ciBsb2NhbCBzeXN0ZW1zIHVzZXJuYW1lLCB3aGljaCB5b3UgY2FuIGdldCBieSBydW5uaW5nIHRoZSBgd2hvYW1pYCBjb21tYW5kIGluIHlvdXIgdGVybWluYWwpIGFuZCBhIHB1YmxpYyBrZXkgKGxpa2VseSB5b3VyIGRlZmF1bHQgcHVibGljIGtleSwgd2hpY2ggeW91IGNhbiBnZXQgYnkgcnVubmluZyBgY2F0IH4vLnNzaC9pZF8qLnB1YmAgaW4geW91ciB0ZXJtaW5hbCkuXG4gKlxuICogIyMjIyBUaXBzICYgVHJpY2tzIHdoZW4gdXNpbmcgdGhlIEJhc3Rpb24gSG9zdFxuICpcbiAqICoqQ29ubmVjdGluZyB0byBSRFMgSW5zdGFuY2UgdmlhIFNTTSoqXG4gKlxuICogYGBgc2hcbiAqIGF3cyBzc20gc3RhcnQtc2Vzc2lvbiAtLXRhcmdldCAkSU5TVEFOQ0VfSUQgXFxcbiAqIC0tZG9jdW1lbnQtbmFtZSBBV1MtU3RhcnRQb3J0Rm9yd2FyZGluZ1Nlc3Npb25Ub1JlbW90ZUhvc3QgXFxcbiAqIC0tcGFyYW1ldGVycyAne1xuICogXCJob3N0XCI6IFtcbiAqIFwiZXhhbXBsZS1kYi5jNWFiY2RlZmdoaWoudXMtd2VzdC0yLnJkcy5hbWF6b25hd3MuY29tXCJcbiAqIF0sXG4gKiBcInBvcnROdW1iZXJcIjogW1xuICogXCI1NDMyXCJcbiAqIF0sXG4gKiBcImxvY2FsUG9ydE51bWJlclwiOiBbXG4gKiBcIjk5OTlcIlxuICogXVxuICogfScgXFxcbiAqIC0tcHJvZmlsZSAkQVdTX1BST0ZJTEVcbiAqIGBgYFxuICpcbiAqIGBgYHNoXG4gKiBwc3FsIC1oIGxvY2FsaG9zdCAtcCA5OTk5ICMgY29udGludWUgYWRkaW5nIHVzZXJuYW1lICgtVSkgYW5kIGRiICgtZCkgaGVyZS4uLlxuICogYGBgXG4gKlxuICogQ29ubmVjdCBkaXJlY3RseSB0byBCYXN0aW9uIEhvc3Q6XG4gKlxuICogYGBgc2hcbiAqIGF3cyBzc20gc3RhcnQtc2Vzc2lvbiAtLXRhcmdldCAkSU5TVEFOQ0VfSUQgLS1wcm9maWxlICRBV1NfUFJPRklMRVxuICogYGBgXG4gKlxuICogKipTZXR0aW5nIHVwIGFuIFNTSCB0dW5uZWwqKlxuICpcbiAqIEluIHlvdXIgYH4vLnNzaC9jb25maWdgIGZpbGUsIGFkZCBhbiBlbnRyeSBsaWtlOlxuICpcbiAqIGBgYFxuICogSG9zdCBkYi10dW5uZWxcbiAqIEhvc3RuYW1lIHt0aGUtYmFzdGlvbi1ob3N0LWFkZHJlc3N9XG4gKiBMb2NhbEZvcndhcmQgOTk5OSB7dGhlLWRiLWhvc3RuYW1lfTo1NDMyXG4gKiBgYGBcbiAqXG4gKiBUaGVuIGEgdHVubmVsIGNhbiBiZSBvcGVuZWQgdmlhOlxuICpcbiAqIGBgYFxuICogc3NoIC1OIGRiLXR1bm5lbFxuICogYGBgXG4gKlxuICogQW5kIGEgY29ubmVjdGlvbiB0byB0aGUgREIgY2FuIGJlIG1hZGUgdmlhOlxuICpcbiAqIGBgYFxuICogcHNxbCAtaCAxMjcuMC4wLjEgLXAgOTk5OSAtVSB7dXNlcm5hbWV9IC1kIHtkYXRhYmFzZX1cbiAqIGBgYFxuICpcbiAqICoqSGFuZGxpbmcgYFJFTU9URSBIT1NUIElERU5USUZJQ0FUSU9OIEhBUyBDSEFOR0VEIWAgZXJyb3IqKlxuICpcbiAqIElmIHlvdSd2ZSByZWRlcGxveWVkIGEgYmFzdGlvbiBob3N0IHRoYXQgeW91J3ZlIHByZXZpb3VzbHkgY29ubmVjdGVkIHRvLCB5b3UgbWF5IHNlZSBhbiBlcnJvciBsaWtlOlxuICpcbiAqIGBgYFxuICogQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBcbiAqIEAgICAgV0FSTklORzogUkVNT1RFIEhPU1QgSURFTlRJRklDQVRJT04gSEFTIENIQU5HRUQhICAgICBAXG4gKiBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQFxuICogSVQgSVMgUE9TU0lCTEUgVEhBVCBTT01FT05FIElTIERPSU5HIFNPTUVUSElORyBOQVNUWSFcbiAqIFNvbWVvbmUgY291bGQgYmUgZWF2ZXNkcm9wcGluZyBvbiB5b3UgcmlnaHQgbm93IChtYW4taW4tdGhlLW1pZGRsZSBhdHRhY2spIVxuICogSXQgaXMgYWxzbyBwb3NzaWJsZSB0aGF0IGEgaG9zdCBrZXkgaGFzIGp1c3QgYmVlbiBjaGFuZ2VkLlxuICogVGhlIGZpbmdlcnByaW50IGZvciB0aGUgRUNEU0Ega2V5IHNlbnQgYnkgdGhlIHJlbW90ZSBob3N0IGlzXG4gKiBTSEEyNTY6bVBueEFPWFRwYjA2UEZnSTFRYzhUTVEyZTliN2dvVTh5Mk5kUzVoeklyOC5cbiAqIFBsZWFzZSBjb250YWN0IHlvdXIgc3lzdGVtIGFkbWluaXN0cmF0b3IuXG4gKiBBZGQgY29ycmVjdCBob3N0IGtleSBpbiAvVXNlcnMvdXNlcm5hbWUvLnNzaC9rbm93bl9ob3N0cyB0byBnZXQgcmlkIG9mIHRoaXMgbWVzc2FnZS5cbiAqIE9mZmVuZGluZyBFQ0RTQSBrZXkgaW4gL1VzZXJzL3VzZXJuYW1lLy5zc2gva25vd25faG9zdHM6MjhcbiAqIEVDRFNBIGhvc3Qga2V5IGZvciBlYzItMTItMzQtNTYtNzg5LnVzLXdlc3QtMi5jb21wdXRlLmFtYXpvbmF3cy5jb20gaGFzIGNoYW5nZWQgYW5kIHlvdSBoYXZlIHJlcXVlc3RlZCBzdHJpY3QgY2hlY2tpbmcuXG4gKiBIb3N0IGtleSB2ZXJpZmljYXRpb24gZmFpbGVkLlxuICogYGBgXG4gKlxuICogVGhpcyBpcyBkdWUgdG8gdGhlIHNlcnZlcidzIGZpbmdlcnByaW50IGNoYW5naW5nLiBXZSBjYW4gc2NydWIgdGhlIGZpbmdlcnByaW50IGZyb20gb3VyIHN5c3RlbSB3aXRoIGEgY29tbWFuZCBsaWtlOlxuICpcbiAqIGBgYFxuICogc3NoLWtleWdlbiAtUiAxMi4zNC41Ni43ODlcbiAqIGBgYFxuICpcbiAqL1xuZXhwb3J0IGNsYXNzIEJhc3Rpb25Ib3N0IGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgaW5zdGFuY2U6IGVjMi5JbnN0YW5jZTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQmFzdGlvbkhvc3RQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCB7IHN0YWNrTmFtZSB9ID0gU3RhY2sub2YodGhpcyk7XG5cbiAgICAvLyBCdWlsZCBlYzIgaW5zdGFuY2VcbiAgICB0aGlzLmluc3RhbmNlID0gbmV3IGVjMi5JbnN0YW5jZSh0aGlzLCBcImJhc3Rpb24taG9zdFwiLCB7XG4gICAgICB2cGM6IHByb3BzLnZwYyxcbiAgICAgIHZwY1N1Ym5ldHM6IHsgc3VibmV0VHlwZTogZWMyLlN1Ym5ldFR5cGUuUFVCTElDIH0sXG4gICAgICBpbnN0YW5jZU5hbWU6IGAke3N0YWNrTmFtZX0gYmFzdGlvbiBob3N0YCxcbiAgICAgIGluc3RhbmNlVHlwZTogZWMyLkluc3RhbmNlVHlwZS5vZihcbiAgICAgICAgZWMyLkluc3RhbmNlQ2xhc3MuQlVSU1RBQkxFNF9HUkFWSVRPTixcbiAgICAgICAgZWMyLkluc3RhbmNlU2l6ZS5OQU5PXG4gICAgICApLFxuICAgICAgbWFjaGluZUltYWdlOiBlYzIuTWFjaGluZUltYWdlLmxhdGVzdEFtYXpvbkxpbnV4KHtcbiAgICAgICAgZ2VuZXJhdGlvbjogZWMyLkFtYXpvbkxpbnV4R2VuZXJhdGlvbi5BTUFaT05fTElOVVhfMixcbiAgICAgICAgY3B1VHlwZTogZWMyLkFtYXpvbkxpbnV4Q3B1VHlwZS5BUk1fNjQsXG4gICAgICB9KSxcbiAgICAgIHVzZXJEYXRhOiBwcm9wcy51c2VyRGF0YSxcbiAgICAgIHVzZXJEYXRhQ2F1c2VzUmVwbGFjZW1lbnQ6IHRydWUsXG4gICAgfSk7XG5cbiAgICAvLyBBc3NpZ24gZWxhc3RpYyBJUFxuICAgIGlmIChwcm9wcy5jcmVhdGVFbGFzdGljSXAgPz8gdHJ1ZSkge1xuICAgICAgbmV3IGVjMi5DZm5FSVAodGhpcywgXCJJUFwiLCB7XG4gICAgICAgIGluc3RhbmNlSWQ6IHRoaXMuaW5zdGFuY2UuaW5zdGFuY2VJZCxcbiAgICAgICAgdGFnczogW3sga2V5OiBcIk5hbWVcIiwgdmFsdWU6IHN0YWNrTmFtZSB9XSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEFsbG93IGJhc3Rpb24gaG9zdCB0byBjb25uZWN0IHRvIGRiXG4gICAgdGhpcy5pbnN0YW5jZS5jb25uZWN0aW9ucy5hbGxvd1RvKFxuICAgICAgcHJvcHMuZGIuY29ubmVjdGlvbnMuc2VjdXJpdHlHcm91cHNbMF0sXG4gICAgICBlYzIuUG9ydC50Y3AoNTQzMiksXG4gICAgICBcIkFsbG93IGNvbm5lY3Rpb24gZnJvbSBiYXN0aW9uIGhvc3RcIlxuICAgICk7XG5cbiAgICAvLyBBbGxvdyBJUCBhY2Nlc3MgdG8gYmFzdGlvbiBob3N0XG4gICAgZm9yIChjb25zdCBpcHY0IG9mIHByb3BzLmlwdjRBbGxvd2xpc3QpIHtcbiAgICAgIHRoaXMuaW5zdGFuY2UuY29ubmVjdGlvbnMuYWxsb3dGcm9tKFxuICAgICAgICBlYzIuUGVlci5pcHY0KGlwdjQpLFxuICAgICAgICBlYzIuUG9ydC50Y3AocHJvcHMuc3NoUG9ydCB8fCAyMiksXG4gICAgICAgIFwiU1NIIEFjY2Vzc1wiXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEludGVncmF0ZSB3aXRoIFNTTVxuICAgIHRoaXMuaW5zdGFuY2UuYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgXCJzc21tZXNzYWdlczoqXCIsXG4gICAgICAgICAgXCJzc206VXBkYXRlSW5zdGFuY2VJbmZvcm1hdGlvblwiLFxuICAgICAgICAgIFwiZWMybWVzc2FnZXM6KlwiLFxuICAgICAgICBdLFxuICAgICAgICByZXNvdXJjZXM6IFtcIipcIl0sXG4gICAgICB9KVxuICAgICk7XG5cbiAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIFwiaW5zdGFuY2UtaWQtb3V0cHV0XCIsIHtcbiAgICAgIHZhbHVlOiB0aGlzLmluc3RhbmNlLmluc3RhbmNlSWQsXG4gICAgICBleHBvcnROYW1lOiBgJHtzdGFja05hbWV9LWluc3RhbmNlLWlkYCxcbiAgICB9KTtcbiAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIFwiaW5zdGFuY2UtcHVibGljLWlwLW91dHB1dFwiLCB7XG4gICAgICB2YWx1ZTogdGhpcy5pbnN0YW5jZS5pbnN0YW5jZVB1YmxpY0lwLFxuICAgICAgZXhwb3J0TmFtZTogYCR7c3RhY2tOYW1lfS1pbnN0YW5jZS1wdWJsaWMtaXBgLFxuICAgIH0pO1xuICAgIG5ldyBDZm5PdXRwdXQodGhpcywgXCJpbnN0YW5jZS1wdWJsaWMtZG5zLW5hbWUtb3V0cHV0XCIsIHtcbiAgICAgIHZhbHVlOiB0aGlzLmluc3RhbmNlLmluc3RhbmNlUHVibGljRG5zTmFtZSxcbiAgICAgIGV4cG9ydE5hbWU6IGAke3N0YWNrTmFtZX0tcHVibGljLWRucy1uYW1lYCxcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJhc3Rpb25Ib3N0UHJvcHMge1xuICByZWFkb25seSB2cGM6IGVjMi5JVnBjO1xuICByZWFkb25seSBkYjogcmRzLklEYXRhYmFzZUluc3RhbmNlO1xuICByZWFkb25seSB1c2VyRGF0YTogZWMyLlVzZXJEYXRhO1xuICByZWFkb25seSBpcHY0QWxsb3dsaXN0OiBzdHJpbmdbXTtcbiAgcmVhZG9ubHkgc3NoUG9ydD86IG51bWJlcjtcblxuICAvKipcbiAgICogV2hldGhlciBvciBub3QgYW4gZWxhc3RpYyBJUCBzaG91bGQgYmUgY3JlYXRlZCBmb3IgdGhlIGJhc3Rpb24gaG9zdC5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGNyZWF0ZUVsYXN0aWNJcD86IGJvb2xlYW47XG59XG4iXX0=
|
|
@@ -46,6 +46,7 @@ export declare class PgBouncer extends Construct {
|
|
|
46
46
|
readonly pgbouncerSecret: secretsmanager.Secret;
|
|
47
47
|
readonly securityGroup: ec2.SecurityGroup;
|
|
48
48
|
readonly secretUpdateComplete: CustomResource;
|
|
49
|
+
readonly healthCheck: CustomResource;
|
|
49
50
|
private getDefaultPgbouncerConfig;
|
|
50
51
|
constructor(scope: Construct, id: string, props: PgBouncerProps);
|
|
51
52
|
private loadUserDataScript;
|
|
@@ -116,6 +116,35 @@ class PgBouncer extends constructs_1.Construct {
|
|
|
116
116
|
: this.instance.instancePrivateIp,
|
|
117
117
|
},
|
|
118
118
|
});
|
|
119
|
+
// Add health check custom resource
|
|
120
|
+
const healthCheckFunction = new aws_cdk_lib_1.aws_lambda.Function(this, "HealthCheckFunction", {
|
|
121
|
+
runtime: aws_cdk_lib_1.aws_lambda.Runtime.NODEJS_20_X,
|
|
122
|
+
handler: "index.handler",
|
|
123
|
+
timeout: aws_cdk_lib_1.Duration.minutes(10),
|
|
124
|
+
code: aws_cdk_lib_1.aws_lambda.Code.fromAsset(path.join(__dirname, "lambda/pgbouncer-health-check")),
|
|
125
|
+
description: "PgBouncer health check function",
|
|
126
|
+
});
|
|
127
|
+
// Grant SSM permissions for health check
|
|
128
|
+
healthCheckFunction.addToRolePolicy(new aws_cdk_lib_1.aws_iam.PolicyStatement({
|
|
129
|
+
actions: [
|
|
130
|
+
"ssm:SendCommand",
|
|
131
|
+
"ssm:GetCommandInvocation",
|
|
132
|
+
"ssm:DescribeInstanceInformation",
|
|
133
|
+
"ssm:ListCommandInvocations",
|
|
134
|
+
],
|
|
135
|
+
resources: ["*"],
|
|
136
|
+
}));
|
|
137
|
+
this.healthCheck = new aws_cdk_lib_1.CustomResource(this, "PgBouncerHealthCheck", {
|
|
138
|
+
serviceToken: healthCheckFunction.functionArn,
|
|
139
|
+
properties: {
|
|
140
|
+
InstanceId: this.instance.instanceId,
|
|
141
|
+
// Add timestamp to force re-execution on stack updates
|
|
142
|
+
Timestamp: new Date().toISOString(),
|
|
143
|
+
},
|
|
144
|
+
});
|
|
145
|
+
// Ensure health check runs after instance is created but before secret update
|
|
146
|
+
this.healthCheck.node.addDependency(this.instance);
|
|
147
|
+
this.secretUpdateComplete.node.addDependency(this.healthCheck);
|
|
119
148
|
}
|
|
120
149
|
loadUserDataScript(pgBouncerConfig, database) {
|
|
121
150
|
const userDataScript = aws_cdk_lib_1.aws_ec2.UserData.forLinux();
|
|
@@ -131,4 +160,4 @@ class PgBouncer extends constructs_1.Construct {
|
|
|
131
160
|
}
|
|
132
161
|
}
|
|
133
162
|
exports.PgBouncer = PgBouncer;
|
|
134
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGdCb3VuY2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiUGdCb3VuY2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQU9xQjtBQUNyQiwyQ0FBdUM7QUFFdkMseUJBQXlCO0FBQ3pCLDZCQUE2QjtBQW9EN0IsTUFBYSxTQUFVLFNBQVEsc0JBQVM7SUFNdEMsOEVBQThFO0lBQzlFLDhFQUE4RTtJQUM5RSxnRkFBZ0Y7SUFDaEYsa0NBQWtDO0lBRTFCLHlCQUF5QixDQUMvQixnQkFBd0I7UUFFeEIsNEVBQTRFO1FBQzVFLGdFQUFnRTtRQUNoRSxPQUFPO1lBQ0wsUUFBUSxFQUFFLGFBQWE7WUFDdkIsYUFBYSxFQUFFLElBQUk7WUFDbkIsZUFBZSxFQUFFLENBQUM7WUFDbEIsV0FBVyxFQUFFLENBQUM7WUFDZCxlQUFlLEVBQUUsQ0FBQztZQUNsQixrQkFBa0IsRUFBRSxDQUFDO1lBQ3JCLGdCQUFnQixFQUFFLGdCQUFnQixHQUFHLEVBQUU7WUFDdkMsa0JBQWtCLEVBQUUsZ0JBQWdCLEdBQUcsRUFBRTtTQUMxQyxDQUFDO0lBQ0osQ0FBQztJQUVELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBcUI7UUFDN0QsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixrQ0FBa0M7UUFFbEMsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQzNELEtBQUssQ0FBQyxnQkFBZ0IsQ0FDdkIsQ0FBQztRQUVGLHNDQUFzQztRQUN0QyxNQUFNLGVBQWUsR0FBbUM7WUFDdEQsR0FBRyxzQkFBc0I7WUFDekIsR0FBRyxLQUFLLENBQUMsZUFBZTtTQUN6QixDQUFDO1FBRUYscUVBQXFFO1FBQ3JFLE1BQU0sSUFBSSxHQUFHLElBQUkscUJBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRTtZQUM5QyxXQUFXLEVBQ1QsdUVBQXVFO1lBQ3pFLFNBQVMsRUFBRSxJQUFJLHFCQUFHLENB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LGNBQWMsR0FBRyxxQkFBRyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUUvQywwREFBMEQ7UUFDMUQsY0FBYyxDQUFDLFdBQVcsQ0FDeEIscUJBQXFCLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsR0FBRyxFQUN2RCxpQkFBaUIsR0FBRyxtQkFBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUMvQyxvQkFBb0IsR0FBRyxlQUFlLENBQUMsUUFBUSxHQUFHLEdBQUcsRUFDckQsMEJBQTBCLEdBQUcsZUFBZSxDQUFDLGFBQWEsR0FBRyxHQUFHLEVBQ2hFLDRCQUE0QixHQUFHLGVBQWUsQ0FBQyxlQUFlLEdBQUcsR0FBRyxFQUNwRSx3QkFBd0IsR0FBRyxlQUFlLENBQUMsV0FBVyxHQUFHLEdBQUcsRUFDNUQsNEJBQTRCLEdBQUcsZUFBZSxDQUFDLGVBQWUsR0FBRyxHQUFHLEVBQ3BFLCtCQUErQjtZQUM3QixlQUFlLENBQUMsa0JBQWtCO1lBQ2xDLEdBQUcsRUFDTCw2QkFBNkIsR0FBRyxlQUFlLENBQUMsZ0JBQWdCLEdBQUcsR0FBRyxFQUN0RSwrQkFBK0IsR0FBRyxlQUFlLENBQUMsa0JBQWtCLEdBQUcsR0FBRyxDQUMzRSxDQUFDO1FBRUYsMEJBQTBCO1FBQzFCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLHNCQUFzQixDQUFDLENBQUM7UUFDaEUsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFakQsY0FBYyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVuQyxPQUFPLGNBQWMsQ0FBQztJQUN4QixDQUFDO0NBQ0Y7QUEvTEQsOEJBK0xDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgYXdzX2VjMiBhcyBlYzIsXG4gIGF3c19pYW0gYXMgaWFtLFxuICBhd3NfbGFtYmRhIGFzIGxhbWJkYSxcbiAgYXdzX3NlY3JldHNtYW5hZ2VyIGFzIHNlY3JldHNtYW5hZ2VyLFxuICBDdXN0b21SZXNvdXJjZSxcbiAgU3RhY2ssXG59IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcblxuaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzXCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5cbi8vIHVzZWQgdG8gcG9wdWxhdGUgcGdib3VuY2VyIGNvbmZpZzpcbi8vIHNlZSBodHRwczovL3d3dy5wZ2JvdW5jZXIub3JnL2NvbmZpZy5odG1sIGZvciBkZXRhaWxzXG5leHBvcnQgaW50ZXJmYWNlIFBnQm91bmNlckNvbmZpZ1Byb3BzIHtcbiAgcG9vbE1vZGU/OiBcInRyYW5zYWN0aW9uXCIgfCBcInNlc3Npb25cIiB8IFwic3RhdGVtZW50XCI7XG4gIG1heENsaWVudENvbm4/OiBudW1iZXI7XG4gIGRlZmF1bHRQb29sU2l6ZT86IG51bWJlcjtcbiAgbWluUG9vbFNpemU/OiBudW1iZXI7XG4gIHJlc2VydmVQb29sU2l6ZT86IG51bWJlcjtcbiAgcmVzZXJ2ZVBvb2xUaW1lb3V0PzogbnVtYmVyO1xuICBtYXhEYkNvbm5lY3Rpb25zPzogbnVtYmVyO1xuICBtYXhVc2VyQ29ubmVjdGlvbnM/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGdCb3VuY2VyUHJvcHMge1xuICAvKipcbiAgICogVlBDIHRvIGRlcGxveSBQZ0JvdW5jZXIgaW50b1xuICAgKi9cbiAgdnBjOiBlYzIuSVZwYztcblxuICAvKipcbiAgICogVGhlIFJEUyBpbnN0YW5jZSB0byBjb25uZWN0IHRvXG4gICAqL1xuICBkYXRhYmFzZToge1xuICAgIGNvbm5lY3Rpb25zOiBlYzIuQ29ubmVjdGlvbnM7XG4gICAgc2VjcmV0OiBzZWNyZXRzbWFuYWdlci5JU2VjcmV0O1xuICB9O1xuXG4gIC8qKlxuICAgKiBNYXhpbXVtIGNvbm5lY3Rpb25zIHNldHRpbmcgZm9yIHRoZSBkYXRhYmFzZS5cbiAgICogUGdCb3VuY2VyIHdpbGwgdXNlIDEwIGZld2VyIHRoYW4gdGhpcyB2YWx1ZS5cbiAgICovXG4gIGRiTWF4Q29ubmVjdGlvbnM6IG51bWJlcjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBkZXBsb3kgaW4gcHVibGljIHN1Ym5ldFxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgdXNlUHVibGljU3VibmV0PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogUGdCb3VuY2VyIGNvbmZpZ3VyYXRpb24gb3B0aW9uc1xuICAgKi9cbiAgcGdCb3VuY2VyQ29uZmlnPzogUGdCb3VuY2VyQ29uZmlnUHJvcHM7XG5cbiAgLyoqXG4gICAqIEVDMiBpbnN0YW5jZSBvcHRpb25zXG4gICAqL1xuICBpbnN0YW5jZVByb3BzPzogUGFydGlhbDxlYzIuSW5zdGFuY2VQcm9wcz47XG59XG5cbmV4cG9ydCBjbGFzcyBQZ0JvdW5jZXIgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwdWJsaWMgcmVhZG9ubHkgaW5zdGFuY2U6IGVjMi5JbnN0YW5jZTtcbiAgcHVibGljIHJlYWRvbmx5IHBnYm91bmNlclNlY3JldDogc2VjcmV0c21hbmFnZXIuU2VjcmV0O1xuICBwdWJsaWMgcmVhZG9ubHkgc2VjdXJpdHlHcm91cDogZWMyLlNlY3VyaXR5R3JvdXA7XG4gIHB1YmxpYyByZWFkb25seSBzZWNyZXRVcGRhdGVDb21wbGV0ZTogQ3VzdG9tUmVzb3VyY2U7XG5cbiAgLy8gVGhlIG1heF9jb25uZWN0aW9ucyBwYXJhbWV0ZXIgaW4gUGdCb3VuY2VyIGRldGVybWluZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mXG4gIC8vIGNvbm5lY3Rpb25zIHRvIG9wZW4gb24gdGhlIGFjdHVhbCBkYXRhYmFzZSBpbnN0YW5jZS4gV2Ugd2FudCB0aGF0IG51bWJlciB0b1xuICAvLyBiZSBzbGlnaHRseSBzbWFsbGVyIHRoYW4gdGhlIGFjdHVhbCBtYXhfY29ubmVjdGlvbnMgdmFsdWUgb24gdGhlIFJEUyBpbnN0YW5jZVxuICAvLyBzbyB3ZSBwZXJmb3JtIHRoaXMgY2FsY3VsYXRpb24uXG5cbiAgcHJpdmF0ZSBnZXREZWZhdWx0UGdib3VuY2VyQ29uZmlnKFxuICAgIGRiTWF4Q29ubmVjdGlvbnM6IG51bWJlclxuICApOiBSZXF1aXJlZDxQZ0JvdW5jZXJDb25maWdQcm9wcz4ge1xuICAgIC8vIG1heERiQ29ubmVjdGlvbnMgKGFuZCBtYXhVc2VyQ29ubmVjdGlvbnMpIGFyZSB0aGUgb25seSBzZXR0aW5ncyB0aGF0IG5lZWRcbiAgICAvLyB0byBiZSByZXNwb25zaXZlIHRvIHRoZSBkYXRhYmFzZSBzaXplL21heF9jb25uZWN0aW9ucyBzZXR0aW5nXG4gICAgcmV0dXJuIHtcbiAgICAgIHBvb2xNb2RlOiBcInRyYW5zYWN0aW9uXCIsXG4gICAgICBtYXhDbGllbnRDb25uOiAxMDAwLFxuICAgICAgZGVmYXVsdFBvb2xTaXplOiA1LFxuICAgICAgbWluUG9vbFNpemU6IDAsXG4gICAgICByZXNlcnZlUG9vbFNpemU6IDUsXG4gICAgICByZXNlcnZlUG9vbFRpbWVvdXQ6IDUsXG4gICAgICBtYXhEYkNvbm5lY3Rpb25zOiBkYk1heENvbm5lY3Rpb25zIC0gMTAsXG4gICAgICBtYXhVc2VyQ29ubmVjdGlvbnM6IGRiTWF4Q29ubmVjdGlvbnMgLSAxMCxcbiAgICB9O1xuICB9XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFBnQm91bmNlclByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIC8vIFNldCBkZWZhdWx0cyBmb3Igb3B0aW9uYWwgcHJvcHNcblxuICAgIGNvbnN0IGRlZmF1bHRQZ2JvdW5jZXJDb25maWcgPSB0aGlzLmdldERlZmF1bHRQZ2JvdW5jZXJDb25maWcoXG4gICAgICBwcm9wcy5kYk1heENvbm5lY3Rpb25zXG4gICAgKTtcblxuICAgIC8vIE1lcmdlIHByb3ZpZGVkIGNvbmZpZyB3aXRoIGRlZmF1bHRzXG4gICAgY29uc3QgcGdCb3VuY2VyQ29uZmlnOiBSZXF1aXJlZDxQZ0JvdW5jZXJDb25maWdQcm9wcz4gPSB7XG4gICAgICAuLi5kZWZhdWx0UGdib3VuY2VyQ29uZmlnLFxuICAgICAgLi4ucHJvcHMucGdCb3VuY2VyQ29uZmlnLFxuICAgIH07XG5cbiAgICAvLyBDcmVhdGUgcm9sZSBmb3IgUGdCb3VuY2VyIGluc3RhbmNlIHRvIGVuYWJsZSB3cml0aW5nIHRvIENsb3VkV2F0Y2hcbiAgICBjb25zdCByb2xlID0gbmV3IGlhbS5Sb2xlKHRoaXMsIFwiSW5zdGFuY2VSb2xlXCIsIHtcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcInBnYm91bmNlciBpbnN0YW5jZSByb2xlIHdpdGggU3lzdGVtcyBNYW5hZ2VyICsgQ2xvdWRXYXRjaCBwZXJtaXNzaW9uc1wiLFxuICAgICAgYXNzdW1lZEJ5OiBuZXcgaWFtLlNlcnZpY2VQcmluY2lwYWwoXCJlYzIuYW1hem9uYXdzLmNvbVwiKSxcbiAgICAgIG1hbmFnZWRQb2xpY2llczogW1xuICAgICAgICBpYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoXG4gICAgICAgICAgXCJBbWF6b25TU01NYW5hZ2VkSW5zdGFuY2VDb3JlXCJcbiAgICAgICAgKSxcbiAgICAgICAgaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKFxuICAgICAgICAgIFwiQ2xvdWRXYXRjaEFnZW50U2VydmVyUG9saWN5XCJcbiAgICAgICAgKSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICAvLyBBZGQgcG9saWN5IHRvIGFsbG93IHJlYWRpbmcgUkRTIGNyZWRlbnRpYWxzIGZyb20gU2VjcmV0cyBNYW5hZ2VyXG4gICAgcm9sZS5hZGRUb1BvbGljeShcbiAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgYWN0aW9uczogW1wic2VjcmV0c21hbmFnZXI6R2V0U2VjcmV0VmFsdWVcIl0sXG4gICAgICAgIHJlc291cmNlczogW3Byb3BzLmRhdGFiYXNlLnNlY3JldC5zZWNyZXRBcm5dLFxuICAgICAgfSlcbiAgICApO1xuXG4gICAgLy8gQ3JlYXRlIGEgc2VjdXJpdHkgZ3JvdXAgYW5kIGFsbG93IGNvbm5lY3Rpb25zIGZyb20gdGhlIExhbWJkYSBJUCByYW5nZXMgZm9yIHRoaXMgcmVnaW9uXG4gICAgdGhpcy5zZWN1cml0eUdyb3VwID0gbmV3IGVjMi5TZWN1cml0eUdyb3VwKHRoaXMsIFwiUGdCb3VuY2VyU2VjdXJpdHlHcm91cFwiLCB7XG4gICAgICB2cGM6IHByb3BzLnZwYyxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlNlY3VyaXR5IGdyb3VwIGZvciBQZ0JvdW5jZXIgaW5zdGFuY2VcIixcbiAgICAgIGFsbG93QWxsT3V0Ym91bmQ6IHRydWUsXG4gICAgfSk7XG5cbiAgICAvLyBDcmVhdGUgUGdCb3VuY2VyIGluc3RhbmNlXG4gICAgY29uc3QgZGVmYXVsdEluc3RhbmNlQ29uZmlnOiBPbWl0PGVjMi5JbnN0YW5jZVByb3BzLCBcInZwY1wiPiA9IHtcbiAgICAgIGluc3RhbmNlTmFtZTogXCJwZ2JvdW5jZXJcIixcbiAgICAgIGluc3RhbmNlVHlwZTogZWMyLkluc3RhbmNlVHlwZS5vZihcbiAgICAgICAgZWMyLkluc3RhbmNlQ2xhc3MuVDMsXG4gICAgICAgIGVjMi5JbnN0YW5jZVNpemUuTUlDUk9cbiAgICAgICksXG4gICAgICB2cGNTdWJuZXRzOiB7XG4gICAgICAgIHN1Ym5ldFR5cGU6IHByb3BzLnVzZVB1YmxpY1N1Ym5ldFxuICAgICAgICAgID8gZWMyLlN1Ym5ldFR5cGUuUFVCTElDXG4gICAgICAgICAgOiBlYzIuU3VibmV0VHlwZS5QUklWQVRFX1dJVEhfRUdSRVNTLFxuICAgICAgfSxcbiAgICAgIG1hY2hpbmVJbWFnZTogZWMyLk1hY2hpbmVJbWFnZS5mcm9tU3NtUGFyYW1ldGVyKFxuICAgICAgICBcIi9hd3Mvc2VydmljZS9jYW5vbmljYWwvdWJ1bnR1L3NlcnZlci9ub2JsZS9zdGFibGUvY3VycmVudC9hbWQ2NC9odm0vZWJzLWdwMy9hbWktaWRcIixcbiAgICAgICAgeyBvczogZWMyLk9wZXJhdGluZ1N5c3RlbVR5cGUuTElOVVggfVxuICAgICAgKSxcbiAgICAgIGJsb2NrRGV2aWNlczogW1xuICAgICAgICB7XG4gICAgICAgICAgZGV2aWNlTmFtZTogXCIvZGV2L3h2ZGFcIixcbiAgICAgICAgICB2b2x1bWU6IGVjMi5CbG9ja0RldmljZVZvbHVtZS5lYnMoMjAsIHtcbiAgICAgICAgICAgIHZvbHVtZVR5cGU6IGVjMi5FYnNEZXZpY2VWb2x1bWVUeXBlLkdQMyxcbiAgICAgICAgICAgIGVuY3J5cHRlZDogdHJ1ZSxcbiAgICAgICAgICAgIGRlbGV0ZU9uVGVybWluYXRpb246IHRydWUsXG4gICAgICAgICAgfSksXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgcm9sZSxcbiAgICAgIHNlY3VyaXR5R3JvdXA6IHRoaXMuc2VjdXJpdHlHcm91cCxcbiAgICAgIHVzZXJEYXRhOiB0aGlzLmxvYWRVc2VyRGF0YVNjcmlwdChwZ0JvdW5jZXJDb25maWcsIHByb3BzLmRhdGFiYXNlKSxcbiAgICAgIHVzZXJEYXRhQ2F1c2VzUmVwbGFjZW1lbnQ6IHRydWUsXG4gICAgICBhc3NvY2lhdGVQdWJsaWNJcEFkZHJlc3M6IHByb3BzLnVzZVB1YmxpY1N1Ym5ldCxcbiAgICB9O1xuXG4gICAgdGhpcy5pbnN0YW5jZSA9IG5ldyBlYzIuSW5zdGFuY2UodGhpcywgXCJJbnN0YW5jZVwiLCB7XG4gICAgICAuLi5kZWZhdWx0SW5zdGFuY2VDb25maWcsXG4gICAgICAuLi5wcm9wcy5pbnN0YW5jZVByb3BzLFxuICAgICAgdnBjOiBwcm9wcy52cGMsXG4gICAgfSk7XG5cbiAgICAvLyBBbGxvdyBQZ0JvdW5jZXIgdG8gY29ubmVjdCB0byBSRFNcbiAgICBwcm9wcy5kYXRhYmFzZS5jb25uZWN0aW9ucy5hbGxvd0Zyb20oXG4gICAgICB0aGlzLmluc3RhbmNlLFxuICAgICAgZWMyLlBvcnQudGNwKDU0MzIpLFxuICAgICAgXCJBbGxvdyBQZ0JvdW5jZXIgdG8gY29ubmVjdCB0byBSRFNcIlxuICAgICk7XG5cbiAgICAvLyBDcmVhdGUgYSBuZXcgc2VjcmV0IGZvciBwZ2JvdW5jZXIgY29ubmVjdGlvbiBjcmVkZW50aWFsc1xuICAgIHRoaXMucGdib3VuY2VyU2VjcmV0ID0gbmV3IHNlY3JldHNtYW5hZ2VyLlNlY3JldCh0aGlzLCBcIlBnQm91bmNlclNlY3JldFwiLCB7XG4gICAgICBkZXNjcmlwdGlvbjogXCJDb25uZWN0aW9uIGluZm9ybWF0aW9uIGZvciBQZ0JvdW5jZXIgaW5zdGFuY2VcIixcbiAgICAgIGdlbmVyYXRlU2VjcmV0U3RyaW5nOiB7XG4gICAgICAgIGdlbmVyYXRlU3RyaW5nS2V5OiBcImR1bW15XCIsXG4gICAgICAgIHNlY3JldFN0cmluZ1RlbXBsYXRlOiBcInt9XCIsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gR3JhbnQgdGhlIHJvbGUgcGVybWlzc2lvbiB0byByZWFkIHRoZSBuZXcgc2VjcmV0XG4gICAgdGhpcy5wZ2JvdW5jZXJTZWNyZXQuZ3JhbnRSZWFkKHJvbGUpO1xuXG4gICAgLy8gVXBkYXRlIHBnYm91bmNlclNlY3JldCB0byBjb250YWluIHBnc3RhY1NlY3JldCB2YWx1ZXMgYnV0IHdpdGggbmV3IHZhbHVlIGZvciBob3N0XG4gICAgY29uc3Qgc2VjcmV0VXBkYXRlckZuID0gbmV3IGxhbWJkYS5GdW5jdGlvbih0aGlzLCBcIlNlY3JldFVwZGF0ZXJGdW5jdGlvblwiLCB7XG4gICAgICBydW50aW1lOiBsYW1iZGEuUnVudGltZS5OT0RFSlNfMjBfWCxcbiAgICAgIGhhbmRsZXI6IFwiaW5kZXguaGFuZGxlclwiLFxuICAgICAgY29kZTogbGFtYmRhLkNvZGUuZnJvbUFzc2V0KFxuICAgICAgICBwYXRoLmpvaW4oX19kaXJuYW1lLCBcImxhbWJkYS9wZ2JvdW5jZXItc2VjcmV0LXVwZGF0ZXJcIilcbiAgICAgICksXG4gICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICBTT1VSQ0VfU0VDUkVUX0FSTjogcHJvcHMuZGF0YWJhc2Uuc2VjcmV0LnNlY3JldEFybixcbiAgICAgICAgVEFSR0VUX1NFQ1JFVF9BUk46IHRoaXMucGdib3VuY2VyU2VjcmV0LnNlY3JldEFybixcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBwcm9wcy5kYXRhYmFzZS5zZWNyZXQuZ3JhbnRSZWFkKHNlY3JldFVwZGF0ZXJGbik7XG4gICAgdGhpcy5wZ2JvdW5jZXJTZWNyZXQuZ3JhbnRXcml0ZShzZWNyZXRVcGRhdGVyRm4pO1xuXG4gICAgdGhpcy5zZWNyZXRVcGRhdGVDb21wbGV0ZSA9IG5ldyBDdXN0b21SZXNvdXJjZShcbiAgICAgIHRoaXMsXG4gICAgICBcInBnYm91bmNlclNlY3JldEJvb3RzdHJhcHBlclwiLFxuICAgICAge1xuICAgICAgICBzZXJ2aWNlVG9rZW46IHNlY3JldFVwZGF0ZXJGbi5mdW5jdGlvbkFybixcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIGluc3RhbmNlSXA6IHByb3BzLnVzZVB1YmxpY1N1Ym5ldFxuICAgICAgICAgICAgPyB0aGlzLmluc3RhbmNlLmluc3RhbmNlUHVibGljSXBcbiAgICAgICAgICAgIDogdGhpcy5pbnN0YW5jZS5pbnN0YW5jZVByaXZhdGVJcCxcbiAgICAgICAgfSxcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkVXNlckRhdGFTY3JpcHQoXG4gICAgcGdCb3VuY2VyQ29uZmlnOiBSZXF1aXJlZDxOb25OdWxsYWJsZTxQZ0JvdW5jZXJQcm9wc1tcInBnQm91bmNlckNvbmZpZ1wiXT4+LFxuICAgIGRhdGFiYXNlOiB7IHNlY3JldDogc2VjcmV0c21hbmFnZXIuSVNlY3JldCB9XG4gICk6IGVjMi5Vc2VyRGF0YSB7XG4gICAgY29uc3QgdXNlckRhdGFTY3JpcHQgPSBlYzIuVXNlckRhdGEuZm9yTGludXgoKTtcblxuICAgIC8vIFNldCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgd2l0aCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnNcbiAgICB1c2VyRGF0YVNjcmlwdC5hZGRDb21tYW5kcyhcbiAgICAgICdleHBvcnQgU0VDUkVUX0FSTj1cIicgKyBkYXRhYmFzZS5zZWNyZXQuc2VjcmV0QXJuICsgJ1wiJyxcbiAgICAgICdleHBvcnQgUkVHSU9OPVwiJyArIFN0YWNrLm9mKHRoaXMpLnJlZ2lvbiArICdcIicsXG4gICAgICAnZXhwb3J0IFBPT0xfTU9ERT1cIicgKyBwZ0JvdW5jZXJDb25maWcucG9vbE1vZGUgKyAnXCInLFxuICAgICAgJ2V4cG9ydCBNQVhfQ0xJRU5UX0NPTk49XCInICsgcGdCb3VuY2VyQ29uZmlnLm1heENsaWVudENvbm4gKyAnXCInLFxuICAgICAgJ2V4cG9ydCBERUZBVUxUX1BPT0xfU0laRT1cIicgKyBwZ0JvdW5jZXJDb25maWcuZGVmYXVsdFBvb2xTaXplICsgJ1wiJyxcbiAgICAgICdleHBvcnQgTUlOX1BPT0xfU0laRT1cIicgKyBwZ0JvdW5jZXJDb25maWcubWluUG9vbFNpemUgKyAnXCInLFxuICAgICAgJ2V4cG9ydCBSRVNFUlZFX1BPT0xfU0laRT1cIicgKyBwZ0JvdW5jZXJDb25maWcucmVzZXJ2ZVBvb2xTaXplICsgJ1wiJyxcbiAgICAgICdleHBvcnQgUkVTRVJWRV9QT09MX1RJTUVPVVQ9XCInICtcbiAgICAgICAgcGdCb3VuY2VyQ29uZmlnLnJlc2VydmVQb29sVGltZW91dCArXG4gICAgICAgICdcIicsXG4gICAgICAnZXhwb3J0IE1BWF9EQl9DT05ORUNUSU9OUz1cIicgKyBwZ0JvdW5jZXJDb25maWcubWF4RGJDb25uZWN0aW9ucyArICdcIicsXG4gICAgICAnZXhwb3J0IE1BWF9VU0VSX0NPTk5FQ1RJT05TPVwiJyArIHBnQm91bmNlckNvbmZpZy5tYXhVc2VyQ29ubmVjdGlvbnMgKyAnXCInXG4gICAgKTtcblxuICAgIC8vIExvYWQgdGhlIHN0YXJ0dXAgc2NyaXB0XG4gICAgY29uc3Qgc2NyaXB0UGF0aCA9IHBhdGguam9pbihfX2Rpcm5hbWUsIFwiLi9wZ2JvdW5jZXItc2V0dXAuc2hcIik7XG4gICAgbGV0IHNjcmlwdCA9IGZzLnJlYWRGaWxlU3luYyhzY3JpcHRQYXRoLCBcInV0ZjhcIik7XG5cbiAgICB1c2VyRGF0YVNjcmlwdC5hZGRDb21tYW5kcyhzY3JpcHQpO1xuXG4gICAgcmV0dXJuIHVzZXJEYXRhU2NyaXB0O1xuICB9XG59XG4iXX0=
|
|
163
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGdCb3VuY2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiUGdCb3VuY2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQVFxQjtBQUNyQiwyQ0FBdUM7QUFFdkMseUJBQXlCO0FBQ3pCLDZCQUE2QjtBQW9EN0IsTUFBYSxTQUFVLFNBQVEsc0JBQVM7SUFPdEMsOEVBQThFO0lBQzlFLDhFQUE4RTtJQUM5RSxnRkFBZ0Y7SUFDaEYsa0NBQWtDO0lBRTFCLHlCQUF5QixDQUMvQixnQkFBd0I7UUFFeEIsNEVBQTRFO1FBQzVFLGdFQUFnRTtRQUNoRSxPQUFPO1lBQ0wsUUFBUSxFQUFFLGFBQWE7WUFDdkIsYUFBYSxFQUFFLElBQUk7WUFDbkIsZUFBZSxFQUFFLENBQUM7WUFDbEIsV0FBVyxFQUFFLENBQUM7WUFDZCxlQUFlLEVBQUUsQ0FBQztZQUNsQixrQkFBa0IsRUFBRSxDQUFDO1lBQ3JCLGdCQUFnQixFQUFFLGdCQUFnQixHQUFHLEVBQUU7WUFDdkMsa0JBQWtCLEVBQUUsZ0JBQWdCLEdBQUcsRUFBRTtTQUMxQyxDQUFDO0lBQ0osQ0FBQztJQUVELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBcUI7UUFDN0QsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixrQ0FBa0M7UUFFbEMsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQzNELEtBQUssQ0FBQyxnQkFBZ0IsQ0FDdkIsQ0FBQztRQUVGLHNDQUFzQztRQUN0QyxNQUFNLGVBQWUsR0FBbUM7WUFDdEQsR0FBRyxzQkFBc0I7WUFDekIsR0FBRyxLQUFLLENBQUMsZUFBZTtTQUN6QixDQUFDO1FBRUYscUVBQXFFO1FBQ3JFLE1BQU0sSUFBSSxHQUFHLElBQUkscUJBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRTtZQUM5QyxXQUFXLEVBQ1QsdUVBQXVFO1lBQ3pFLFNBQVMsRUFBRSxJQUFJLHFCQUFHLENB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QUE0QztRQUU1QyxNQUFNLGNBQWMsR0FBRyxxQkFBRyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUUvQywwREFBMEQ7UUFDMUQsY0FBYyxDQUFDLFdBQVcsQ0FDeEIscUJBQXFCLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsR0FBRyxFQUN2RCxpQkFBaUIsR0FBRyxtQkFBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUMvQyxvQkFBb0IsR0FBRyxlQUFlLENBQUMsUUFBUSxHQUFHLEdBQUcsRUFDckQsMEJBQTBCLEdBQUcsZUFBZSxDQUFDLGFBQWEsR0FBRyxHQUFHLEVBQ2hFLDRCQUE0QixHQUFHLGVBQWUsQ0FBQyxlQUFlLEdBQUcsR0FBRyxFQUNwRSx3QkFBd0IsR0FBRyxlQUFlLENBQUMsV0FBVyxHQUFHLEdBQUcsRUFDNUQsNEJBQTRCLEdBQUcsZUFBZSxDQUFDLGVBQWUsR0FBRyxHQUFHLEVBQ3BFLCtCQUErQjtZQUM3QixlQUFlLENBQUMsa0JBQWtCO1lBQ2xDLEdBQUcsRUFDTCw2QkFBNkIsR0FBRyxlQUFlLENBQUMsZ0JBQWdCLEdBQUcsR0FBRyxFQUN0RSwrQkFBK0IsR0FBRyxlQUFlLENBQUMsa0JBQWtCLEdBQUcsR0FBRyxDQUMzRSxDQUFDO1FBRUYsMEJBQTBCO1FBQzFCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLHNCQUFzQixDQUFDLENBQUM7UUFDaEUsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFakQsY0FBYyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVuQyxPQUFPLGNBQWMsQ0FBQztJQUN4QixDQUFDO0NBQ0Y7QUF6T0QsOEJBeU9DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgYXdzX2VjMiBhcyBlYzIsXG4gIGF3c19pYW0gYXMgaWFtLFxuICBhd3NfbGFtYmRhIGFzIGxhbWJkYSxcbiAgYXdzX3NlY3JldHNtYW5hZ2VyIGFzIHNlY3JldHNtYW5hZ2VyLFxuICBDdXN0b21SZXNvdXJjZSxcbiAgRHVyYXRpb24sXG4gIFN0YWNrLFxufSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5cbmltcG9ydCAqIGFzIGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuXG4vLyB1c2VkIHRvIHBvcHVsYXRlIHBnYm91bmNlciBjb25maWc6XG4vLyBzZWUgaHR0cHM6Ly93d3cucGdib3VuY2VyLm9yZy9jb25maWcuaHRtbCBmb3IgZGV0YWlsc1xuZXhwb3J0IGludGVyZmFjZSBQZ0JvdW5jZXJDb25maWdQcm9wcyB7XG4gIHBvb2xNb2RlPzogXCJ0cmFuc2FjdGlvblwiIHwgXCJzZXNzaW9uXCIgfCBcInN0YXRlbWVudFwiO1xuICBtYXhDbGllbnRDb25uPzogbnVtYmVyO1xuICBkZWZhdWx0UG9vbFNpemU/OiBudW1iZXI7XG4gIG1pblBvb2xTaXplPzogbnVtYmVyO1xuICByZXNlcnZlUG9vbFNpemU/OiBudW1iZXI7XG4gIHJlc2VydmVQb29sVGltZW91dD86IG51bWJlcjtcbiAgbWF4RGJDb25uZWN0aW9ucz86IG51bWJlcjtcbiAgbWF4VXNlckNvbm5lY3Rpb25zPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBnQm91bmNlclByb3BzIHtcbiAgLyoqXG4gICAqIFZQQyB0byBkZXBsb3kgUGdCb3VuY2VyIGludG9cbiAgICovXG4gIHZwYzogZWMyLklWcGM7XG5cbiAgLyoqXG4gICAqIFRoZSBSRFMgaW5zdGFuY2UgdG8gY29ubmVjdCB0b1xuICAgKi9cbiAgZGF0YWJhc2U6IHtcbiAgICBjb25uZWN0aW9uczogZWMyLkNvbm5lY3Rpb25zO1xuICAgIHNlY3JldDogc2VjcmV0c21hbmFnZXIuSVNlY3JldDtcbiAgfTtcblxuICAvKipcbiAgICogTWF4aW11bSBjb25uZWN0aW9ucyBzZXR0aW5nIGZvciB0aGUgZGF0YWJhc2UuXG4gICAqIFBnQm91bmNlciB3aWxsIHVzZSAxMCBmZXdlciB0aGFuIHRoaXMgdmFsdWUuXG4gICAqL1xuICBkYk1heENvbm5lY3Rpb25zOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZGVwbG95IGluIHB1YmxpYyBzdWJuZXRcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHVzZVB1YmxpY1N1Ym5ldD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFBnQm91bmNlciBjb25maWd1cmF0aW9uIG9wdGlvbnNcbiAgICovXG4gIHBnQm91bmNlckNvbmZpZz86IFBnQm91bmNlckNvbmZpZ1Byb3BzO1xuXG4gIC8qKlxuICAgKiBFQzIgaW5zdGFuY2Ugb3B0aW9uc1xuICAgKi9cbiAgaW5zdGFuY2VQcm9wcz86IFBhcnRpYWw8ZWMyLkluc3RhbmNlUHJvcHM+O1xufVxuXG5leHBvcnQgY2xhc3MgUGdCb3VuY2VyIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IGluc3RhbmNlOiBlYzIuSW5zdGFuY2U7XG4gIHB1YmxpYyByZWFkb25seSBwZ2JvdW5jZXJTZWNyZXQ6IHNlY3JldHNtYW5hZ2VyLlNlY3JldDtcbiAgcHVibGljIHJlYWRvbmx5IHNlY3VyaXR5R3JvdXA6IGVjMi5TZWN1cml0eUdyb3VwO1xuICBwdWJsaWMgcmVhZG9ubHkgc2VjcmV0VXBkYXRlQ29tcGxldGU6IEN1c3RvbVJlc291cmNlO1xuICBwdWJsaWMgcmVhZG9ubHkgaGVhbHRoQ2hlY2s6IEN1c3RvbVJlc291cmNlO1xuXG4gIC8vIFRoZSBtYXhfY29ubmVjdGlvbnMgcGFyYW1ldGVyIGluIFBnQm91bmNlciBkZXRlcm1pbmVzIHRoZSBtYXhpbXVtIG51bWJlciBvZlxuICAvLyBjb25uZWN0aW9ucyB0byBvcGVuIG9uIHRoZSBhY3R1YWwgZGF0YWJhc2UgaW5zdGFuY2UuIFdlIHdhbnQgdGhhdCBudW1iZXIgdG9cbiAgLy8gYmUgc2xpZ2h0bHkgc21hbGxlciB0aGFuIHRoZSBhY3R1YWwgbWF4X2Nvbm5lY3Rpb25zIHZhbHVlIG9uIHRoZSBSRFMgaW5zdGFuY2VcbiAgLy8gc28gd2UgcGVyZm9ybSB0aGlzIGNhbGN1bGF0aW9uLlxuXG4gIHByaXZhdGUgZ2V0RGVmYXVsdFBnYm91bmNlckNvbmZpZyhcbiAgICBkYk1heENvbm5lY3Rpb25zOiBudW1iZXJcbiAgKTogUmVxdWlyZWQ8UGdCb3VuY2VyQ29uZmlnUHJvcHM+IHtcbiAgICAvLyBtYXhEYkNvbm5lY3Rpb25zIChhbmQgbWF4VXNlckNvbm5lY3Rpb25zKSBhcmUgdGhlIG9ubHkgc2V0dGluZ3MgdGhhdCBuZWVkXG4gICAgLy8gdG8gYmUgcmVzcG9uc2l2ZSB0byB0aGUgZGF0YWJhc2Ugc2l6ZS9tYXhfY29ubmVjdGlvbnMgc2V0dGluZ1xuICAgIHJldHVybiB7XG4gICAgICBwb29sTW9kZTogXCJ0cmFuc2FjdGlvblwiLFxuICAgICAgbWF4Q2xpZW50Q29ubjogMTAwMCxcbiAgICAgIGRlZmF1bHRQb29sU2l6ZTogNSxcbiAgICAgIG1pblBvb2xTaXplOiAwLFxuICAgICAgcmVzZXJ2ZVBvb2xTaXplOiA1LFxuICAgICAgcmVzZXJ2ZVBvb2xUaW1lb3V0OiA1LFxuICAgICAgbWF4RGJDb25uZWN0aW9uczogZGJNYXhDb25uZWN0aW9ucyAtIDEwLFxuICAgICAgbWF4VXNlckNvbm5lY3Rpb25zOiBkYk1heENvbm5lY3Rpb25zIC0gMTAsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBQZ0JvdW5jZXJQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICAvLyBTZXQgZGVmYXVsdHMgZm9yIG9wdGlvbmFsIHByb3BzXG5cbiAgICBjb25zdCBkZWZhdWx0UGdib3VuY2VyQ29uZmlnID0gdGhpcy5nZXREZWZhdWx0UGdib3VuY2VyQ29uZmlnKFxuICAgICAgcHJvcHMuZGJNYXhDb25uZWN0aW9uc1xuICAgICk7XG5cbiAgICAvLyBNZXJnZSBwcm92aWRlZCBjb25maWcgd2l0aCBkZWZhdWx0c1xuICAgIGNvbnN0IHBnQm91bmNlckNvbmZpZzogUmVxdWlyZWQ8UGdCb3VuY2VyQ29uZmlnUHJvcHM+ID0ge1xuICAgICAgLi4uZGVmYXVsdFBnYm91bmNlckNvbmZpZyxcbiAgICAgIC4uLnByb3BzLnBnQm91bmNlckNvbmZpZyxcbiAgICB9O1xuXG4gICAgLy8gQ3JlYXRlIHJvbGUgZm9yIFBnQm91bmNlciBpbnN0YW5jZSB0byBlbmFibGUgd3JpdGluZyB0byBDbG91ZFdhdGNoXG4gICAgY29uc3Qgcm9sZSA9IG5ldyBpYW0uUm9sZSh0aGlzLCBcIkluc3RhbmNlUm9sZVwiLCB7XG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJwZ2JvdW5jZXIgaW5zdGFuY2Ugcm9sZSB3aXRoIFN5c3RlbXMgTWFuYWdlciArIENsb3VkV2F0Y2ggcGVybWlzc2lvbnNcIixcbiAgICAgIGFzc3VtZWRCeTogbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKFwiZWMyLmFtYXpvbmF3cy5jb21cIiksXG4gICAgICBtYW5hZ2VkUG9saWNpZXM6IFtcbiAgICAgICAgaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKFxuICAgICAgICAgIFwiQW1hem9uU1NNTWFuYWdlZEluc3RhbmNlQ29yZVwiXG4gICAgICAgICksXG4gICAgICAgIGlhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShcbiAgICAgICAgICBcIkNsb3VkV2F0Y2hBZ2VudFNlcnZlclBvbGljeVwiXG4gICAgICAgICksXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgLy8gQWRkIHBvbGljeSB0byBhbGxvdyByZWFkaW5nIFJEUyBjcmVkZW50aWFscyBmcm9tIFNlY3JldHMgTWFuYWdlclxuICAgIHJvbGUuYWRkVG9Qb2xpY3koXG4gICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGFjdGlvbnM6IFtcInNlY3JldHNtYW5hZ2VyOkdldFNlY3JldFZhbHVlXCJdLFxuICAgICAgICByZXNvdXJjZXM6IFtwcm9wcy5kYXRhYmFzZS5zZWNyZXQuc2VjcmV0QXJuXSxcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIC8vIENyZWF0ZSBhIHNlY3VyaXR5IGdyb3VwIGFuZCBhbGxvdyBjb25uZWN0aW9ucyBmcm9tIHRoZSBMYW1iZGEgSVAgcmFuZ2VzIGZvciB0aGlzIHJlZ2lvblxuICAgIHRoaXMuc2VjdXJpdHlHcm91cCA9IG5ldyBlYzIuU2VjdXJpdHlHcm91cCh0aGlzLCBcIlBnQm91bmNlclNlY3VyaXR5R3JvdXBcIiwge1xuICAgICAgdnBjOiBwcm9wcy52cGMsXG4gICAgICBkZXNjcmlwdGlvbjogXCJTZWN1cml0eSBncm91cCBmb3IgUGdCb3VuY2VyIGluc3RhbmNlXCIsXG4gICAgICBhbGxvd0FsbE91dGJvdW5kOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgLy8gQ3JlYXRlIFBnQm91bmNlciBpbnN0YW5jZVxuICAgIGNvbnN0IGRlZmF1bHRJbnN0YW5jZUNvbmZpZzogT21pdDxlYzIuSW5zdGFuY2VQcm9wcywgXCJ2cGNcIj4gPSB7XG4gICAgICBpbnN0YW5jZU5hbWU6IFwicGdib3VuY2VyXCIsXG4gICAgICBpbnN0YW5jZVR5cGU6IGVjMi5JbnN0YW5jZVR5cGUub2YoXG4gICAgICAgIGVjMi5JbnN0YW5jZUNsYXNzLlQzLFxuICAgICAgICBlYzIuSW5zdGFuY2VTaXplLk1JQ1JPXG4gICAgICApLFxuICAgICAgdnBjU3VibmV0czoge1xuICAgICAgICBzdWJuZXRUeXBlOiBwcm9wcy51c2VQdWJsaWNTdWJuZXRcbiAgICAgICAgICA/IGVjMi5TdWJuZXRUeXBlLlBVQkxJQ1xuICAgICAgICAgIDogZWMyLlN1Ym5ldFR5cGUuUFJJVkFURV9XSVRIX0VHUkVTUyxcbiAgICAgIH0sXG4gICAgICBtYWNoaW5lSW1hZ2U6IGVjMi5NYWNoaW5lSW1hZ2UuZnJvbVNzbVBhcmFtZXRlcihcbiAgICAgICAgXCIvYXdzL3NlcnZpY2UvY2Fub25pY2FsL3VidW50dS9zZXJ2ZXIvbm9ibGUvc3RhYmxlL2N1cnJlbnQvYW1kNjQvaHZtL2Vicy1ncDMvYW1pLWlkXCIsXG4gICAgICAgIHsgb3M6IGVjMi5PcGVyYXRpbmdTeXN0ZW1UeXBlLkxJTlVYIH1cbiAgICAgICksXG4gICAgICBibG9ja0RldmljZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGRldmljZU5hbWU6IFwiL2Rldi94dmRhXCIsXG4gICAgICAgICAgdm9sdW1lOiBlYzIuQmxvY2tEZXZpY2VWb2x1bWUuZWJzKDIwLCB7XG4gICAgICAgICAgICB2b2x1bWVUeXBlOiBlYzIuRWJzRGV2aWNlVm9sdW1lVHlwZS5HUDMsXG4gICAgICAgICAgICBlbmNyeXB0ZWQ6IHRydWUsXG4gICAgICAgICAgICBkZWxldGVPblRlcm1pbmF0aW9uOiB0cnVlLFxuICAgICAgICAgIH0pLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIHJvbGUsXG4gICAgICBzZWN1cml0eUdyb3VwOiB0aGlzLnNlY3VyaXR5R3JvdXAsXG4gICAgICB1c2VyRGF0YTogdGhpcy5sb2FkVXNlckRhdGFTY3JpcHQocGdCb3VuY2VyQ29uZmlnLCBwcm9wcy5kYXRhYmFzZSksXG4gICAgICB1c2VyRGF0YUNhdXNlc1JlcGxhY2VtZW50OiB0cnVlLFxuICAgICAgYXNzb2NpYXRlUHVibGljSXBBZGRyZXNzOiBwcm9wcy51c2VQdWJsaWNTdWJuZXQsXG4gICAgfTtcblxuICAgIHRoaXMuaW5zdGFuY2UgPSBuZXcgZWMyLkluc3RhbmNlKHRoaXMsIFwiSW5zdGFuY2VcIiwge1xuICAgICAgLi4uZGVmYXVsdEluc3RhbmNlQ29uZmlnLFxuICAgICAgLi4ucHJvcHMuaW5zdGFuY2VQcm9wcyxcbiAgICAgIHZwYzogcHJvcHMudnBjLFxuICAgIH0pO1xuXG4gICAgLy8gQWxsb3cgUGdCb3VuY2VyIHRvIGNvbm5lY3QgdG8gUkRTXG4gICAgcHJvcHMuZGF0YWJhc2UuY29ubmVjdGlvbnMuYWxsb3dGcm9tKFxuICAgICAgdGhpcy5pbnN0YW5jZSxcbiAgICAgIGVjMi5Qb3J0LnRjcCg1NDMyKSxcbiAgICAgIFwiQWxsb3cgUGdCb3VuY2VyIHRvIGNvbm5lY3QgdG8gUkRTXCJcbiAgICApO1xuXG4gICAgLy8gQ3JlYXRlIGEgbmV3IHNlY3JldCBmb3IgcGdib3VuY2VyIGNvbm5lY3Rpb24gY3JlZGVudGlhbHNcbiAgICB0aGlzLnBnYm91bmNlclNlY3JldCA9IG5ldyBzZWNyZXRzbWFuYWdlci5TZWNyZXQodGhpcywgXCJQZ0JvdW5jZXJTZWNyZXRcIiwge1xuICAgICAgZGVzY3JpcHRpb246IFwiQ29ubmVjdGlvbiBpbmZvcm1hdGlvbiBmb3IgUGdCb3VuY2VyIGluc3RhbmNlXCIsXG4gICAgICBnZW5lcmF0ZVNlY3JldFN0cmluZzoge1xuICAgICAgICBnZW5lcmF0ZVN0cmluZ0tleTogXCJkdW1teVwiLFxuICAgICAgICBzZWNyZXRTdHJpbmdUZW1wbGF0ZTogXCJ7fVwiLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIEdyYW50IHRoZSByb2xlIHBlcm1pc3Npb24gdG8gcmVhZCB0aGUgbmV3IHNlY3JldFxuICAgIHRoaXMucGdib3VuY2VyU2VjcmV0LmdyYW50UmVhZChyb2xlKTtcblxuICAgIC8vIFVwZGF0ZSBwZ2JvdW5jZXJTZWNyZXQgdG8gY29udGFpbiBwZ3N0YWNTZWNyZXQgdmFsdWVzIGJ1dCB3aXRoIG5ldyB2YWx1ZSBmb3IgaG9zdFxuICAgIGNvbnN0IHNlY3JldFVwZGF0ZXJGbiA9IG5ldyBsYW1iZGEuRnVuY3Rpb24odGhpcywgXCJTZWNyZXRVcGRhdGVyRnVuY3Rpb25cIiwge1xuICAgICAgcnVudGltZTogbGFtYmRhLlJ1bnRpbWUuTk9ERUpTXzIwX1gsXG4gICAgICBoYW5kbGVyOiBcImluZGV4LmhhbmRsZXJcIixcbiAgICAgIGNvZGU6IGxhbWJkYS5Db2RlLmZyb21Bc3NldChcbiAgICAgICAgcGF0aC5qb2luKF9fZGlybmFtZSwgXCJsYW1iZGEvcGdib3VuY2VyLXNlY3JldC11cGRhdGVyXCIpXG4gICAgICApLFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgU09VUkNFX1NFQ1JFVF9BUk46IHByb3BzLmRhdGFiYXNlLnNlY3JldC5zZWNyZXRBcm4sXG4gICAgICAgIFRBUkdFVF9TRUNSRVRfQVJOOiB0aGlzLnBnYm91bmNlclNlY3JldC5zZWNyZXRBcm4sXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgcHJvcHMuZGF0YWJhc2Uuc2VjcmV0LmdyYW50UmVhZChzZWNyZXRVcGRhdGVyRm4pO1xuICAgIHRoaXMucGdib3VuY2VyU2VjcmV0LmdyYW50V3JpdGUoc2VjcmV0VXBkYXRlckZuKTtcblxuICAgIHRoaXMuc2VjcmV0VXBkYXRlQ29tcGxldGUgPSBuZXcgQ3VzdG9tUmVzb3VyY2UoXG4gICAgICB0aGlzLFxuICAgICAgXCJwZ2JvdW5jZXJTZWNyZXRCb290c3RyYXBwZXJcIixcbiAgICAgIHtcbiAgICAgICAgc2VydmljZVRva2VuOiBzZWNyZXRVcGRhdGVyRm4uZnVuY3Rpb25Bcm4sXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBpbnN0YW5jZUlwOiBwcm9wcy51c2VQdWJsaWNTdWJuZXRcbiAgICAgICAgICAgID8gdGhpcy5pbnN0YW5jZS5pbnN0YW5jZVB1YmxpY0lwXG4gICAgICAgICAgICA6IHRoaXMuaW5zdGFuY2UuaW5zdGFuY2VQcml2YXRlSXAsXG4gICAgICAgIH0sXG4gICAgICB9XG4gICAgKTtcblxuICAgIC8vIEFkZCBoZWFsdGggY2hlY2sgY3VzdG9tIHJlc291cmNlXG4gICAgY29uc3QgaGVhbHRoQ2hlY2tGdW5jdGlvbiA9IG5ldyBsYW1iZGEuRnVuY3Rpb24oXG4gICAgICB0aGlzLFxuICAgICAgXCJIZWFsdGhDaGVja0Z1bmN0aW9uXCIsXG4gICAgICB7XG4gICAgICAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLk5PREVKU18yMF9YLFxuICAgICAgICBoYW5kbGVyOiBcImluZGV4LmhhbmRsZXJcIixcbiAgICAgICAgdGltZW91dDogRHVyYXRpb24ubWludXRlcygxMCksXG4gICAgICAgIGNvZGU6IGxhbWJkYS5Db2RlLmZyb21Bc3NldChcbiAgICAgICAgICBwYXRoLmpvaW4oX19kaXJuYW1lLCBcImxhbWJkYS9wZ2JvdW5jZXItaGVhbHRoLWNoZWNrXCIpXG4gICAgICAgICksXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIlBnQm91bmNlciBoZWFsdGggY2hlY2sgZnVuY3Rpb25cIixcbiAgICAgIH1cbiAgICApO1xuXG4gICAgLy8gR3JhbnQgU1NNIHBlcm1pc3Npb25zIGZvciBoZWFsdGggY2hlY2tcbiAgICBoZWFsdGhDaGVja0Z1bmN0aW9uLmFkZFRvUm9sZVBvbGljeShcbiAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgIFwic3NtOlNlbmRDb21tYW5kXCIsXG4gICAgICAgICAgXCJzc206R2V0Q29tbWFuZEludm9jYXRpb25cIixcbiAgICAgICAgICBcInNzbTpEZXNjcmliZUluc3RhbmNlSW5mb3JtYXRpb25cIixcbiAgICAgICAgICBcInNzbTpMaXN0Q29tbWFuZEludm9jYXRpb25zXCIsXG4gICAgICAgIF0sXG4gICAgICAgIHJlc291cmNlczogW1wiKlwiXSxcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuaGVhbHRoQ2hlY2sgPSBuZXcgQ3VzdG9tUmVzb3VyY2UodGhpcywgXCJQZ0JvdW5jZXJIZWFsdGhDaGVja1wiLCB7XG4gICAgICBzZXJ2aWNlVG9rZW46IGhlYWx0aENoZWNrRnVuY3Rpb24uZnVuY3Rpb25Bcm4sXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIEluc3RhbmNlSWQ6IHRoaXMuaW5zdGFuY2UuaW5zdGFuY2VJZCxcbiAgICAgICAgLy8gQWRkIHRpbWVzdGFtcCB0byBmb3JjZSByZS1leGVjdXRpb24gb24gc3RhY2sgdXBkYXRlc1xuICAgICAgICBUaW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBFbnN1cmUgaGVhbHRoIGNoZWNrIHJ1bnMgYWZ0ZXIgaW5zdGFuY2UgaXMgY3JlYXRlZCBidXQgYmVmb3JlIHNlY3JldCB1cGRhdGVcbiAgICB0aGlzLmhlYWx0aENoZWNrLm5vZGUuYWRkRGVwZW5kZW5jeSh0aGlzLmluc3RhbmNlKTtcbiAgICB0aGlzLnNlY3JldFVwZGF0ZUNvbXBsZXRlLm5vZGUuYWRkRGVwZW5kZW5jeSh0aGlzLmhlYWx0aENoZWNrKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZFVzZXJEYXRhU2NyaXB0KFxuICAgIHBnQm91bmNlckNvbmZpZzogUmVxdWlyZWQ8Tm9uTnVsbGFibGU8UGdCb3VuY2VyUHJvcHNbXCJwZ0JvdW5jZXJDb25maWdcIl0+PixcbiAgICBkYXRhYmFzZTogeyBzZWNyZXQ6IHNlY3JldHNtYW5hZ2VyLklTZWNyZXQgfVxuICApOiBlYzIuVXNlckRhdGEge1xuICAgIGNvbnN0IHVzZXJEYXRhU2NyaXB0ID0gZWMyLlVzZXJEYXRhLmZvckxpbnV4KCk7XG5cbiAgICAvLyBTZXQgZW52aXJvbm1lbnQgdmFyaWFibGVzIHdpdGggY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzXG4gICAgdXNlckRhdGFTY3JpcHQuYWRkQ29tbWFuZHMoXG4gICAgICAnZXhwb3J0IFNFQ1JFVF9BUk49XCInICsgZGF0YWJhc2Uuc2VjcmV0LnNlY3JldEFybiArICdcIicsXG4gICAgICAnZXhwb3J0IFJFR0lPTj1cIicgKyBTdGFjay5vZih0aGlzKS5yZWdpb24gKyAnXCInLFxuICAgICAgJ2V4cG9ydCBQT09MX01PREU9XCInICsgcGdCb3VuY2VyQ29uZmlnLnBvb2xNb2RlICsgJ1wiJyxcbiAgICAgICdleHBvcnQgTUFYX0NMSUVOVF9DT05OPVwiJyArIHBnQm91bmNlckNvbmZpZy5tYXhDbGllbnRDb25uICsgJ1wiJyxcbiAgICAgICdleHBvcnQgREVGQVVMVF9QT09MX1NJWkU9XCInICsgcGdCb3VuY2VyQ29uZmlnLmRlZmF1bHRQb29sU2l6ZSArICdcIicsXG4gICAgICAnZXhwb3J0IE1JTl9QT09MX1NJWkU9XCInICsgcGdCb3VuY2VyQ29uZmlnLm1pblBvb2xTaXplICsgJ1wiJyxcbiAgICAgICdleHBvcnQgUkVTRVJWRV9QT09MX1NJWkU9XCInICsgcGdCb3VuY2VyQ29uZmlnLnJlc2VydmVQb29sU2l6ZSArICdcIicsXG4gICAgICAnZXhwb3J0IFJFU0VSVkVfUE9PTF9USU1FT1VUPVwiJyArXG4gICAgICAgIHBnQm91bmNlckNvbmZpZy5yZXNlcnZlUG9vbFRpbWVvdXQgK1xuICAgICAgICAnXCInLFxuICAgICAgJ2V4cG9ydCBNQVhfREJfQ09OTkVDVElPTlM9XCInICsgcGdCb3VuY2VyQ29uZmlnLm1heERiQ29ubmVjdGlvbnMgKyAnXCInLFxuICAgICAgJ2V4cG9ydCBNQVhfVVNFUl9DT05ORUNUSU9OUz1cIicgKyBwZ0JvdW5jZXJDb25maWcubWF4VXNlckNvbm5lY3Rpb25zICsgJ1wiJ1xuICAgICk7XG5cbiAgICAvLyBMb2FkIHRoZSBzdGFydHVwIHNjcmlwdFxuICAgIGNvbnN0IHNjcmlwdFBhdGggPSBwYXRoLmpvaW4oX19kaXJuYW1lLCBcIi4vcGdib3VuY2VyLXNldHVwLnNoXCIpO1xuICAgIGxldCBzY3JpcHQgPSBmcy5yZWFkRmlsZVN5bmMoc2NyaXB0UGF0aCwgXCJ1dGY4XCIpO1xuXG4gICAgdXNlckRhdGFTY3JpcHQuYWRkQ29tbWFuZHMoc2NyaXB0KTtcblxuICAgIHJldHVybiB1c2VyRGF0YVNjcmlwdDtcbiAgfVxufVxuIl19
|
package/lib/database/index.d.ts
CHANGED
|
@@ -2,9 +2,47 @@ import { CustomResource, aws_ec2 as ec2, aws_rds as rds, aws_secretsmanager as s
|
|
|
2
2
|
import { Construct } from "constructs";
|
|
3
3
|
import { CustomLambdaFunctionProps } from "../utils";
|
|
4
4
|
/**
|
|
5
|
-
* An RDS instance with pgSTAC installed
|
|
6
|
-
*
|
|
7
|
-
*
|
|
5
|
+
* An RDS instance with pgSTAC installed and PgBouncer connection pooling.
|
|
6
|
+
*
|
|
7
|
+
* This construct creates an optimized pgSTAC database setup that includes:
|
|
8
|
+
* - RDS PostgreSQL instance with pgSTAC extension
|
|
9
|
+
* - PgBouncer connection pooler (enabled by default)
|
|
10
|
+
* - Automated health monitoring system
|
|
11
|
+
* - Optimized database parameters for the selected instance type
|
|
12
|
+
*
|
|
13
|
+
* ## Connection Pooling with PgBouncer
|
|
14
|
+
*
|
|
15
|
+
* By default, this construct deploys PgBouncer as a connection pooler running on
|
|
16
|
+
* a dedicated EC2 instance. PgBouncer provides several benefits:
|
|
17
|
+
*
|
|
18
|
+
* - **Connection Management**: Pools and reuses database connections to reduce overhead
|
|
19
|
+
* - **Performance**: Optimizes connection handling for high-traffic applications
|
|
20
|
+
* - **Scalability**: Allows more concurrent connections than the RDS instance alone
|
|
21
|
+
* - **Health Monitoring**: Includes comprehensive health checks to ensure availability
|
|
22
|
+
*
|
|
23
|
+
* ### PgBouncer Configuration
|
|
24
|
+
* - Pool mode: Transaction-level pooling (default)
|
|
25
|
+
* - Maximum client connections: 1000
|
|
26
|
+
* - Default pool size: 20 connections per database/user combination
|
|
27
|
+
* - Instance type: t3.micro EC2 instance
|
|
28
|
+
*
|
|
29
|
+
* ### Health Check System
|
|
30
|
+
* The construct includes an automated health check system that validates:
|
|
31
|
+
* - PgBouncer service is running and listening on port 5432
|
|
32
|
+
* - Connection tests to ensure accessibility
|
|
33
|
+
* - Cloud-init setup completion before validation
|
|
34
|
+
* - Detailed diagnostics for troubleshooting
|
|
35
|
+
*
|
|
36
|
+
* ### Connection Details
|
|
37
|
+
* When PgBouncer is enabled, applications connect through the PgBouncer instance
|
|
38
|
+
* rather than directly to RDS. The `pgstacSecret` contains connection information
|
|
39
|
+
* pointing to PgBouncer, and the `connectionTarget` property refers to the
|
|
40
|
+
* PgBouncer EC2 instance.
|
|
41
|
+
*
|
|
42
|
+
* To disable PgBouncer and connect directly to RDS, set `addPgbouncer: false`.
|
|
43
|
+
*
|
|
44
|
+
* This is a wrapper around the `rds.DatabaseInstance` higher-level construct
|
|
45
|
+
* making use of the BootstrapPgStac construct.
|
|
8
46
|
*/
|
|
9
47
|
export declare class PgStacDatabase extends Construct {
|
|
10
48
|
db: rds.DatabaseInstance;
|
|
@@ -14,6 +52,7 @@ export declare class PgStacDatabase extends Construct {
|
|
|
14
52
|
readonly connectionTarget: rds.IDatabaseInstance | ec2.Instance;
|
|
15
53
|
readonly securityGroup?: ec2.SecurityGroup;
|
|
16
54
|
readonly secretBootstrapper?: CustomResource;
|
|
55
|
+
readonly pgbouncerHealthCheck?: CustomResource;
|
|
17
56
|
constructor(scope: Construct, id: string, props: PgStacDatabaseProps);
|
|
18
57
|
getParameters(instanceType: string, parameters: PgStacDatabaseProps["parameters"]): DatabaseParameters;
|
|
19
58
|
}
|