cdk-mwaa 0.0.0__py3-none-any.whl
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.
- cdk_mwaa/__init__.py +1956 -0
- cdk_mwaa/_jsii/__init__.py +42 -0
- cdk_mwaa/_jsii/cdk-mwaa@0.0.0.jsii.tgz +0 -0
- cdk_mwaa/py.typed +1 -0
- cdk_mwaa-0.0.0.dist-info/LICENSE +19 -0
- cdk_mwaa-0.0.0.dist-info/METADATA +110 -0
- cdk_mwaa-0.0.0.dist-info/RECORD +9 -0
- cdk_mwaa-0.0.0.dist-info/WHEEL +5 -0
- cdk_mwaa-0.0.0.dist-info/top_level.txt +1 -0
cdk_mwaa/__init__.py
ADDED
@@ -0,0 +1,1956 @@
|
|
1
|
+
r'''
|
2
|
+
# cdk-mwaa
|
3
|
+
|
4
|
+
This project provides an AWS CDK construct library for creating and managing Amazon Managed Workflows for Apache Airflow (MWAA) environments.
|
5
|
+
|
6
|
+
## Features
|
7
|
+
|
8
|
+
* Create and manage MWAA environments
|
9
|
+
* Configure environment properties such as webserver access mode, Airflow version, environment class, and more
|
10
|
+
* Validate and set default values for environment properties
|
11
|
+
* Automatically create and configure necessary AWS resources such as S3 buckets and VPCs
|
12
|
+
|
13
|
+
## Installation
|
14
|
+
|
15
|
+
To use this construct library in your AWS CDK project, add it as a dependency:
|
16
|
+
|
17
|
+
```sh
|
18
|
+
npm install cdk-mwaa
|
19
|
+
# or
|
20
|
+
yarn add cdk-mwaa
|
21
|
+
```
|
22
|
+
|
23
|
+
## Usage
|
24
|
+
|
25
|
+
Here is an example of how to use the `cdk-mwaa` construct library in your AWS CDK project:
|
26
|
+
|
27
|
+
```python
|
28
|
+
import * as cdk from 'aws-cdk-lib';
|
29
|
+
import * as mwaa from 'cdk-mwaa';
|
30
|
+
|
31
|
+
const app = new cdk.App();
|
32
|
+
const stack = new cdk.Stack(app, 'MwaaStack');
|
33
|
+
|
34
|
+
const dagStorage = new mwaa.DagStorage(stack, 'MyMwaaDagStorage', {
|
35
|
+
bucketName: 'my-mwaa-dag-storage',
|
36
|
+
removalPolicy: cdk.RemovalPolicy.DESTROY,
|
37
|
+
});
|
38
|
+
|
39
|
+
new mwaa.Environment(stack, 'MyMwaaEnvironment', {
|
40
|
+
environmentName: 'my-mwaa-environment',
|
41
|
+
dagStorage,
|
42
|
+
airflowVersion: '2.10.3',
|
43
|
+
sizing: mwaa.Sizing.mw1Micro(),
|
44
|
+
// additional configuration options...
|
45
|
+
});
|
46
|
+
|
47
|
+
app.synth();
|
48
|
+
```
|
49
|
+
|
50
|
+
## Enabling Secrets Backend
|
51
|
+
|
52
|
+
To enable the secrets backend for your MWAA environment, you can use the `enableSecretsBackend` method. This allows you to securely manage secrets and environment variables.
|
53
|
+
|
54
|
+
Here is an example of how to enable the secrets backend in your MWAA environment:
|
55
|
+
|
56
|
+
```python
|
57
|
+
import * as cdk from 'aws-cdk-lib';
|
58
|
+
import * as mwaa from 'cdk-mwaa';
|
59
|
+
|
60
|
+
const app = new cdk.App();
|
61
|
+
const stack = new cdk.Stack(app, 'MwaaStack');
|
62
|
+
|
63
|
+
const dagStorage = new mwaa.DagStorage(stack, 'MyMwaaDagStorage', {
|
64
|
+
bucketName: 'my-mwaa-dag-storage',
|
65
|
+
removalPolicy: cdk.RemovalPolicy.DESTROY,
|
66
|
+
});
|
67
|
+
|
68
|
+
const environment = new mwaa.Environment(stack, 'MyMwaaEnvironment', {
|
69
|
+
environmentName: 'my-mwaa-environment',
|
70
|
+
dagStorage,
|
71
|
+
airflowVersion: '2.10.3',
|
72
|
+
sizing: mwaa.Sizing.mw1Micro(),
|
73
|
+
// additional configuration options...
|
74
|
+
});
|
75
|
+
|
76
|
+
environment.enableSecretsBackend();
|
77
|
+
|
78
|
+
app.synth();
|
79
|
+
```
|
80
|
+
|
81
|
+
## License
|
82
|
+
|
83
|
+
This project is licensed under the MIT License. See the [LICENSE](LICENSE) file for details.
|
84
|
+
'''
|
85
|
+
from pkgutil import extend_path
|
86
|
+
__path__ = extend_path(__path__, __name__)
|
87
|
+
|
88
|
+
import abc
|
89
|
+
import builtins
|
90
|
+
import datetime
|
91
|
+
import enum
|
92
|
+
import typing
|
93
|
+
|
94
|
+
import jsii
|
95
|
+
import publication
|
96
|
+
import typing_extensions
|
97
|
+
|
98
|
+
import typeguard
|
99
|
+
from importlib.metadata import version as _metadata_package_version
|
100
|
+
TYPEGUARD_MAJOR_VERSION = int(_metadata_package_version('typeguard').split('.')[0])
|
101
|
+
|
102
|
+
def check_type(argname: str, value: object, expected_type: typing.Any) -> typing.Any:
|
103
|
+
if TYPEGUARD_MAJOR_VERSION <= 2:
|
104
|
+
return typeguard.check_type(argname=argname, value=value, expected_type=expected_type) # type:ignore
|
105
|
+
else:
|
106
|
+
if isinstance(value, jsii._reference_map.InterfaceDynamicProxy): # pyright: ignore [reportAttributeAccessIssue]
|
107
|
+
pass
|
108
|
+
else:
|
109
|
+
if TYPEGUARD_MAJOR_VERSION == 3:
|
110
|
+
typeguard.config.collection_check_strategy = typeguard.CollectionCheckStrategy.ALL_ITEMS # type:ignore
|
111
|
+
typeguard.check_type(value=value, expected_type=expected_type) # type:ignore
|
112
|
+
else:
|
113
|
+
typeguard.check_type(value=value, expected_type=expected_type, collection_check_strategy=typeguard.CollectionCheckStrategy.ALL_ITEMS) # type:ignore
|
114
|
+
|
115
|
+
from ._jsii import *
|
116
|
+
|
117
|
+
import aws_cdk as _aws_cdk_ceddda9d
|
118
|
+
import aws_cdk.aws_ec2 as _aws_cdk_aws_ec2_ceddda9d
|
119
|
+
import aws_cdk.aws_iam as _aws_cdk_aws_iam_ceddda9d
|
120
|
+
import aws_cdk.aws_kms as _aws_cdk_aws_kms_ceddda9d
|
121
|
+
import aws_cdk.aws_s3 as _aws_cdk_aws_s3_ceddda9d
|
122
|
+
import aws_cdk.aws_s3_deployment as _aws_cdk_aws_s3_deployment_ceddda9d
|
123
|
+
import constructs as _constructs_77d1e7e8
|
124
|
+
|
125
|
+
|
126
|
+
class DagStorage(
|
127
|
+
_constructs_77d1e7e8.Construct,
|
128
|
+
metaclass=jsii.JSIIMeta,
|
129
|
+
jsii_type="cdk-mwaa.DagStorage",
|
130
|
+
):
|
131
|
+
'''Represents a storage location for MWAA DAGs and dependencies in an S3 bucket.'''
|
132
|
+
|
133
|
+
def __init__(
|
134
|
+
self,
|
135
|
+
scope: _constructs_77d1e7e8.Construct,
|
136
|
+
id: builtins.str,
|
137
|
+
*,
|
138
|
+
bucket_name: typing.Optional[builtins.str] = None,
|
139
|
+
dag_s3_path: typing.Optional[builtins.str] = None,
|
140
|
+
deploy_options: typing.Optional[typing.Union["DagStorageDeployOptions", typing.Dict[builtins.str, typing.Any]]] = None,
|
141
|
+
noncurrent_version_expiration: typing.Optional[_aws_cdk_ceddda9d.Duration] = None,
|
142
|
+
plugins_config: typing.Optional[typing.Union["DagStorageConfigOptions", typing.Dict[builtins.str, typing.Any]]] = None,
|
143
|
+
removal_policy: typing.Optional[_aws_cdk_ceddda9d.RemovalPolicy] = None,
|
144
|
+
requirements_config: typing.Optional[typing.Union["DagStorageConfigOptions", typing.Dict[builtins.str, typing.Any]]] = None,
|
145
|
+
startup_script_config: typing.Optional[typing.Union["DagStorageConfigOptions", typing.Dict[builtins.str, typing.Any]]] = None,
|
146
|
+
versioned: typing.Optional[builtins.bool] = None,
|
147
|
+
) -> None:
|
148
|
+
'''
|
149
|
+
:param scope: -
|
150
|
+
:param id: -
|
151
|
+
:param bucket_name: Optional custom bucket name.
|
152
|
+
:param dag_s3_path: Path for storing DAG files.
|
153
|
+
:param deploy_options: Options for deploying files into the bucket.
|
154
|
+
:param noncurrent_version_expiration: Lifecycle rule for expiring non-current versions.
|
155
|
+
:param plugins_config: Configuration for plugins storage.
|
156
|
+
:param removal_policy: Policy for bucket removal.
|
157
|
+
:param requirements_config: Configuration for requirements storage.
|
158
|
+
:param startup_script_config: Configuration for startup script storage.
|
159
|
+
:param versioned: Enable versioning for the bucket.
|
160
|
+
'''
|
161
|
+
if __debug__:
|
162
|
+
type_hints = typing.get_type_hints(_typecheckingstub__95a166027e8ebcfead2708b1c3388e60862a4fb6d86763bf56854f275bdd2390)
|
163
|
+
check_type(argname="argument scope", value=scope, expected_type=type_hints["scope"])
|
164
|
+
check_type(argname="argument id", value=id, expected_type=type_hints["id"])
|
165
|
+
props = DagStorageProps(
|
166
|
+
bucket_name=bucket_name,
|
167
|
+
dag_s3_path=dag_s3_path,
|
168
|
+
deploy_options=deploy_options,
|
169
|
+
noncurrent_version_expiration=noncurrent_version_expiration,
|
170
|
+
plugins_config=plugins_config,
|
171
|
+
removal_policy=removal_policy,
|
172
|
+
requirements_config=requirements_config,
|
173
|
+
startup_script_config=startup_script_config,
|
174
|
+
versioned=versioned,
|
175
|
+
)
|
176
|
+
|
177
|
+
jsii.create(self.__class__, self, [scope, id, props])
|
178
|
+
|
179
|
+
@builtins.property
|
180
|
+
@jsii.member(jsii_name="bucket")
|
181
|
+
def bucket(self) -> _aws_cdk_aws_s3_ceddda9d.Bucket:
|
182
|
+
'''The S3 bucket storing DAGs, plugins, requirements, and startup scripts.'''
|
183
|
+
return typing.cast(_aws_cdk_aws_s3_ceddda9d.Bucket, jsii.get(self, "bucket"))
|
184
|
+
|
185
|
+
@builtins.property
|
186
|
+
@jsii.member(jsii_name="dagS3Path")
|
187
|
+
def dag_s3_path(self) -> typing.Optional[builtins.str]:
|
188
|
+
'''S3 path for DAGs.'''
|
189
|
+
return typing.cast(typing.Optional[builtins.str], jsii.get(self, "dagS3Path"))
|
190
|
+
|
191
|
+
@builtins.property
|
192
|
+
@jsii.member(jsii_name="pluginsConfig")
|
193
|
+
def plugins_config(self) -> typing.Optional["DagStorageConfigOptions"]:
|
194
|
+
'''Plugin storage configuration.'''
|
195
|
+
return typing.cast(typing.Optional["DagStorageConfigOptions"], jsii.get(self, "pluginsConfig"))
|
196
|
+
|
197
|
+
@builtins.property
|
198
|
+
@jsii.member(jsii_name="requirementsConfig")
|
199
|
+
def requirements_config(self) -> typing.Optional["DagStorageConfigOptions"]:
|
200
|
+
'''Requirements storage configuration.'''
|
201
|
+
return typing.cast(typing.Optional["DagStorageConfigOptions"], jsii.get(self, "requirementsConfig"))
|
202
|
+
|
203
|
+
@builtins.property
|
204
|
+
@jsii.member(jsii_name="startupScriptConfig")
|
205
|
+
def startup_script_config(self) -> typing.Optional["DagStorageConfigOptions"]:
|
206
|
+
'''Startup script storage configuration.'''
|
207
|
+
return typing.cast(typing.Optional["DagStorageConfigOptions"], jsii.get(self, "startupScriptConfig"))
|
208
|
+
|
209
|
+
|
210
|
+
@jsii.data_type(
|
211
|
+
jsii_type="cdk-mwaa.DagStorageConfigOptions",
|
212
|
+
jsii_struct_bases=[],
|
213
|
+
name_mapping={"s3_path": "s3Path", "s3_object_version": "s3ObjectVersion"},
|
214
|
+
)
|
215
|
+
class DagStorageConfigOptions:
|
216
|
+
def __init__(
|
217
|
+
self,
|
218
|
+
*,
|
219
|
+
s3_path: builtins.str,
|
220
|
+
s3_object_version: typing.Optional[builtins.str] = None,
|
221
|
+
) -> None:
|
222
|
+
'''Configuration options for S3 path storage.
|
223
|
+
|
224
|
+
:param s3_path: The S3 path where the resource is stored.
|
225
|
+
:param s3_object_version: Optional object version for versioned buckets.
|
226
|
+
'''
|
227
|
+
if __debug__:
|
228
|
+
type_hints = typing.get_type_hints(_typecheckingstub__85a9b5242a26a2093aa8052dd8b86bea06801d5a767c2e5f908776c3f849eb63)
|
229
|
+
check_type(argname="argument s3_path", value=s3_path, expected_type=type_hints["s3_path"])
|
230
|
+
check_type(argname="argument s3_object_version", value=s3_object_version, expected_type=type_hints["s3_object_version"])
|
231
|
+
self._values: typing.Dict[builtins.str, typing.Any] = {
|
232
|
+
"s3_path": s3_path,
|
233
|
+
}
|
234
|
+
if s3_object_version is not None:
|
235
|
+
self._values["s3_object_version"] = s3_object_version
|
236
|
+
|
237
|
+
@builtins.property
|
238
|
+
def s3_path(self) -> builtins.str:
|
239
|
+
'''The S3 path where the resource is stored.'''
|
240
|
+
result = self._values.get("s3_path")
|
241
|
+
assert result is not None, "Required property 's3_path' is missing"
|
242
|
+
return typing.cast(builtins.str, result)
|
243
|
+
|
244
|
+
@builtins.property
|
245
|
+
def s3_object_version(self) -> typing.Optional[builtins.str]:
|
246
|
+
'''Optional object version for versioned buckets.'''
|
247
|
+
result = self._values.get("s3_object_version")
|
248
|
+
return typing.cast(typing.Optional[builtins.str], result)
|
249
|
+
|
250
|
+
def __eq__(self, rhs: typing.Any) -> builtins.bool:
|
251
|
+
return isinstance(rhs, self.__class__) and rhs._values == self._values
|
252
|
+
|
253
|
+
def __ne__(self, rhs: typing.Any) -> builtins.bool:
|
254
|
+
return not (rhs == self)
|
255
|
+
|
256
|
+
def __repr__(self) -> str:
|
257
|
+
return "DagStorageConfigOptions(%s)" % ", ".join(
|
258
|
+
k + "=" + repr(v) for k, v in self._values.items()
|
259
|
+
)
|
260
|
+
|
261
|
+
|
262
|
+
@jsii.data_type(
|
263
|
+
jsii_type="cdk-mwaa.DagStorageDeployOptions",
|
264
|
+
jsii_struct_bases=[],
|
265
|
+
name_mapping={
|
266
|
+
"prune": "prune",
|
267
|
+
"retain_on_delete": "retainOnDelete",
|
268
|
+
"sources": "sources",
|
269
|
+
},
|
270
|
+
)
|
271
|
+
class DagStorageDeployOptions:
|
272
|
+
def __init__(
|
273
|
+
self,
|
274
|
+
*,
|
275
|
+
prune: typing.Optional[builtins.bool] = None,
|
276
|
+
retain_on_delete: typing.Optional[builtins.bool] = None,
|
277
|
+
sources: typing.Optional[typing.Sequence[_aws_cdk_aws_s3_deployment_ceddda9d.ISource]] = None,
|
278
|
+
) -> None:
|
279
|
+
'''Options for deploying files to the DAG storage bucket.
|
280
|
+
|
281
|
+
:param prune: Whether to prune old versions of deployed files.
|
282
|
+
:param retain_on_delete: Whether to retain files on deletion of the stack.
|
283
|
+
:param sources: Sources to deploy into the bucket.
|
284
|
+
'''
|
285
|
+
if __debug__:
|
286
|
+
type_hints = typing.get_type_hints(_typecheckingstub__c4eb47db99cbba877092424afc09de8c308a38be2c61e698dd0c28933b9c3b42)
|
287
|
+
check_type(argname="argument prune", value=prune, expected_type=type_hints["prune"])
|
288
|
+
check_type(argname="argument retain_on_delete", value=retain_on_delete, expected_type=type_hints["retain_on_delete"])
|
289
|
+
check_type(argname="argument sources", value=sources, expected_type=type_hints["sources"])
|
290
|
+
self._values: typing.Dict[builtins.str, typing.Any] = {}
|
291
|
+
if prune is not None:
|
292
|
+
self._values["prune"] = prune
|
293
|
+
if retain_on_delete is not None:
|
294
|
+
self._values["retain_on_delete"] = retain_on_delete
|
295
|
+
if sources is not None:
|
296
|
+
self._values["sources"] = sources
|
297
|
+
|
298
|
+
@builtins.property
|
299
|
+
def prune(self) -> typing.Optional[builtins.bool]:
|
300
|
+
'''Whether to prune old versions of deployed files.'''
|
301
|
+
result = self._values.get("prune")
|
302
|
+
return typing.cast(typing.Optional[builtins.bool], result)
|
303
|
+
|
304
|
+
@builtins.property
|
305
|
+
def retain_on_delete(self) -> typing.Optional[builtins.bool]:
|
306
|
+
'''Whether to retain files on deletion of the stack.'''
|
307
|
+
result = self._values.get("retain_on_delete")
|
308
|
+
return typing.cast(typing.Optional[builtins.bool], result)
|
309
|
+
|
310
|
+
@builtins.property
|
311
|
+
def sources(
|
312
|
+
self,
|
313
|
+
) -> typing.Optional[typing.List[_aws_cdk_aws_s3_deployment_ceddda9d.ISource]]:
|
314
|
+
'''Sources to deploy into the bucket.'''
|
315
|
+
result = self._values.get("sources")
|
316
|
+
return typing.cast(typing.Optional[typing.List[_aws_cdk_aws_s3_deployment_ceddda9d.ISource]], result)
|
317
|
+
|
318
|
+
def __eq__(self, rhs: typing.Any) -> builtins.bool:
|
319
|
+
return isinstance(rhs, self.__class__) and rhs._values == self._values
|
320
|
+
|
321
|
+
def __ne__(self, rhs: typing.Any) -> builtins.bool:
|
322
|
+
return not (rhs == self)
|
323
|
+
|
324
|
+
def __repr__(self) -> str:
|
325
|
+
return "DagStorageDeployOptions(%s)" % ", ".join(
|
326
|
+
k + "=" + repr(v) for k, v in self._values.items()
|
327
|
+
)
|
328
|
+
|
329
|
+
|
330
|
+
@jsii.data_type(
|
331
|
+
jsii_type="cdk-mwaa.DagStorageProps",
|
332
|
+
jsii_struct_bases=[],
|
333
|
+
name_mapping={
|
334
|
+
"bucket_name": "bucketName",
|
335
|
+
"dag_s3_path": "dagS3Path",
|
336
|
+
"deploy_options": "deployOptions",
|
337
|
+
"noncurrent_version_expiration": "noncurrentVersionExpiration",
|
338
|
+
"plugins_config": "pluginsConfig",
|
339
|
+
"removal_policy": "removalPolicy",
|
340
|
+
"requirements_config": "requirementsConfig",
|
341
|
+
"startup_script_config": "startupScriptConfig",
|
342
|
+
"versioned": "versioned",
|
343
|
+
},
|
344
|
+
)
|
345
|
+
class DagStorageProps:
|
346
|
+
def __init__(
|
347
|
+
self,
|
348
|
+
*,
|
349
|
+
bucket_name: typing.Optional[builtins.str] = None,
|
350
|
+
dag_s3_path: typing.Optional[builtins.str] = None,
|
351
|
+
deploy_options: typing.Optional[typing.Union[DagStorageDeployOptions, typing.Dict[builtins.str, typing.Any]]] = None,
|
352
|
+
noncurrent_version_expiration: typing.Optional[_aws_cdk_ceddda9d.Duration] = None,
|
353
|
+
plugins_config: typing.Optional[typing.Union[DagStorageConfigOptions, typing.Dict[builtins.str, typing.Any]]] = None,
|
354
|
+
removal_policy: typing.Optional[_aws_cdk_ceddda9d.RemovalPolicy] = None,
|
355
|
+
requirements_config: typing.Optional[typing.Union[DagStorageConfigOptions, typing.Dict[builtins.str, typing.Any]]] = None,
|
356
|
+
startup_script_config: typing.Optional[typing.Union[DagStorageConfigOptions, typing.Dict[builtins.str, typing.Any]]] = None,
|
357
|
+
versioned: typing.Optional[builtins.bool] = None,
|
358
|
+
) -> None:
|
359
|
+
'''Properties for configuring the DAG storage bucket.
|
360
|
+
|
361
|
+
:param bucket_name: Optional custom bucket name.
|
362
|
+
:param dag_s3_path: Path for storing DAG files.
|
363
|
+
:param deploy_options: Options for deploying files into the bucket.
|
364
|
+
:param noncurrent_version_expiration: Lifecycle rule for expiring non-current versions.
|
365
|
+
:param plugins_config: Configuration for plugins storage.
|
366
|
+
:param removal_policy: Policy for bucket removal.
|
367
|
+
:param requirements_config: Configuration for requirements storage.
|
368
|
+
:param startup_script_config: Configuration for startup script storage.
|
369
|
+
:param versioned: Enable versioning for the bucket.
|
370
|
+
'''
|
371
|
+
if isinstance(deploy_options, dict):
|
372
|
+
deploy_options = DagStorageDeployOptions(**deploy_options)
|
373
|
+
if isinstance(plugins_config, dict):
|
374
|
+
plugins_config = DagStorageConfigOptions(**plugins_config)
|
375
|
+
if isinstance(requirements_config, dict):
|
376
|
+
requirements_config = DagStorageConfigOptions(**requirements_config)
|
377
|
+
if isinstance(startup_script_config, dict):
|
378
|
+
startup_script_config = DagStorageConfigOptions(**startup_script_config)
|
379
|
+
if __debug__:
|
380
|
+
type_hints = typing.get_type_hints(_typecheckingstub__6a4bace9647a9566f3af4198e17ef015306e92a6d5f673b579ba6fdfcb5231da)
|
381
|
+
check_type(argname="argument bucket_name", value=bucket_name, expected_type=type_hints["bucket_name"])
|
382
|
+
check_type(argname="argument dag_s3_path", value=dag_s3_path, expected_type=type_hints["dag_s3_path"])
|
383
|
+
check_type(argname="argument deploy_options", value=deploy_options, expected_type=type_hints["deploy_options"])
|
384
|
+
check_type(argname="argument noncurrent_version_expiration", value=noncurrent_version_expiration, expected_type=type_hints["noncurrent_version_expiration"])
|
385
|
+
check_type(argname="argument plugins_config", value=plugins_config, expected_type=type_hints["plugins_config"])
|
386
|
+
check_type(argname="argument removal_policy", value=removal_policy, expected_type=type_hints["removal_policy"])
|
387
|
+
check_type(argname="argument requirements_config", value=requirements_config, expected_type=type_hints["requirements_config"])
|
388
|
+
check_type(argname="argument startup_script_config", value=startup_script_config, expected_type=type_hints["startup_script_config"])
|
389
|
+
check_type(argname="argument versioned", value=versioned, expected_type=type_hints["versioned"])
|
390
|
+
self._values: typing.Dict[builtins.str, typing.Any] = {}
|
391
|
+
if bucket_name is not None:
|
392
|
+
self._values["bucket_name"] = bucket_name
|
393
|
+
if dag_s3_path is not None:
|
394
|
+
self._values["dag_s3_path"] = dag_s3_path
|
395
|
+
if deploy_options is not None:
|
396
|
+
self._values["deploy_options"] = deploy_options
|
397
|
+
if noncurrent_version_expiration is not None:
|
398
|
+
self._values["noncurrent_version_expiration"] = noncurrent_version_expiration
|
399
|
+
if plugins_config is not None:
|
400
|
+
self._values["plugins_config"] = plugins_config
|
401
|
+
if removal_policy is not None:
|
402
|
+
self._values["removal_policy"] = removal_policy
|
403
|
+
if requirements_config is not None:
|
404
|
+
self._values["requirements_config"] = requirements_config
|
405
|
+
if startup_script_config is not None:
|
406
|
+
self._values["startup_script_config"] = startup_script_config
|
407
|
+
if versioned is not None:
|
408
|
+
self._values["versioned"] = versioned
|
409
|
+
|
410
|
+
@builtins.property
|
411
|
+
def bucket_name(self) -> typing.Optional[builtins.str]:
|
412
|
+
'''Optional custom bucket name.'''
|
413
|
+
result = self._values.get("bucket_name")
|
414
|
+
return typing.cast(typing.Optional[builtins.str], result)
|
415
|
+
|
416
|
+
@builtins.property
|
417
|
+
def dag_s3_path(self) -> typing.Optional[builtins.str]:
|
418
|
+
'''Path for storing DAG files.'''
|
419
|
+
result = self._values.get("dag_s3_path")
|
420
|
+
return typing.cast(typing.Optional[builtins.str], result)
|
421
|
+
|
422
|
+
@builtins.property
|
423
|
+
def deploy_options(self) -> typing.Optional[DagStorageDeployOptions]:
|
424
|
+
'''Options for deploying files into the bucket.'''
|
425
|
+
result = self._values.get("deploy_options")
|
426
|
+
return typing.cast(typing.Optional[DagStorageDeployOptions], result)
|
427
|
+
|
428
|
+
@builtins.property
|
429
|
+
def noncurrent_version_expiration(
|
430
|
+
self,
|
431
|
+
) -> typing.Optional[_aws_cdk_ceddda9d.Duration]:
|
432
|
+
'''Lifecycle rule for expiring non-current versions.'''
|
433
|
+
result = self._values.get("noncurrent_version_expiration")
|
434
|
+
return typing.cast(typing.Optional[_aws_cdk_ceddda9d.Duration], result)
|
435
|
+
|
436
|
+
@builtins.property
|
437
|
+
def plugins_config(self) -> typing.Optional[DagStorageConfigOptions]:
|
438
|
+
'''Configuration for plugins storage.'''
|
439
|
+
result = self._values.get("plugins_config")
|
440
|
+
return typing.cast(typing.Optional[DagStorageConfigOptions], result)
|
441
|
+
|
442
|
+
@builtins.property
|
443
|
+
def removal_policy(self) -> typing.Optional[_aws_cdk_ceddda9d.RemovalPolicy]:
|
444
|
+
'''Policy for bucket removal.'''
|
445
|
+
result = self._values.get("removal_policy")
|
446
|
+
return typing.cast(typing.Optional[_aws_cdk_ceddda9d.RemovalPolicy], result)
|
447
|
+
|
448
|
+
@builtins.property
|
449
|
+
def requirements_config(self) -> typing.Optional[DagStorageConfigOptions]:
|
450
|
+
'''Configuration for requirements storage.'''
|
451
|
+
result = self._values.get("requirements_config")
|
452
|
+
return typing.cast(typing.Optional[DagStorageConfigOptions], result)
|
453
|
+
|
454
|
+
@builtins.property
|
455
|
+
def startup_script_config(self) -> typing.Optional[DagStorageConfigOptions]:
|
456
|
+
'''Configuration for startup script storage.'''
|
457
|
+
result = self._values.get("startup_script_config")
|
458
|
+
return typing.cast(typing.Optional[DagStorageConfigOptions], result)
|
459
|
+
|
460
|
+
@builtins.property
|
461
|
+
def versioned(self) -> typing.Optional[builtins.bool]:
|
462
|
+
'''Enable versioning for the bucket.'''
|
463
|
+
result = self._values.get("versioned")
|
464
|
+
return typing.cast(typing.Optional[builtins.bool], result)
|
465
|
+
|
466
|
+
def __eq__(self, rhs: typing.Any) -> builtins.bool:
|
467
|
+
return isinstance(rhs, self.__class__) and rhs._values == self._values
|
468
|
+
|
469
|
+
def __ne__(self, rhs: typing.Any) -> builtins.bool:
|
470
|
+
return not (rhs == self)
|
471
|
+
|
472
|
+
def __repr__(self) -> str:
|
473
|
+
return "DagStorageProps(%s)" % ", ".join(
|
474
|
+
k + "=" + repr(v) for k, v in self._values.items()
|
475
|
+
)
|
476
|
+
|
477
|
+
|
478
|
+
@jsii.data_type(
|
479
|
+
jsii_type="cdk-mwaa.EmailBackendOptions",
|
480
|
+
jsii_struct_bases=[],
|
481
|
+
name_mapping={"from_email": "fromEmail", "conn_id": "connId"},
|
482
|
+
)
|
483
|
+
class EmailBackendOptions:
|
484
|
+
def __init__(
|
485
|
+
self,
|
486
|
+
*,
|
487
|
+
from_email: builtins.str,
|
488
|
+
conn_id: typing.Optional[builtins.str] = None,
|
489
|
+
) -> None:
|
490
|
+
'''Options for configuring the Email backend.
|
491
|
+
|
492
|
+
:param from_email:
|
493
|
+
:param conn_id:
|
494
|
+
'''
|
495
|
+
if __debug__:
|
496
|
+
type_hints = typing.get_type_hints(_typecheckingstub__73e90f0cf9b9873d2646653b49d16d81a04d7e328760c253beb412d5e74258d3)
|
497
|
+
check_type(argname="argument from_email", value=from_email, expected_type=type_hints["from_email"])
|
498
|
+
check_type(argname="argument conn_id", value=conn_id, expected_type=type_hints["conn_id"])
|
499
|
+
self._values: typing.Dict[builtins.str, typing.Any] = {
|
500
|
+
"from_email": from_email,
|
501
|
+
}
|
502
|
+
if conn_id is not None:
|
503
|
+
self._values["conn_id"] = conn_id
|
504
|
+
|
505
|
+
@builtins.property
|
506
|
+
def from_email(self) -> builtins.str:
|
507
|
+
result = self._values.get("from_email")
|
508
|
+
assert result is not None, "Required property 'from_email' is missing"
|
509
|
+
return typing.cast(builtins.str, result)
|
510
|
+
|
511
|
+
@builtins.property
|
512
|
+
def conn_id(self) -> typing.Optional[builtins.str]:
|
513
|
+
result = self._values.get("conn_id")
|
514
|
+
return typing.cast(typing.Optional[builtins.str], result)
|
515
|
+
|
516
|
+
def __eq__(self, rhs: typing.Any) -> builtins.bool:
|
517
|
+
return isinstance(rhs, self.__class__) and rhs._values == self._values
|
518
|
+
|
519
|
+
def __ne__(self, rhs: typing.Any) -> builtins.bool:
|
520
|
+
return not (rhs == self)
|
521
|
+
|
522
|
+
def __repr__(self) -> str:
|
523
|
+
return "EmailBackendOptions(%s)" % ", ".join(
|
524
|
+
k + "=" + repr(v) for k, v in self._values.items()
|
525
|
+
)
|
526
|
+
|
527
|
+
|
528
|
+
@jsii.enum(jsii_type="cdk-mwaa.EndpointManagement")
|
529
|
+
class EndpointManagement(enum.Enum):
|
530
|
+
'''Enum for the endpoint management type for the MWAA environment.'''
|
531
|
+
|
532
|
+
CUSTOMER = "CUSTOMER"
|
533
|
+
SERVICE = "SERVICE"
|
534
|
+
|
535
|
+
|
536
|
+
class Environment(
|
537
|
+
_constructs_77d1e7e8.Construct,
|
538
|
+
metaclass=jsii.JSIIMeta,
|
539
|
+
jsii_type="cdk-mwaa.Environment",
|
540
|
+
):
|
541
|
+
'''Represents an MWAA environment.'''
|
542
|
+
|
543
|
+
def __init__(
|
544
|
+
self,
|
545
|
+
scope: _constructs_77d1e7e8.Construct,
|
546
|
+
id: builtins.str,
|
547
|
+
*,
|
548
|
+
airflow_version: builtins.str,
|
549
|
+
dag_storage: DagStorage,
|
550
|
+
environment_name: builtins.str,
|
551
|
+
sizing: "Sizing",
|
552
|
+
vpc: _aws_cdk_aws_ec2_ceddda9d.IVpc,
|
553
|
+
airflow_configuration_options: typing.Optional[typing.Mapping[builtins.str, typing.Any]] = None,
|
554
|
+
endpoint_management: typing.Optional[EndpointManagement] = None,
|
555
|
+
kms_key: typing.Optional[_aws_cdk_aws_kms_ceddda9d.IKey] = None,
|
556
|
+
logging_configuration: typing.Optional[typing.Union["LoggingConfiguration", typing.Dict[builtins.str, typing.Any]]] = None,
|
557
|
+
security_groups: typing.Optional[typing.Sequence[_aws_cdk_aws_ec2_ceddda9d.ISecurityGroup]] = None,
|
558
|
+
tags: typing.Optional[typing.Mapping[builtins.str, builtins.str]] = None,
|
559
|
+
webserver_access_mode: typing.Optional["WebserverAccessMode"] = None,
|
560
|
+
weekly_maintenance_window_start: typing.Optional[builtins.str] = None,
|
561
|
+
) -> None:
|
562
|
+
'''Creates an MWAA environment.
|
563
|
+
|
564
|
+
:param scope: - The scope of the construct.
|
565
|
+
:param id: - The unique ID of the construct.
|
566
|
+
:param airflow_version:
|
567
|
+
:param dag_storage:
|
568
|
+
:param environment_name:
|
569
|
+
:param sizing:
|
570
|
+
:param vpc:
|
571
|
+
:param airflow_configuration_options:
|
572
|
+
:param endpoint_management:
|
573
|
+
:param kms_key:
|
574
|
+
:param logging_configuration:
|
575
|
+
:param security_groups:
|
576
|
+
:param tags:
|
577
|
+
:param webserver_access_mode:
|
578
|
+
:param weekly_maintenance_window_start:
|
579
|
+
'''
|
580
|
+
if __debug__:
|
581
|
+
type_hints = typing.get_type_hints(_typecheckingstub__ebc587b767dfc724460675574ff2adf5d781edef0bcce6da7e68d76012bd53c2)
|
582
|
+
check_type(argname="argument scope", value=scope, expected_type=type_hints["scope"])
|
583
|
+
check_type(argname="argument id", value=id, expected_type=type_hints["id"])
|
584
|
+
props = EnvironmentProps(
|
585
|
+
airflow_version=airflow_version,
|
586
|
+
dag_storage=dag_storage,
|
587
|
+
environment_name=environment_name,
|
588
|
+
sizing=sizing,
|
589
|
+
vpc=vpc,
|
590
|
+
airflow_configuration_options=airflow_configuration_options,
|
591
|
+
endpoint_management=endpoint_management,
|
592
|
+
kms_key=kms_key,
|
593
|
+
logging_configuration=logging_configuration,
|
594
|
+
security_groups=security_groups,
|
595
|
+
tags=tags,
|
596
|
+
webserver_access_mode=webserver_access_mode,
|
597
|
+
weekly_maintenance_window_start=weekly_maintenance_window_start,
|
598
|
+
)
|
599
|
+
|
600
|
+
jsii.create(self.__class__, self, [scope, id, props])
|
601
|
+
|
602
|
+
@jsii.member(jsii_name="addToRolePolicy")
|
603
|
+
def add_to_role_policy(
|
604
|
+
self,
|
605
|
+
statement: _aws_cdk_aws_iam_ceddda9d.PolicyStatement,
|
606
|
+
) -> None:
|
607
|
+
'''
|
608
|
+
:param statement: -
|
609
|
+
'''
|
610
|
+
if __debug__:
|
611
|
+
type_hints = typing.get_type_hints(_typecheckingstub__e0979be1ca1dd29bc506f750b97db2634a5864c9d6ab41e834a41ad36343c373)
|
612
|
+
check_type(argname="argument statement", value=statement, expected_type=type_hints["statement"])
|
613
|
+
return typing.cast(None, jsii.invoke(self, "addToRolePolicy", [statement]))
|
614
|
+
|
615
|
+
@jsii.member(jsii_name="enableEmailBackend")
|
616
|
+
def enable_email_backend(
|
617
|
+
self,
|
618
|
+
*,
|
619
|
+
from_email: builtins.str,
|
620
|
+
conn_id: typing.Optional[builtins.str] = None,
|
621
|
+
) -> None:
|
622
|
+
'''Enables the email backend for Airflow to send email notifications.
|
623
|
+
|
624
|
+
:param from_email:
|
625
|
+
:param conn_id:
|
626
|
+
'''
|
627
|
+
options = EmailBackendOptions(from_email=from_email, conn_id=conn_id)
|
628
|
+
|
629
|
+
return typing.cast(None, jsii.invoke(self, "enableEmailBackend", [options]))
|
630
|
+
|
631
|
+
@jsii.member(jsii_name="enableSecretsBackend")
|
632
|
+
def enable_secrets_backend(
|
633
|
+
self,
|
634
|
+
*,
|
635
|
+
connections_lookup_pattern: typing.Optional[builtins.str] = None,
|
636
|
+
connections_prefix: typing.Optional[builtins.str] = None,
|
637
|
+
variables_lookup_pattern: typing.Optional[builtins.str] = None,
|
638
|
+
variables_prefix: typing.Optional[builtins.str] = None,
|
639
|
+
) -> None:
|
640
|
+
'''Enables the use of AWS Secrets Manager as a backend for storing Airflow connections and variables.
|
641
|
+
|
642
|
+
:param connections_lookup_pattern:
|
643
|
+
:param connections_prefix:
|
644
|
+
:param variables_lookup_pattern:
|
645
|
+
:param variables_prefix:
|
646
|
+
'''
|
647
|
+
options = SecretsBackendOptions(
|
648
|
+
connections_lookup_pattern=connections_lookup_pattern,
|
649
|
+
connections_prefix=connections_prefix,
|
650
|
+
variables_lookup_pattern=variables_lookup_pattern,
|
651
|
+
variables_prefix=variables_prefix,
|
652
|
+
)
|
653
|
+
|
654
|
+
return typing.cast(None, jsii.invoke(self, "enableSecretsBackend", [options]))
|
655
|
+
|
656
|
+
@builtins.property
|
657
|
+
@jsii.member(jsii_name="arn")
|
658
|
+
def arn(self) -> builtins.str:
|
659
|
+
return typing.cast(builtins.str, jsii.get(self, "arn"))
|
660
|
+
|
661
|
+
@builtins.property
|
662
|
+
@jsii.member(jsii_name="celeryExecutorQueue")
|
663
|
+
def celery_executor_queue(self) -> builtins.str:
|
664
|
+
return typing.cast(builtins.str, jsii.get(self, "celeryExecutorQueue"))
|
665
|
+
|
666
|
+
@builtins.property
|
667
|
+
@jsii.member(jsii_name="dagProcessingLogsGroupArn")
|
668
|
+
def dag_processing_logs_group_arn(self) -> builtins.str:
|
669
|
+
return typing.cast(builtins.str, jsii.get(self, "dagProcessingLogsGroupArn"))
|
670
|
+
|
671
|
+
@builtins.property
|
672
|
+
@jsii.member(jsii_name="databaseVpcEndpointService")
|
673
|
+
def database_vpc_endpoint_service(self) -> builtins.str:
|
674
|
+
return typing.cast(builtins.str, jsii.get(self, "databaseVpcEndpointService"))
|
675
|
+
|
676
|
+
@builtins.property
|
677
|
+
@jsii.member(jsii_name="schedulerLogsGroupArn")
|
678
|
+
def scheduler_logs_group_arn(self) -> builtins.str:
|
679
|
+
return typing.cast(builtins.str, jsii.get(self, "schedulerLogsGroupArn"))
|
680
|
+
|
681
|
+
@builtins.property
|
682
|
+
@jsii.member(jsii_name="taskLogsGroupArn")
|
683
|
+
def task_logs_group_arn(self) -> builtins.str:
|
684
|
+
return typing.cast(builtins.str, jsii.get(self, "taskLogsGroupArn"))
|
685
|
+
|
686
|
+
@builtins.property
|
687
|
+
@jsii.member(jsii_name="webserverLogsGroupArn")
|
688
|
+
def webserver_logs_group_arn(self) -> builtins.str:
|
689
|
+
return typing.cast(builtins.str, jsii.get(self, "webserverLogsGroupArn"))
|
690
|
+
|
691
|
+
@builtins.property
|
692
|
+
@jsii.member(jsii_name="webserverUrl")
|
693
|
+
def webserver_url(self) -> builtins.str:
|
694
|
+
return typing.cast(builtins.str, jsii.get(self, "webserverUrl"))
|
695
|
+
|
696
|
+
@builtins.property
|
697
|
+
@jsii.member(jsii_name="webserverVpcEndpointService")
|
698
|
+
def webserver_vpc_endpoint_service(self) -> builtins.str:
|
699
|
+
return typing.cast(builtins.str, jsii.get(self, "webserverVpcEndpointService"))
|
700
|
+
|
701
|
+
@builtins.property
|
702
|
+
@jsii.member(jsii_name="workerLogsGroupArn")
|
703
|
+
def worker_logs_group_arn(self) -> builtins.str:
|
704
|
+
return typing.cast(builtins.str, jsii.get(self, "workerLogsGroupArn"))
|
705
|
+
|
706
|
+
|
707
|
+
@jsii.enum(jsii_type="cdk-mwaa.EnvironmentClass")
|
708
|
+
class EnvironmentClass(enum.Enum):
|
709
|
+
'''Represents the available environment classes for MWAA (Managed Workflows for Apache Airflow).'''
|
710
|
+
|
711
|
+
MW1_MICRO = "MW1_MICRO"
|
712
|
+
MW1_SMALL = "MW1_SMALL"
|
713
|
+
MW1_MEDIUM = "MW1_MEDIUM"
|
714
|
+
MW1_LARGE = "MW1_LARGE"
|
715
|
+
|
716
|
+
|
717
|
+
@jsii.data_type(
|
718
|
+
jsii_type="cdk-mwaa.EnvironmentProps",
|
719
|
+
jsii_struct_bases=[],
|
720
|
+
name_mapping={
|
721
|
+
"airflow_version": "airflowVersion",
|
722
|
+
"dag_storage": "dagStorage",
|
723
|
+
"environment_name": "environmentName",
|
724
|
+
"sizing": "sizing",
|
725
|
+
"vpc": "vpc",
|
726
|
+
"airflow_configuration_options": "airflowConfigurationOptions",
|
727
|
+
"endpoint_management": "endpointManagement",
|
728
|
+
"kms_key": "kmsKey",
|
729
|
+
"logging_configuration": "loggingConfiguration",
|
730
|
+
"security_groups": "securityGroups",
|
731
|
+
"tags": "tags",
|
732
|
+
"webserver_access_mode": "webserverAccessMode",
|
733
|
+
"weekly_maintenance_window_start": "weeklyMaintenanceWindowStart",
|
734
|
+
},
|
735
|
+
)
|
736
|
+
class EnvironmentProps:
|
737
|
+
def __init__(
|
738
|
+
self,
|
739
|
+
*,
|
740
|
+
airflow_version: builtins.str,
|
741
|
+
dag_storage: DagStorage,
|
742
|
+
environment_name: builtins.str,
|
743
|
+
sizing: "Sizing",
|
744
|
+
vpc: _aws_cdk_aws_ec2_ceddda9d.IVpc,
|
745
|
+
airflow_configuration_options: typing.Optional[typing.Mapping[builtins.str, typing.Any]] = None,
|
746
|
+
endpoint_management: typing.Optional[EndpointManagement] = None,
|
747
|
+
kms_key: typing.Optional[_aws_cdk_aws_kms_ceddda9d.IKey] = None,
|
748
|
+
logging_configuration: typing.Optional[typing.Union["LoggingConfiguration", typing.Dict[builtins.str, typing.Any]]] = None,
|
749
|
+
security_groups: typing.Optional[typing.Sequence[_aws_cdk_aws_ec2_ceddda9d.ISecurityGroup]] = None,
|
750
|
+
tags: typing.Optional[typing.Mapping[builtins.str, builtins.str]] = None,
|
751
|
+
webserver_access_mode: typing.Optional["WebserverAccessMode"] = None,
|
752
|
+
weekly_maintenance_window_start: typing.Optional[builtins.str] = None,
|
753
|
+
) -> None:
|
754
|
+
'''Properties for creating an MWAA environment.
|
755
|
+
|
756
|
+
:param airflow_version:
|
757
|
+
:param dag_storage:
|
758
|
+
:param environment_name:
|
759
|
+
:param sizing:
|
760
|
+
:param vpc:
|
761
|
+
:param airflow_configuration_options:
|
762
|
+
:param endpoint_management:
|
763
|
+
:param kms_key:
|
764
|
+
:param logging_configuration:
|
765
|
+
:param security_groups:
|
766
|
+
:param tags:
|
767
|
+
:param webserver_access_mode:
|
768
|
+
:param weekly_maintenance_window_start:
|
769
|
+
'''
|
770
|
+
if isinstance(logging_configuration, dict):
|
771
|
+
logging_configuration = LoggingConfiguration(**logging_configuration)
|
772
|
+
if __debug__:
|
773
|
+
type_hints = typing.get_type_hints(_typecheckingstub__d58cfc6f1183850b5b51999d54a17bf62c6f7b5c3c75133b721818d02e12a9b8)
|
774
|
+
check_type(argname="argument airflow_version", value=airflow_version, expected_type=type_hints["airflow_version"])
|
775
|
+
check_type(argname="argument dag_storage", value=dag_storage, expected_type=type_hints["dag_storage"])
|
776
|
+
check_type(argname="argument environment_name", value=environment_name, expected_type=type_hints["environment_name"])
|
777
|
+
check_type(argname="argument sizing", value=sizing, expected_type=type_hints["sizing"])
|
778
|
+
check_type(argname="argument vpc", value=vpc, expected_type=type_hints["vpc"])
|
779
|
+
check_type(argname="argument airflow_configuration_options", value=airflow_configuration_options, expected_type=type_hints["airflow_configuration_options"])
|
780
|
+
check_type(argname="argument endpoint_management", value=endpoint_management, expected_type=type_hints["endpoint_management"])
|
781
|
+
check_type(argname="argument kms_key", value=kms_key, expected_type=type_hints["kms_key"])
|
782
|
+
check_type(argname="argument logging_configuration", value=logging_configuration, expected_type=type_hints["logging_configuration"])
|
783
|
+
check_type(argname="argument security_groups", value=security_groups, expected_type=type_hints["security_groups"])
|
784
|
+
check_type(argname="argument tags", value=tags, expected_type=type_hints["tags"])
|
785
|
+
check_type(argname="argument webserver_access_mode", value=webserver_access_mode, expected_type=type_hints["webserver_access_mode"])
|
786
|
+
check_type(argname="argument weekly_maintenance_window_start", value=weekly_maintenance_window_start, expected_type=type_hints["weekly_maintenance_window_start"])
|
787
|
+
self._values: typing.Dict[builtins.str, typing.Any] = {
|
788
|
+
"airflow_version": airflow_version,
|
789
|
+
"dag_storage": dag_storage,
|
790
|
+
"environment_name": environment_name,
|
791
|
+
"sizing": sizing,
|
792
|
+
"vpc": vpc,
|
793
|
+
}
|
794
|
+
if airflow_configuration_options is not None:
|
795
|
+
self._values["airflow_configuration_options"] = airflow_configuration_options
|
796
|
+
if endpoint_management is not None:
|
797
|
+
self._values["endpoint_management"] = endpoint_management
|
798
|
+
if kms_key is not None:
|
799
|
+
self._values["kms_key"] = kms_key
|
800
|
+
if logging_configuration is not None:
|
801
|
+
self._values["logging_configuration"] = logging_configuration
|
802
|
+
if security_groups is not None:
|
803
|
+
self._values["security_groups"] = security_groups
|
804
|
+
if tags is not None:
|
805
|
+
self._values["tags"] = tags
|
806
|
+
if webserver_access_mode is not None:
|
807
|
+
self._values["webserver_access_mode"] = webserver_access_mode
|
808
|
+
if weekly_maintenance_window_start is not None:
|
809
|
+
self._values["weekly_maintenance_window_start"] = weekly_maintenance_window_start
|
810
|
+
|
811
|
+
@builtins.property
|
812
|
+
def airflow_version(self) -> builtins.str:
|
813
|
+
result = self._values.get("airflow_version")
|
814
|
+
assert result is not None, "Required property 'airflow_version' is missing"
|
815
|
+
return typing.cast(builtins.str, result)
|
816
|
+
|
817
|
+
@builtins.property
|
818
|
+
def dag_storage(self) -> DagStorage:
|
819
|
+
result = self._values.get("dag_storage")
|
820
|
+
assert result is not None, "Required property 'dag_storage' is missing"
|
821
|
+
return typing.cast(DagStorage, result)
|
822
|
+
|
823
|
+
@builtins.property
|
824
|
+
def environment_name(self) -> builtins.str:
|
825
|
+
result = self._values.get("environment_name")
|
826
|
+
assert result is not None, "Required property 'environment_name' is missing"
|
827
|
+
return typing.cast(builtins.str, result)
|
828
|
+
|
829
|
+
@builtins.property
|
830
|
+
def sizing(self) -> "Sizing":
|
831
|
+
result = self._values.get("sizing")
|
832
|
+
assert result is not None, "Required property 'sizing' is missing"
|
833
|
+
return typing.cast("Sizing", result)
|
834
|
+
|
835
|
+
@builtins.property
|
836
|
+
def vpc(self) -> _aws_cdk_aws_ec2_ceddda9d.IVpc:
|
837
|
+
result = self._values.get("vpc")
|
838
|
+
assert result is not None, "Required property 'vpc' is missing"
|
839
|
+
return typing.cast(_aws_cdk_aws_ec2_ceddda9d.IVpc, result)
|
840
|
+
|
841
|
+
@builtins.property
|
842
|
+
def airflow_configuration_options(
|
843
|
+
self,
|
844
|
+
) -> typing.Optional[typing.Mapping[builtins.str, typing.Any]]:
|
845
|
+
result = self._values.get("airflow_configuration_options")
|
846
|
+
return typing.cast(typing.Optional[typing.Mapping[builtins.str, typing.Any]], result)
|
847
|
+
|
848
|
+
@builtins.property
|
849
|
+
def endpoint_management(self) -> typing.Optional[EndpointManagement]:
|
850
|
+
result = self._values.get("endpoint_management")
|
851
|
+
return typing.cast(typing.Optional[EndpointManagement], result)
|
852
|
+
|
853
|
+
@builtins.property
|
854
|
+
def kms_key(self) -> typing.Optional[_aws_cdk_aws_kms_ceddda9d.IKey]:
|
855
|
+
result = self._values.get("kms_key")
|
856
|
+
return typing.cast(typing.Optional[_aws_cdk_aws_kms_ceddda9d.IKey], result)
|
857
|
+
|
858
|
+
@builtins.property
|
859
|
+
def logging_configuration(self) -> typing.Optional["LoggingConfiguration"]:
|
860
|
+
result = self._values.get("logging_configuration")
|
861
|
+
return typing.cast(typing.Optional["LoggingConfiguration"], result)
|
862
|
+
|
863
|
+
@builtins.property
|
864
|
+
def security_groups(
|
865
|
+
self,
|
866
|
+
) -> typing.Optional[typing.List[_aws_cdk_aws_ec2_ceddda9d.ISecurityGroup]]:
|
867
|
+
result = self._values.get("security_groups")
|
868
|
+
return typing.cast(typing.Optional[typing.List[_aws_cdk_aws_ec2_ceddda9d.ISecurityGroup]], result)
|
869
|
+
|
870
|
+
@builtins.property
|
871
|
+
def tags(self) -> typing.Optional[typing.Mapping[builtins.str, builtins.str]]:
|
872
|
+
result = self._values.get("tags")
|
873
|
+
return typing.cast(typing.Optional[typing.Mapping[builtins.str, builtins.str]], result)
|
874
|
+
|
875
|
+
@builtins.property
|
876
|
+
def webserver_access_mode(self) -> typing.Optional["WebserverAccessMode"]:
|
877
|
+
result = self._values.get("webserver_access_mode")
|
878
|
+
return typing.cast(typing.Optional["WebserverAccessMode"], result)
|
879
|
+
|
880
|
+
@builtins.property
|
881
|
+
def weekly_maintenance_window_start(self) -> typing.Optional[builtins.str]:
|
882
|
+
result = self._values.get("weekly_maintenance_window_start")
|
883
|
+
return typing.cast(typing.Optional[builtins.str], result)
|
884
|
+
|
885
|
+
def __eq__(self, rhs: typing.Any) -> builtins.bool:
|
886
|
+
return isinstance(rhs, self.__class__) and rhs._values == self._values
|
887
|
+
|
888
|
+
def __ne__(self, rhs: typing.Any) -> builtins.bool:
|
889
|
+
return not (rhs == self)
|
890
|
+
|
891
|
+
def __repr__(self) -> str:
|
892
|
+
return "EnvironmentProps(%s)" % ", ".join(
|
893
|
+
k + "=" + repr(v) for k, v in self._values.items()
|
894
|
+
)
|
895
|
+
|
896
|
+
|
897
|
+
@jsii.enum(jsii_type="cdk-mwaa.LogLevel")
|
898
|
+
class LogLevel(enum.Enum):
|
899
|
+
'''Enum for the log level for Apache Airflow.'''
|
900
|
+
|
901
|
+
CRITICAL = "CRITICAL"
|
902
|
+
ERROR = "ERROR"
|
903
|
+
WARNING = "WARNING"
|
904
|
+
INFO = "INFO"
|
905
|
+
DEBUG = "DEBUG"
|
906
|
+
|
907
|
+
|
908
|
+
@jsii.data_type(
|
909
|
+
jsii_type="cdk-mwaa.LoggingConfiguration",
|
910
|
+
jsii_struct_bases=[],
|
911
|
+
name_mapping={
|
912
|
+
"dag_processing_logs": "dagProcessingLogs",
|
913
|
+
"scheduler_logs": "schedulerLogs",
|
914
|
+
"task_logs": "taskLogs",
|
915
|
+
"webserver_logs": "webserverLogs",
|
916
|
+
"worker_logs": "workerLogs",
|
917
|
+
},
|
918
|
+
)
|
919
|
+
class LoggingConfiguration:
|
920
|
+
def __init__(
|
921
|
+
self,
|
922
|
+
*,
|
923
|
+
dag_processing_logs: typing.Optional[typing.Union["LoggingConfigurationProperty", typing.Dict[builtins.str, typing.Any]]] = None,
|
924
|
+
scheduler_logs: typing.Optional[typing.Union["LoggingConfigurationProperty", typing.Dict[builtins.str, typing.Any]]] = None,
|
925
|
+
task_logs: typing.Optional[typing.Union["LoggingConfigurationProperty", typing.Dict[builtins.str, typing.Any]]] = None,
|
926
|
+
webserver_logs: typing.Optional[typing.Union["LoggingConfigurationProperty", typing.Dict[builtins.str, typing.Any]]] = None,
|
927
|
+
worker_logs: typing.Optional[typing.Union["LoggingConfigurationProperty", typing.Dict[builtins.str, typing.Any]]] = None,
|
928
|
+
) -> None:
|
929
|
+
'''Logging configuration for the MWAA environment.
|
930
|
+
|
931
|
+
:param dag_processing_logs:
|
932
|
+
:param scheduler_logs:
|
933
|
+
:param task_logs:
|
934
|
+
:param webserver_logs:
|
935
|
+
:param worker_logs:
|
936
|
+
'''
|
937
|
+
if isinstance(dag_processing_logs, dict):
|
938
|
+
dag_processing_logs = LoggingConfigurationProperty(**dag_processing_logs)
|
939
|
+
if isinstance(scheduler_logs, dict):
|
940
|
+
scheduler_logs = LoggingConfigurationProperty(**scheduler_logs)
|
941
|
+
if isinstance(task_logs, dict):
|
942
|
+
task_logs = LoggingConfigurationProperty(**task_logs)
|
943
|
+
if isinstance(webserver_logs, dict):
|
944
|
+
webserver_logs = LoggingConfigurationProperty(**webserver_logs)
|
945
|
+
if isinstance(worker_logs, dict):
|
946
|
+
worker_logs = LoggingConfigurationProperty(**worker_logs)
|
947
|
+
if __debug__:
|
948
|
+
type_hints = typing.get_type_hints(_typecheckingstub__5e2c2b7229af680332026a2523648e1c7f223df1a7e4c0c75768ae0221551c16)
|
949
|
+
check_type(argname="argument dag_processing_logs", value=dag_processing_logs, expected_type=type_hints["dag_processing_logs"])
|
950
|
+
check_type(argname="argument scheduler_logs", value=scheduler_logs, expected_type=type_hints["scheduler_logs"])
|
951
|
+
check_type(argname="argument task_logs", value=task_logs, expected_type=type_hints["task_logs"])
|
952
|
+
check_type(argname="argument webserver_logs", value=webserver_logs, expected_type=type_hints["webserver_logs"])
|
953
|
+
check_type(argname="argument worker_logs", value=worker_logs, expected_type=type_hints["worker_logs"])
|
954
|
+
self._values: typing.Dict[builtins.str, typing.Any] = {}
|
955
|
+
if dag_processing_logs is not None:
|
956
|
+
self._values["dag_processing_logs"] = dag_processing_logs
|
957
|
+
if scheduler_logs is not None:
|
958
|
+
self._values["scheduler_logs"] = scheduler_logs
|
959
|
+
if task_logs is not None:
|
960
|
+
self._values["task_logs"] = task_logs
|
961
|
+
if webserver_logs is not None:
|
962
|
+
self._values["webserver_logs"] = webserver_logs
|
963
|
+
if worker_logs is not None:
|
964
|
+
self._values["worker_logs"] = worker_logs
|
965
|
+
|
966
|
+
@builtins.property
|
967
|
+
def dag_processing_logs(self) -> typing.Optional["LoggingConfigurationProperty"]:
|
968
|
+
result = self._values.get("dag_processing_logs")
|
969
|
+
return typing.cast(typing.Optional["LoggingConfigurationProperty"], result)
|
970
|
+
|
971
|
+
@builtins.property
|
972
|
+
def scheduler_logs(self) -> typing.Optional["LoggingConfigurationProperty"]:
|
973
|
+
result = self._values.get("scheduler_logs")
|
974
|
+
return typing.cast(typing.Optional["LoggingConfigurationProperty"], result)
|
975
|
+
|
976
|
+
@builtins.property
|
977
|
+
def task_logs(self) -> typing.Optional["LoggingConfigurationProperty"]:
|
978
|
+
result = self._values.get("task_logs")
|
979
|
+
return typing.cast(typing.Optional["LoggingConfigurationProperty"], result)
|
980
|
+
|
981
|
+
@builtins.property
|
982
|
+
def webserver_logs(self) -> typing.Optional["LoggingConfigurationProperty"]:
|
983
|
+
result = self._values.get("webserver_logs")
|
984
|
+
return typing.cast(typing.Optional["LoggingConfigurationProperty"], result)
|
985
|
+
|
986
|
+
@builtins.property
|
987
|
+
def worker_logs(self) -> typing.Optional["LoggingConfigurationProperty"]:
|
988
|
+
result = self._values.get("worker_logs")
|
989
|
+
return typing.cast(typing.Optional["LoggingConfigurationProperty"], result)
|
990
|
+
|
991
|
+
def __eq__(self, rhs: typing.Any) -> builtins.bool:
|
992
|
+
return isinstance(rhs, self.__class__) and rhs._values == self._values
|
993
|
+
|
994
|
+
def __ne__(self, rhs: typing.Any) -> builtins.bool:
|
995
|
+
return not (rhs == self)
|
996
|
+
|
997
|
+
def __repr__(self) -> str:
|
998
|
+
return "LoggingConfiguration(%s)" % ", ".join(
|
999
|
+
k + "=" + repr(v) for k, v in self._values.items()
|
1000
|
+
)
|
1001
|
+
|
1002
|
+
|
1003
|
+
@jsii.data_type(
|
1004
|
+
jsii_type="cdk-mwaa.LoggingConfigurationProperty",
|
1005
|
+
jsii_struct_bases=[],
|
1006
|
+
name_mapping={"enabled": "enabled", "log_level": "logLevel"},
|
1007
|
+
)
|
1008
|
+
class LoggingConfigurationProperty:
|
1009
|
+
def __init__(
|
1010
|
+
self,
|
1011
|
+
*,
|
1012
|
+
enabled: typing.Optional[builtins.bool] = None,
|
1013
|
+
log_level: typing.Optional[LogLevel] = None,
|
1014
|
+
) -> None:
|
1015
|
+
'''Defines the logging configuration properties for various Airflow log types.
|
1016
|
+
|
1017
|
+
:param enabled: Indicates whether to enable the Apache Airflow log type (e.g. DagProcessingLogs) in CloudWatch Logs.
|
1018
|
+
:param log_level: Defines the log level for the specified log type (e.g. DagProcessingLogs). Valid values: CRITICAL, ERROR, WARNING, INFO, DEBUG.
|
1019
|
+
'''
|
1020
|
+
if __debug__:
|
1021
|
+
type_hints = typing.get_type_hints(_typecheckingstub__36e478654aa87904502c267bca96d1a7c0ca8f8e5e749464cb92a7cd1fd2c4b0)
|
1022
|
+
check_type(argname="argument enabled", value=enabled, expected_type=type_hints["enabled"])
|
1023
|
+
check_type(argname="argument log_level", value=log_level, expected_type=type_hints["log_level"])
|
1024
|
+
self._values: typing.Dict[builtins.str, typing.Any] = {}
|
1025
|
+
if enabled is not None:
|
1026
|
+
self._values["enabled"] = enabled
|
1027
|
+
if log_level is not None:
|
1028
|
+
self._values["log_level"] = log_level
|
1029
|
+
|
1030
|
+
@builtins.property
|
1031
|
+
def enabled(self) -> typing.Optional[builtins.bool]:
|
1032
|
+
'''Indicates whether to enable the Apache Airflow log type (e.g. DagProcessingLogs) in CloudWatch Logs.'''
|
1033
|
+
result = self._values.get("enabled")
|
1034
|
+
return typing.cast(typing.Optional[builtins.bool], result)
|
1035
|
+
|
1036
|
+
@builtins.property
|
1037
|
+
def log_level(self) -> typing.Optional[LogLevel]:
|
1038
|
+
'''Defines the log level for the specified log type (e.g. DagProcessingLogs). Valid values: CRITICAL, ERROR, WARNING, INFO, DEBUG.'''
|
1039
|
+
result = self._values.get("log_level")
|
1040
|
+
return typing.cast(typing.Optional[LogLevel], result)
|
1041
|
+
|
1042
|
+
def __eq__(self, rhs: typing.Any) -> builtins.bool:
|
1043
|
+
return isinstance(rhs, self.__class__) and rhs._values == self._values
|
1044
|
+
|
1045
|
+
def __ne__(self, rhs: typing.Any) -> builtins.bool:
|
1046
|
+
return not (rhs == self)
|
1047
|
+
|
1048
|
+
def __repr__(self) -> str:
|
1049
|
+
return "LoggingConfigurationProperty(%s)" % ", ".join(
|
1050
|
+
k + "=" + repr(v) for k, v in self._values.items()
|
1051
|
+
)
|
1052
|
+
|
1053
|
+
|
1054
|
+
@jsii.data_type(
|
1055
|
+
jsii_type="cdk-mwaa.MWAAProps",
|
1056
|
+
jsii_struct_bases=[],
|
1057
|
+
name_mapping={
|
1058
|
+
"airflow_version": "airflowVersion",
|
1059
|
+
"environment_name": "environmentName",
|
1060
|
+
"airflow_configuration_options": "airflowConfigurationOptions",
|
1061
|
+
"bucket_name": "bucketName",
|
1062
|
+
"deploy_options": "deployOptions",
|
1063
|
+
"removal_policy": "removalPolicy",
|
1064
|
+
"sizing": "sizing",
|
1065
|
+
"vpc": "vpc",
|
1066
|
+
},
|
1067
|
+
)
|
1068
|
+
class MWAAProps:
|
1069
|
+
def __init__(
|
1070
|
+
self,
|
1071
|
+
*,
|
1072
|
+
airflow_version: builtins.str,
|
1073
|
+
environment_name: builtins.str,
|
1074
|
+
airflow_configuration_options: typing.Optional[typing.Mapping[builtins.str, typing.Any]] = None,
|
1075
|
+
bucket_name: typing.Optional[builtins.str] = None,
|
1076
|
+
deploy_options: typing.Optional[typing.Union[DagStorageDeployOptions, typing.Dict[builtins.str, typing.Any]]] = None,
|
1077
|
+
removal_policy: typing.Optional[_aws_cdk_ceddda9d.RemovalPolicy] = None,
|
1078
|
+
sizing: typing.Optional["Sizing"] = None,
|
1079
|
+
vpc: typing.Optional[_aws_cdk_aws_ec2_ceddda9d.IVpc] = None,
|
1080
|
+
) -> None:
|
1081
|
+
'''Interface defining the properties for configuring MWAA (Managed Airflow).
|
1082
|
+
|
1083
|
+
:param airflow_version: The version of Airflow to deploy.
|
1084
|
+
:param environment_name: The name of the Airflow environment.
|
1085
|
+
:param airflow_configuration_options: Airflow configuration options as key-value pairs. These configuration options are passed to the Airflow environment.
|
1086
|
+
:param bucket_name: The name of the S3 bucket used for storing DAGs. If not provided, a default bucket is created.
|
1087
|
+
:param deploy_options: Optional DAG storage deployment options. Configures how the DAGs are deployed to the S3 bucket.
|
1088
|
+
:param removal_policy: The removal policy for the MWAA resources. Determines what happens to the resources when they are deleted. Defaults to 'RETAIN' if not specified.
|
1089
|
+
:param sizing: Optional sizing configuration for the MWAA environment. Defines the compute resources.
|
1090
|
+
:param vpc: The VPC in which to deploy the MWAA environment. If not provided, a default VPC will be created.
|
1091
|
+
'''
|
1092
|
+
if isinstance(deploy_options, dict):
|
1093
|
+
deploy_options = DagStorageDeployOptions(**deploy_options)
|
1094
|
+
if __debug__:
|
1095
|
+
type_hints = typing.get_type_hints(_typecheckingstub__e73d818937427f32bb22179ff7d13eb6aa0201131959780924f6ec21b94dd128)
|
1096
|
+
check_type(argname="argument airflow_version", value=airflow_version, expected_type=type_hints["airflow_version"])
|
1097
|
+
check_type(argname="argument environment_name", value=environment_name, expected_type=type_hints["environment_name"])
|
1098
|
+
check_type(argname="argument airflow_configuration_options", value=airflow_configuration_options, expected_type=type_hints["airflow_configuration_options"])
|
1099
|
+
check_type(argname="argument bucket_name", value=bucket_name, expected_type=type_hints["bucket_name"])
|
1100
|
+
check_type(argname="argument deploy_options", value=deploy_options, expected_type=type_hints["deploy_options"])
|
1101
|
+
check_type(argname="argument removal_policy", value=removal_policy, expected_type=type_hints["removal_policy"])
|
1102
|
+
check_type(argname="argument sizing", value=sizing, expected_type=type_hints["sizing"])
|
1103
|
+
check_type(argname="argument vpc", value=vpc, expected_type=type_hints["vpc"])
|
1104
|
+
self._values: typing.Dict[builtins.str, typing.Any] = {
|
1105
|
+
"airflow_version": airflow_version,
|
1106
|
+
"environment_name": environment_name,
|
1107
|
+
}
|
1108
|
+
if airflow_configuration_options is not None:
|
1109
|
+
self._values["airflow_configuration_options"] = airflow_configuration_options
|
1110
|
+
if bucket_name is not None:
|
1111
|
+
self._values["bucket_name"] = bucket_name
|
1112
|
+
if deploy_options is not None:
|
1113
|
+
self._values["deploy_options"] = deploy_options
|
1114
|
+
if removal_policy is not None:
|
1115
|
+
self._values["removal_policy"] = removal_policy
|
1116
|
+
if sizing is not None:
|
1117
|
+
self._values["sizing"] = sizing
|
1118
|
+
if vpc is not None:
|
1119
|
+
self._values["vpc"] = vpc
|
1120
|
+
|
1121
|
+
@builtins.property
|
1122
|
+
def airflow_version(self) -> builtins.str:
|
1123
|
+
'''The version of Airflow to deploy.'''
|
1124
|
+
result = self._values.get("airflow_version")
|
1125
|
+
assert result is not None, "Required property 'airflow_version' is missing"
|
1126
|
+
return typing.cast(builtins.str, result)
|
1127
|
+
|
1128
|
+
@builtins.property
|
1129
|
+
def environment_name(self) -> builtins.str:
|
1130
|
+
'''The name of the Airflow environment.'''
|
1131
|
+
result = self._values.get("environment_name")
|
1132
|
+
assert result is not None, "Required property 'environment_name' is missing"
|
1133
|
+
return typing.cast(builtins.str, result)
|
1134
|
+
|
1135
|
+
@builtins.property
|
1136
|
+
def airflow_configuration_options(
|
1137
|
+
self,
|
1138
|
+
) -> typing.Optional[typing.Mapping[builtins.str, typing.Any]]:
|
1139
|
+
'''Airflow configuration options as key-value pairs.
|
1140
|
+
|
1141
|
+
These configuration options are passed to the Airflow environment.
|
1142
|
+
'''
|
1143
|
+
result = self._values.get("airflow_configuration_options")
|
1144
|
+
return typing.cast(typing.Optional[typing.Mapping[builtins.str, typing.Any]], result)
|
1145
|
+
|
1146
|
+
@builtins.property
|
1147
|
+
def bucket_name(self) -> typing.Optional[builtins.str]:
|
1148
|
+
'''The name of the S3 bucket used for storing DAGs.
|
1149
|
+
|
1150
|
+
If not provided, a default bucket is created.
|
1151
|
+
'''
|
1152
|
+
result = self._values.get("bucket_name")
|
1153
|
+
return typing.cast(typing.Optional[builtins.str], result)
|
1154
|
+
|
1155
|
+
@builtins.property
|
1156
|
+
def deploy_options(self) -> typing.Optional[DagStorageDeployOptions]:
|
1157
|
+
'''Optional DAG storage deployment options.
|
1158
|
+
|
1159
|
+
Configures how the DAGs are deployed to the S3 bucket.
|
1160
|
+
'''
|
1161
|
+
result = self._values.get("deploy_options")
|
1162
|
+
return typing.cast(typing.Optional[DagStorageDeployOptions], result)
|
1163
|
+
|
1164
|
+
@builtins.property
|
1165
|
+
def removal_policy(self) -> typing.Optional[_aws_cdk_ceddda9d.RemovalPolicy]:
|
1166
|
+
'''The removal policy for the MWAA resources.
|
1167
|
+
|
1168
|
+
Determines what happens to the resources when they are deleted.
|
1169
|
+
Defaults to 'RETAIN' if not specified.
|
1170
|
+
'''
|
1171
|
+
result = self._values.get("removal_policy")
|
1172
|
+
return typing.cast(typing.Optional[_aws_cdk_ceddda9d.RemovalPolicy], result)
|
1173
|
+
|
1174
|
+
@builtins.property
|
1175
|
+
def sizing(self) -> typing.Optional["Sizing"]:
|
1176
|
+
'''Optional sizing configuration for the MWAA environment.
|
1177
|
+
|
1178
|
+
Defines the compute resources.
|
1179
|
+
'''
|
1180
|
+
result = self._values.get("sizing")
|
1181
|
+
return typing.cast(typing.Optional["Sizing"], result)
|
1182
|
+
|
1183
|
+
@builtins.property
|
1184
|
+
def vpc(self) -> typing.Optional[_aws_cdk_aws_ec2_ceddda9d.IVpc]:
|
1185
|
+
'''The VPC in which to deploy the MWAA environment.
|
1186
|
+
|
1187
|
+
If not provided, a default VPC will be created.
|
1188
|
+
'''
|
1189
|
+
result = self._values.get("vpc")
|
1190
|
+
return typing.cast(typing.Optional[_aws_cdk_aws_ec2_ceddda9d.IVpc], result)
|
1191
|
+
|
1192
|
+
def __eq__(self, rhs: typing.Any) -> builtins.bool:
|
1193
|
+
return isinstance(rhs, self.__class__) and rhs._values == self._values
|
1194
|
+
|
1195
|
+
def __ne__(self, rhs: typing.Any) -> builtins.bool:
|
1196
|
+
return not (rhs == self)
|
1197
|
+
|
1198
|
+
def __repr__(self) -> str:
|
1199
|
+
return "MWAAProps(%s)" % ", ".join(
|
1200
|
+
k + "=" + repr(v) for k, v in self._values.items()
|
1201
|
+
)
|
1202
|
+
|
1203
|
+
|
1204
|
+
class PublicRoutingMWAA(
|
1205
|
+
_constructs_77d1e7e8.Construct,
|
1206
|
+
metaclass=jsii.JSIIMeta,
|
1207
|
+
jsii_type="cdk-mwaa.PublicRoutingMWAA",
|
1208
|
+
):
|
1209
|
+
'''PublicRoutingMWAA constructs a Managed Airflow (MWAA) environment with public webserver access.
|
1210
|
+
|
1211
|
+
It creates the necessary VPC, S3 storage for DAGs, and an Airflow environment.
|
1212
|
+
'''
|
1213
|
+
|
1214
|
+
def __init__(
|
1215
|
+
self,
|
1216
|
+
scope: _constructs_77d1e7e8.Construct,
|
1217
|
+
id: builtins.str,
|
1218
|
+
*,
|
1219
|
+
airflow_version: builtins.str,
|
1220
|
+
environment_name: builtins.str,
|
1221
|
+
airflow_configuration_options: typing.Optional[typing.Mapping[builtins.str, typing.Any]] = None,
|
1222
|
+
bucket_name: typing.Optional[builtins.str] = None,
|
1223
|
+
deploy_options: typing.Optional[typing.Union[DagStorageDeployOptions, typing.Dict[builtins.str, typing.Any]]] = None,
|
1224
|
+
removal_policy: typing.Optional[_aws_cdk_ceddda9d.RemovalPolicy] = None,
|
1225
|
+
sizing: typing.Optional["Sizing"] = None,
|
1226
|
+
vpc: typing.Optional[_aws_cdk_aws_ec2_ceddda9d.IVpc] = None,
|
1227
|
+
) -> None:
|
1228
|
+
'''
|
1229
|
+
:param scope: -
|
1230
|
+
:param id: -
|
1231
|
+
:param airflow_version: The version of Airflow to deploy.
|
1232
|
+
:param environment_name: The name of the Airflow environment.
|
1233
|
+
:param airflow_configuration_options: Airflow configuration options as key-value pairs. These configuration options are passed to the Airflow environment.
|
1234
|
+
:param bucket_name: The name of the S3 bucket used for storing DAGs. If not provided, a default bucket is created.
|
1235
|
+
:param deploy_options: Optional DAG storage deployment options. Configures how the DAGs are deployed to the S3 bucket.
|
1236
|
+
:param removal_policy: The removal policy for the MWAA resources. Determines what happens to the resources when they are deleted. Defaults to 'RETAIN' if not specified.
|
1237
|
+
:param sizing: Optional sizing configuration for the MWAA environment. Defines the compute resources.
|
1238
|
+
:param vpc: The VPC in which to deploy the MWAA environment. If not provided, a default VPC will be created.
|
1239
|
+
'''
|
1240
|
+
if __debug__:
|
1241
|
+
type_hints = typing.get_type_hints(_typecheckingstub__5715af45a5664383ddb469b7bffe2c8a7d75c3dfe608847aae4c9fd79f034c9e)
|
1242
|
+
check_type(argname="argument scope", value=scope, expected_type=type_hints["scope"])
|
1243
|
+
check_type(argname="argument id", value=id, expected_type=type_hints["id"])
|
1244
|
+
props = MWAAProps(
|
1245
|
+
airflow_version=airflow_version,
|
1246
|
+
environment_name=environment_name,
|
1247
|
+
airflow_configuration_options=airflow_configuration_options,
|
1248
|
+
bucket_name=bucket_name,
|
1249
|
+
deploy_options=deploy_options,
|
1250
|
+
removal_policy=removal_policy,
|
1251
|
+
sizing=sizing,
|
1252
|
+
vpc=vpc,
|
1253
|
+
)
|
1254
|
+
|
1255
|
+
jsii.create(self.__class__, self, [scope, id, props])
|
1256
|
+
|
1257
|
+
|
1258
|
+
@jsii.data_type(
|
1259
|
+
jsii_type="cdk-mwaa.SecretsBackendOptions",
|
1260
|
+
jsii_struct_bases=[],
|
1261
|
+
name_mapping={
|
1262
|
+
"connections_lookup_pattern": "connectionsLookupPattern",
|
1263
|
+
"connections_prefix": "connectionsPrefix",
|
1264
|
+
"variables_lookup_pattern": "variablesLookupPattern",
|
1265
|
+
"variables_prefix": "variablesPrefix",
|
1266
|
+
},
|
1267
|
+
)
|
1268
|
+
class SecretsBackendOptions:
|
1269
|
+
def __init__(
|
1270
|
+
self,
|
1271
|
+
*,
|
1272
|
+
connections_lookup_pattern: typing.Optional[builtins.str] = None,
|
1273
|
+
connections_prefix: typing.Optional[builtins.str] = None,
|
1274
|
+
variables_lookup_pattern: typing.Optional[builtins.str] = None,
|
1275
|
+
variables_prefix: typing.Optional[builtins.str] = None,
|
1276
|
+
) -> None:
|
1277
|
+
'''Options for configuring the Secrets backend.
|
1278
|
+
|
1279
|
+
:param connections_lookup_pattern:
|
1280
|
+
:param connections_prefix:
|
1281
|
+
:param variables_lookup_pattern:
|
1282
|
+
:param variables_prefix:
|
1283
|
+
'''
|
1284
|
+
if __debug__:
|
1285
|
+
type_hints = typing.get_type_hints(_typecheckingstub__b4a26a4745b2f3c0bf73fea3716d2c2582a993bce95da0be81eb790bf091aa13)
|
1286
|
+
check_type(argname="argument connections_lookup_pattern", value=connections_lookup_pattern, expected_type=type_hints["connections_lookup_pattern"])
|
1287
|
+
check_type(argname="argument connections_prefix", value=connections_prefix, expected_type=type_hints["connections_prefix"])
|
1288
|
+
check_type(argname="argument variables_lookup_pattern", value=variables_lookup_pattern, expected_type=type_hints["variables_lookup_pattern"])
|
1289
|
+
check_type(argname="argument variables_prefix", value=variables_prefix, expected_type=type_hints["variables_prefix"])
|
1290
|
+
self._values: typing.Dict[builtins.str, typing.Any] = {}
|
1291
|
+
if connections_lookup_pattern is not None:
|
1292
|
+
self._values["connections_lookup_pattern"] = connections_lookup_pattern
|
1293
|
+
if connections_prefix is not None:
|
1294
|
+
self._values["connections_prefix"] = connections_prefix
|
1295
|
+
if variables_lookup_pattern is not None:
|
1296
|
+
self._values["variables_lookup_pattern"] = variables_lookup_pattern
|
1297
|
+
if variables_prefix is not None:
|
1298
|
+
self._values["variables_prefix"] = variables_prefix
|
1299
|
+
|
1300
|
+
@builtins.property
|
1301
|
+
def connections_lookup_pattern(self) -> typing.Optional[builtins.str]:
|
1302
|
+
result = self._values.get("connections_lookup_pattern")
|
1303
|
+
return typing.cast(typing.Optional[builtins.str], result)
|
1304
|
+
|
1305
|
+
@builtins.property
|
1306
|
+
def connections_prefix(self) -> typing.Optional[builtins.str]:
|
1307
|
+
result = self._values.get("connections_prefix")
|
1308
|
+
return typing.cast(typing.Optional[builtins.str], result)
|
1309
|
+
|
1310
|
+
@builtins.property
|
1311
|
+
def variables_lookup_pattern(self) -> typing.Optional[builtins.str]:
|
1312
|
+
result = self._values.get("variables_lookup_pattern")
|
1313
|
+
return typing.cast(typing.Optional[builtins.str], result)
|
1314
|
+
|
1315
|
+
@builtins.property
|
1316
|
+
def variables_prefix(self) -> typing.Optional[builtins.str]:
|
1317
|
+
result = self._values.get("variables_prefix")
|
1318
|
+
return typing.cast(typing.Optional[builtins.str], result)
|
1319
|
+
|
1320
|
+
def __eq__(self, rhs: typing.Any) -> builtins.bool:
|
1321
|
+
return isinstance(rhs, self.__class__) and rhs._values == self._values
|
1322
|
+
|
1323
|
+
def __ne__(self, rhs: typing.Any) -> builtins.bool:
|
1324
|
+
return not (rhs == self)
|
1325
|
+
|
1326
|
+
def __repr__(self) -> str:
|
1327
|
+
return "SecretsBackendOptions(%s)" % ", ".join(
|
1328
|
+
k + "=" + repr(v) for k, v in self._values.items()
|
1329
|
+
)
|
1330
|
+
|
1331
|
+
|
1332
|
+
class SecurityGroup(
|
1333
|
+
_aws_cdk_aws_ec2_ceddda9d.SecurityGroup,
|
1334
|
+
metaclass=jsii.JSIIMeta,
|
1335
|
+
jsii_type="cdk-mwaa.SecurityGroup",
|
1336
|
+
):
|
1337
|
+
'''A custom Security Group with a self-referencing ingress rule for MWAA.'''
|
1338
|
+
|
1339
|
+
def __init__(
|
1340
|
+
self,
|
1341
|
+
scope: _constructs_77d1e7e8.Construct,
|
1342
|
+
id: builtins.str,
|
1343
|
+
*,
|
1344
|
+
vpc: _aws_cdk_aws_ec2_ceddda9d.IVpc,
|
1345
|
+
allow_all_ipv6_outbound: typing.Optional[builtins.bool] = None,
|
1346
|
+
allow_all_outbound: typing.Optional[builtins.bool] = None,
|
1347
|
+
description: typing.Optional[builtins.str] = None,
|
1348
|
+
disable_inline_rules: typing.Optional[builtins.bool] = None,
|
1349
|
+
security_group_name: typing.Optional[builtins.str] = None,
|
1350
|
+
) -> None:
|
1351
|
+
'''Creates a new Security Group with self-referencing ingress rules.
|
1352
|
+
|
1353
|
+
:param scope: The parent construct.
|
1354
|
+
:param id: The unique identifier for this construct.
|
1355
|
+
:param vpc: The VPC in which to create the security group.
|
1356
|
+
:param allow_all_ipv6_outbound: Whether to allow all outbound ipv6 traffic by default. If this is set to true, there will only be a single egress rule which allows all outbound ipv6 traffic. If this is set to false, no outbound traffic will be allowed by default and all egress ipv6 traffic must be explicitly authorized. To allow all ipv4 traffic use allowAllOutbound Default: false
|
1357
|
+
:param allow_all_outbound: Whether to allow all outbound traffic by default. If this is set to true, there will only be a single egress rule which allows all outbound traffic. If this is set to false, no outbound traffic will be allowed by default and all egress traffic must be explicitly authorized. To allow all ipv6 traffic use allowAllIpv6Outbound Default: true
|
1358
|
+
:param description: A description of the security group. Default: The default name will be the construct's CDK path.
|
1359
|
+
:param disable_inline_rules: Whether to disable inline ingress and egress rule optimization. If this is set to true, ingress and egress rules will not be declared under the SecurityGroup in cloudformation, but will be separate elements. Inlining rules is an optimization for producing smaller stack templates. Sometimes this is not desirable, for example when security group access is managed via tags. The default value can be overridden globally by setting the context variable '@aws-cdk/aws-ec2.securityGroupDisableInlineRules'. Default: false
|
1360
|
+
:param security_group_name: The name of the security group. For valid values, see the GroupName parameter of the CreateSecurityGroup action in the Amazon EC2 API Reference. It is not recommended to use an explicit group name. Default: If you don't specify a GroupName, AWS CloudFormation generates a unique physical ID and uses that ID for the group name.
|
1361
|
+
'''
|
1362
|
+
if __debug__:
|
1363
|
+
type_hints = typing.get_type_hints(_typecheckingstub__a0c0edc0cc9086762fba282b3b093245709fb50595ba3be1a94386b8ffc61a0b)
|
1364
|
+
check_type(argname="argument scope", value=scope, expected_type=type_hints["scope"])
|
1365
|
+
check_type(argname="argument id", value=id, expected_type=type_hints["id"])
|
1366
|
+
props = SecurityGroupProps(
|
1367
|
+
vpc=vpc,
|
1368
|
+
allow_all_ipv6_outbound=allow_all_ipv6_outbound,
|
1369
|
+
allow_all_outbound=allow_all_outbound,
|
1370
|
+
description=description,
|
1371
|
+
disable_inline_rules=disable_inline_rules,
|
1372
|
+
security_group_name=security_group_name,
|
1373
|
+
)
|
1374
|
+
|
1375
|
+
jsii.create(self.__class__, self, [scope, id, props])
|
1376
|
+
|
1377
|
+
|
1378
|
+
@jsii.data_type(
|
1379
|
+
jsii_type="cdk-mwaa.SecurityGroupProps",
|
1380
|
+
jsii_struct_bases=[_aws_cdk_aws_ec2_ceddda9d.SecurityGroupProps],
|
1381
|
+
name_mapping={
|
1382
|
+
"vpc": "vpc",
|
1383
|
+
"allow_all_ipv6_outbound": "allowAllIpv6Outbound",
|
1384
|
+
"allow_all_outbound": "allowAllOutbound",
|
1385
|
+
"description": "description",
|
1386
|
+
"disable_inline_rules": "disableInlineRules",
|
1387
|
+
"security_group_name": "securityGroupName",
|
1388
|
+
},
|
1389
|
+
)
|
1390
|
+
class SecurityGroupProps(_aws_cdk_aws_ec2_ceddda9d.SecurityGroupProps):
|
1391
|
+
def __init__(
|
1392
|
+
self,
|
1393
|
+
*,
|
1394
|
+
vpc: _aws_cdk_aws_ec2_ceddda9d.IVpc,
|
1395
|
+
allow_all_ipv6_outbound: typing.Optional[builtins.bool] = None,
|
1396
|
+
allow_all_outbound: typing.Optional[builtins.bool] = None,
|
1397
|
+
description: typing.Optional[builtins.str] = None,
|
1398
|
+
disable_inline_rules: typing.Optional[builtins.bool] = None,
|
1399
|
+
security_group_name: typing.Optional[builtins.str] = None,
|
1400
|
+
) -> None:
|
1401
|
+
'''Properties for defining a Security Group.
|
1402
|
+
|
1403
|
+
:param vpc: The VPC in which to create the security group.
|
1404
|
+
:param allow_all_ipv6_outbound: Whether to allow all outbound ipv6 traffic by default. If this is set to true, there will only be a single egress rule which allows all outbound ipv6 traffic. If this is set to false, no outbound traffic will be allowed by default and all egress ipv6 traffic must be explicitly authorized. To allow all ipv4 traffic use allowAllOutbound Default: false
|
1405
|
+
:param allow_all_outbound: Whether to allow all outbound traffic by default. If this is set to true, there will only be a single egress rule which allows all outbound traffic. If this is set to false, no outbound traffic will be allowed by default and all egress traffic must be explicitly authorized. To allow all ipv6 traffic use allowAllIpv6Outbound Default: true
|
1406
|
+
:param description: A description of the security group. Default: The default name will be the construct's CDK path.
|
1407
|
+
:param disable_inline_rules: Whether to disable inline ingress and egress rule optimization. If this is set to true, ingress and egress rules will not be declared under the SecurityGroup in cloudformation, but will be separate elements. Inlining rules is an optimization for producing smaller stack templates. Sometimes this is not desirable, for example when security group access is managed via tags. The default value can be overridden globally by setting the context variable '@aws-cdk/aws-ec2.securityGroupDisableInlineRules'. Default: false
|
1408
|
+
:param security_group_name: The name of the security group. For valid values, see the GroupName parameter of the CreateSecurityGroup action in the Amazon EC2 API Reference. It is not recommended to use an explicit group name. Default: If you don't specify a GroupName, AWS CloudFormation generates a unique physical ID and uses that ID for the group name.
|
1409
|
+
'''
|
1410
|
+
if __debug__:
|
1411
|
+
type_hints = typing.get_type_hints(_typecheckingstub__0cc85564bef1cef94bed0ad8e10d0c4a5b9d253034b927359a0c50ae7fbafa03)
|
1412
|
+
check_type(argname="argument vpc", value=vpc, expected_type=type_hints["vpc"])
|
1413
|
+
check_type(argname="argument allow_all_ipv6_outbound", value=allow_all_ipv6_outbound, expected_type=type_hints["allow_all_ipv6_outbound"])
|
1414
|
+
check_type(argname="argument allow_all_outbound", value=allow_all_outbound, expected_type=type_hints["allow_all_outbound"])
|
1415
|
+
check_type(argname="argument description", value=description, expected_type=type_hints["description"])
|
1416
|
+
check_type(argname="argument disable_inline_rules", value=disable_inline_rules, expected_type=type_hints["disable_inline_rules"])
|
1417
|
+
check_type(argname="argument security_group_name", value=security_group_name, expected_type=type_hints["security_group_name"])
|
1418
|
+
self._values: typing.Dict[builtins.str, typing.Any] = {
|
1419
|
+
"vpc": vpc,
|
1420
|
+
}
|
1421
|
+
if allow_all_ipv6_outbound is not None:
|
1422
|
+
self._values["allow_all_ipv6_outbound"] = allow_all_ipv6_outbound
|
1423
|
+
if allow_all_outbound is not None:
|
1424
|
+
self._values["allow_all_outbound"] = allow_all_outbound
|
1425
|
+
if description is not None:
|
1426
|
+
self._values["description"] = description
|
1427
|
+
if disable_inline_rules is not None:
|
1428
|
+
self._values["disable_inline_rules"] = disable_inline_rules
|
1429
|
+
if security_group_name is not None:
|
1430
|
+
self._values["security_group_name"] = security_group_name
|
1431
|
+
|
1432
|
+
@builtins.property
|
1433
|
+
def vpc(self) -> _aws_cdk_aws_ec2_ceddda9d.IVpc:
|
1434
|
+
'''The VPC in which to create the security group.'''
|
1435
|
+
result = self._values.get("vpc")
|
1436
|
+
assert result is not None, "Required property 'vpc' is missing"
|
1437
|
+
return typing.cast(_aws_cdk_aws_ec2_ceddda9d.IVpc, result)
|
1438
|
+
|
1439
|
+
@builtins.property
|
1440
|
+
def allow_all_ipv6_outbound(self) -> typing.Optional[builtins.bool]:
|
1441
|
+
'''Whether to allow all outbound ipv6 traffic by default.
|
1442
|
+
|
1443
|
+
If this is set to true, there will only be a single egress rule which allows all
|
1444
|
+
outbound ipv6 traffic. If this is set to false, no outbound traffic will be allowed by
|
1445
|
+
default and all egress ipv6 traffic must be explicitly authorized.
|
1446
|
+
|
1447
|
+
To allow all ipv4 traffic use allowAllOutbound
|
1448
|
+
|
1449
|
+
:default: false
|
1450
|
+
'''
|
1451
|
+
result = self._values.get("allow_all_ipv6_outbound")
|
1452
|
+
return typing.cast(typing.Optional[builtins.bool], result)
|
1453
|
+
|
1454
|
+
@builtins.property
|
1455
|
+
def allow_all_outbound(self) -> typing.Optional[builtins.bool]:
|
1456
|
+
'''Whether to allow all outbound traffic by default.
|
1457
|
+
|
1458
|
+
If this is set to true, there will only be a single egress rule which allows all
|
1459
|
+
outbound traffic. If this is set to false, no outbound traffic will be allowed by
|
1460
|
+
default and all egress traffic must be explicitly authorized.
|
1461
|
+
|
1462
|
+
To allow all ipv6 traffic use allowAllIpv6Outbound
|
1463
|
+
|
1464
|
+
:default: true
|
1465
|
+
'''
|
1466
|
+
result = self._values.get("allow_all_outbound")
|
1467
|
+
return typing.cast(typing.Optional[builtins.bool], result)
|
1468
|
+
|
1469
|
+
@builtins.property
|
1470
|
+
def description(self) -> typing.Optional[builtins.str]:
|
1471
|
+
'''A description of the security group.
|
1472
|
+
|
1473
|
+
:default: The default name will be the construct's CDK path.
|
1474
|
+
'''
|
1475
|
+
result = self._values.get("description")
|
1476
|
+
return typing.cast(typing.Optional[builtins.str], result)
|
1477
|
+
|
1478
|
+
@builtins.property
|
1479
|
+
def disable_inline_rules(self) -> typing.Optional[builtins.bool]:
|
1480
|
+
'''Whether to disable inline ingress and egress rule optimization.
|
1481
|
+
|
1482
|
+
If this is set to true, ingress and egress rules will not be declared under the
|
1483
|
+
SecurityGroup in cloudformation, but will be separate elements.
|
1484
|
+
|
1485
|
+
Inlining rules is an optimization for producing smaller stack templates. Sometimes
|
1486
|
+
this is not desirable, for example when security group access is managed via tags.
|
1487
|
+
|
1488
|
+
The default value can be overridden globally by setting the context variable
|
1489
|
+
'@aws-cdk/aws-ec2.securityGroupDisableInlineRules'.
|
1490
|
+
|
1491
|
+
:default: false
|
1492
|
+
'''
|
1493
|
+
result = self._values.get("disable_inline_rules")
|
1494
|
+
return typing.cast(typing.Optional[builtins.bool], result)
|
1495
|
+
|
1496
|
+
@builtins.property
|
1497
|
+
def security_group_name(self) -> typing.Optional[builtins.str]:
|
1498
|
+
'''The name of the security group.
|
1499
|
+
|
1500
|
+
For valid values, see the GroupName
|
1501
|
+
parameter of the CreateSecurityGroup action in the Amazon EC2 API
|
1502
|
+
Reference.
|
1503
|
+
|
1504
|
+
It is not recommended to use an explicit group name.
|
1505
|
+
|
1506
|
+
:default:
|
1507
|
+
|
1508
|
+
If you don't specify a GroupName, AWS CloudFormation generates a
|
1509
|
+
unique physical ID and uses that ID for the group name.
|
1510
|
+
'''
|
1511
|
+
result = self._values.get("security_group_name")
|
1512
|
+
return typing.cast(typing.Optional[builtins.str], result)
|
1513
|
+
|
1514
|
+
def __eq__(self, rhs: typing.Any) -> builtins.bool:
|
1515
|
+
return isinstance(rhs, self.__class__) and rhs._values == self._values
|
1516
|
+
|
1517
|
+
def __ne__(self, rhs: typing.Any) -> builtins.bool:
|
1518
|
+
return not (rhs == self)
|
1519
|
+
|
1520
|
+
def __repr__(self) -> str:
|
1521
|
+
return "SecurityGroupProps(%s)" % ", ".join(
|
1522
|
+
k + "=" + repr(v) for k, v in self._values.items()
|
1523
|
+
)
|
1524
|
+
|
1525
|
+
|
1526
|
+
class Sizing(metaclass=jsii.JSIIMeta, jsii_type="cdk-mwaa.Sizing"):
|
1527
|
+
'''Provides predefined and customizable sizing options for an MWAA environment.'''
|
1528
|
+
|
1529
|
+
@jsii.member(jsii_name="custom")
|
1530
|
+
@builtins.classmethod
|
1531
|
+
def custom(
|
1532
|
+
cls,
|
1533
|
+
*,
|
1534
|
+
environment_class: EnvironmentClass,
|
1535
|
+
max_webservers: jsii.Number,
|
1536
|
+
max_workers: jsii.Number,
|
1537
|
+
min_webservers: jsii.Number,
|
1538
|
+
min_workers: jsii.Number,
|
1539
|
+
schedulers: jsii.Number,
|
1540
|
+
) -> "Sizing":
|
1541
|
+
'''Creates a custom-sized MWAA environment based on user-defined configuration.
|
1542
|
+
|
1543
|
+
:param environment_class: The environment class determining the available resources.
|
1544
|
+
:param max_webservers: Maximum number of webservers in the MWAA environment.
|
1545
|
+
:param max_workers: Maximum number of workers in the MWAA environment.
|
1546
|
+
:param min_webservers: Minimum number of webservers in the MWAA environment.
|
1547
|
+
:param min_workers: Minimum number of workers in the MWAA environment.
|
1548
|
+
:param schedulers: Number of schedulers in the MWAA environment.
|
1549
|
+
'''
|
1550
|
+
config = SizingProps(
|
1551
|
+
environment_class=environment_class,
|
1552
|
+
max_webservers=max_webservers,
|
1553
|
+
max_workers=max_workers,
|
1554
|
+
min_webservers=min_webservers,
|
1555
|
+
min_workers=min_workers,
|
1556
|
+
schedulers=schedulers,
|
1557
|
+
)
|
1558
|
+
|
1559
|
+
return typing.cast("Sizing", jsii.sinvoke(cls, "custom", [config]))
|
1560
|
+
|
1561
|
+
@jsii.member(jsii_name="mw1Large")
|
1562
|
+
@builtins.classmethod
|
1563
|
+
def mw1_large(cls) -> "Sizing":
|
1564
|
+
'''Creates an MW1_LARGE sized environment with a predefined range of workers and webservers.'''
|
1565
|
+
return typing.cast("Sizing", jsii.sinvoke(cls, "mw1Large", []))
|
1566
|
+
|
1567
|
+
@jsii.member(jsii_name="mw1Medium")
|
1568
|
+
@builtins.classmethod
|
1569
|
+
def mw1_medium(cls) -> "Sizing":
|
1570
|
+
'''Creates an MW1_MEDIUM sized environment with a predefined range of workers and webservers.'''
|
1571
|
+
return typing.cast("Sizing", jsii.sinvoke(cls, "mw1Medium", []))
|
1572
|
+
|
1573
|
+
@jsii.member(jsii_name="mw1Micro")
|
1574
|
+
@builtins.classmethod
|
1575
|
+
def mw1_micro(cls) -> "Sizing":
|
1576
|
+
'''Creates an MW1_MICRO sized environment with a single worker, webserver, and scheduler.'''
|
1577
|
+
return typing.cast("Sizing", jsii.sinvoke(cls, "mw1Micro", []))
|
1578
|
+
|
1579
|
+
@jsii.member(jsii_name="mw1Small")
|
1580
|
+
@builtins.classmethod
|
1581
|
+
def mw1_small(cls) -> "Sizing":
|
1582
|
+
'''Creates an MW1_SMALL sized environment with a predefined range of workers and webservers.'''
|
1583
|
+
return typing.cast("Sizing", jsii.sinvoke(cls, "mw1Small", []))
|
1584
|
+
|
1585
|
+
@builtins.property
|
1586
|
+
@jsii.member(jsii_name="environmentClass")
|
1587
|
+
def environment_class(self) -> EnvironmentClass:
|
1588
|
+
'''Returns the environment class.'''
|
1589
|
+
return typing.cast(EnvironmentClass, jsii.get(self, "environmentClass"))
|
1590
|
+
|
1591
|
+
@builtins.property
|
1592
|
+
@jsii.member(jsii_name="maxWebservers")
|
1593
|
+
def max_webservers(self) -> jsii.Number:
|
1594
|
+
'''Returns the maximum number of webservers.'''
|
1595
|
+
return typing.cast(jsii.Number, jsii.get(self, "maxWebservers"))
|
1596
|
+
|
1597
|
+
@builtins.property
|
1598
|
+
@jsii.member(jsii_name="maxWorkers")
|
1599
|
+
def max_workers(self) -> jsii.Number:
|
1600
|
+
'''Returns the maximum number of workers.'''
|
1601
|
+
return typing.cast(jsii.Number, jsii.get(self, "maxWorkers"))
|
1602
|
+
|
1603
|
+
@builtins.property
|
1604
|
+
@jsii.member(jsii_name="minWebservers")
|
1605
|
+
def min_webservers(self) -> jsii.Number:
|
1606
|
+
'''Returns the minimum number of webservers.'''
|
1607
|
+
return typing.cast(jsii.Number, jsii.get(self, "minWebservers"))
|
1608
|
+
|
1609
|
+
@builtins.property
|
1610
|
+
@jsii.member(jsii_name="minWorkers")
|
1611
|
+
def min_workers(self) -> jsii.Number:
|
1612
|
+
'''Returns the minimum number of workers.'''
|
1613
|
+
return typing.cast(jsii.Number, jsii.get(self, "minWorkers"))
|
1614
|
+
|
1615
|
+
@builtins.property
|
1616
|
+
@jsii.member(jsii_name="schedulers")
|
1617
|
+
def schedulers(self) -> jsii.Number:
|
1618
|
+
'''Returns the number of schedulers.'''
|
1619
|
+
return typing.cast(jsii.Number, jsii.get(self, "schedulers"))
|
1620
|
+
|
1621
|
+
|
1622
|
+
@jsii.data_type(
|
1623
|
+
jsii_type="cdk-mwaa.SizingProps",
|
1624
|
+
jsii_struct_bases=[],
|
1625
|
+
name_mapping={
|
1626
|
+
"environment_class": "environmentClass",
|
1627
|
+
"max_webservers": "maxWebservers",
|
1628
|
+
"max_workers": "maxWorkers",
|
1629
|
+
"min_webservers": "minWebservers",
|
1630
|
+
"min_workers": "minWorkers",
|
1631
|
+
"schedulers": "schedulers",
|
1632
|
+
},
|
1633
|
+
)
|
1634
|
+
class SizingProps:
|
1635
|
+
def __init__(
|
1636
|
+
self,
|
1637
|
+
*,
|
1638
|
+
environment_class: EnvironmentClass,
|
1639
|
+
max_webservers: jsii.Number,
|
1640
|
+
max_workers: jsii.Number,
|
1641
|
+
min_webservers: jsii.Number,
|
1642
|
+
min_workers: jsii.Number,
|
1643
|
+
schedulers: jsii.Number,
|
1644
|
+
) -> None:
|
1645
|
+
'''Defines the configuration properties for sizing an MWAA environment.
|
1646
|
+
|
1647
|
+
:param environment_class: The environment class determining the available resources.
|
1648
|
+
:param max_webservers: Maximum number of webservers in the MWAA environment.
|
1649
|
+
:param max_workers: Maximum number of workers in the MWAA environment.
|
1650
|
+
:param min_webservers: Minimum number of webservers in the MWAA environment.
|
1651
|
+
:param min_workers: Minimum number of workers in the MWAA environment.
|
1652
|
+
:param schedulers: Number of schedulers in the MWAA environment.
|
1653
|
+
'''
|
1654
|
+
if __debug__:
|
1655
|
+
type_hints = typing.get_type_hints(_typecheckingstub__379e3b2e8fe393bf82766c342457e207198846f531bd3cef817a10a9a171a08d)
|
1656
|
+
check_type(argname="argument environment_class", value=environment_class, expected_type=type_hints["environment_class"])
|
1657
|
+
check_type(argname="argument max_webservers", value=max_webservers, expected_type=type_hints["max_webservers"])
|
1658
|
+
check_type(argname="argument max_workers", value=max_workers, expected_type=type_hints["max_workers"])
|
1659
|
+
check_type(argname="argument min_webservers", value=min_webservers, expected_type=type_hints["min_webservers"])
|
1660
|
+
check_type(argname="argument min_workers", value=min_workers, expected_type=type_hints["min_workers"])
|
1661
|
+
check_type(argname="argument schedulers", value=schedulers, expected_type=type_hints["schedulers"])
|
1662
|
+
self._values: typing.Dict[builtins.str, typing.Any] = {
|
1663
|
+
"environment_class": environment_class,
|
1664
|
+
"max_webservers": max_webservers,
|
1665
|
+
"max_workers": max_workers,
|
1666
|
+
"min_webservers": min_webservers,
|
1667
|
+
"min_workers": min_workers,
|
1668
|
+
"schedulers": schedulers,
|
1669
|
+
}
|
1670
|
+
|
1671
|
+
@builtins.property
|
1672
|
+
def environment_class(self) -> EnvironmentClass:
|
1673
|
+
'''The environment class determining the available resources.'''
|
1674
|
+
result = self._values.get("environment_class")
|
1675
|
+
assert result is not None, "Required property 'environment_class' is missing"
|
1676
|
+
return typing.cast(EnvironmentClass, result)
|
1677
|
+
|
1678
|
+
@builtins.property
|
1679
|
+
def max_webservers(self) -> jsii.Number:
|
1680
|
+
'''Maximum number of webservers in the MWAA environment.'''
|
1681
|
+
result = self._values.get("max_webservers")
|
1682
|
+
assert result is not None, "Required property 'max_webservers' is missing"
|
1683
|
+
return typing.cast(jsii.Number, result)
|
1684
|
+
|
1685
|
+
@builtins.property
|
1686
|
+
def max_workers(self) -> jsii.Number:
|
1687
|
+
'''Maximum number of workers in the MWAA environment.'''
|
1688
|
+
result = self._values.get("max_workers")
|
1689
|
+
assert result is not None, "Required property 'max_workers' is missing"
|
1690
|
+
return typing.cast(jsii.Number, result)
|
1691
|
+
|
1692
|
+
@builtins.property
|
1693
|
+
def min_webservers(self) -> jsii.Number:
|
1694
|
+
'''Minimum number of webservers in the MWAA environment.'''
|
1695
|
+
result = self._values.get("min_webservers")
|
1696
|
+
assert result is not None, "Required property 'min_webservers' is missing"
|
1697
|
+
return typing.cast(jsii.Number, result)
|
1698
|
+
|
1699
|
+
@builtins.property
|
1700
|
+
def min_workers(self) -> jsii.Number:
|
1701
|
+
'''Minimum number of workers in the MWAA environment.'''
|
1702
|
+
result = self._values.get("min_workers")
|
1703
|
+
assert result is not None, "Required property 'min_workers' is missing"
|
1704
|
+
return typing.cast(jsii.Number, result)
|
1705
|
+
|
1706
|
+
@builtins.property
|
1707
|
+
def schedulers(self) -> jsii.Number:
|
1708
|
+
'''Number of schedulers in the MWAA environment.'''
|
1709
|
+
result = self._values.get("schedulers")
|
1710
|
+
assert result is not None, "Required property 'schedulers' is missing"
|
1711
|
+
return typing.cast(jsii.Number, result)
|
1712
|
+
|
1713
|
+
def __eq__(self, rhs: typing.Any) -> builtins.bool:
|
1714
|
+
return isinstance(rhs, self.__class__) and rhs._values == self._values
|
1715
|
+
|
1716
|
+
def __ne__(self, rhs: typing.Any) -> builtins.bool:
|
1717
|
+
return not (rhs == self)
|
1718
|
+
|
1719
|
+
def __repr__(self) -> str:
|
1720
|
+
return "SizingProps(%s)" % ", ".join(
|
1721
|
+
k + "=" + repr(v) for k, v in self._values.items()
|
1722
|
+
)
|
1723
|
+
|
1724
|
+
|
1725
|
+
@jsii.enum(jsii_type="cdk-mwaa.WebserverAccessMode")
|
1726
|
+
class WebserverAccessMode(enum.Enum):
|
1727
|
+
'''Enum for the webserver access mode of the MWAA environment.'''
|
1728
|
+
|
1729
|
+
PRIVATE_ONLY = "PRIVATE_ONLY"
|
1730
|
+
PUBLIC_ONLY = "PUBLIC_ONLY"
|
1731
|
+
|
1732
|
+
|
1733
|
+
__all__ = [
|
1734
|
+
"DagStorage",
|
1735
|
+
"DagStorageConfigOptions",
|
1736
|
+
"DagStorageDeployOptions",
|
1737
|
+
"DagStorageProps",
|
1738
|
+
"EmailBackendOptions",
|
1739
|
+
"EndpointManagement",
|
1740
|
+
"Environment",
|
1741
|
+
"EnvironmentClass",
|
1742
|
+
"EnvironmentProps",
|
1743
|
+
"LogLevel",
|
1744
|
+
"LoggingConfiguration",
|
1745
|
+
"LoggingConfigurationProperty",
|
1746
|
+
"MWAAProps",
|
1747
|
+
"PublicRoutingMWAA",
|
1748
|
+
"SecretsBackendOptions",
|
1749
|
+
"SecurityGroup",
|
1750
|
+
"SecurityGroupProps",
|
1751
|
+
"Sizing",
|
1752
|
+
"SizingProps",
|
1753
|
+
"WebserverAccessMode",
|
1754
|
+
]
|
1755
|
+
|
1756
|
+
publication.publish()
|
1757
|
+
|
1758
|
+
def _typecheckingstub__95a166027e8ebcfead2708b1c3388e60862a4fb6d86763bf56854f275bdd2390(
|
1759
|
+
scope: _constructs_77d1e7e8.Construct,
|
1760
|
+
id: builtins.str,
|
1761
|
+
*,
|
1762
|
+
bucket_name: typing.Optional[builtins.str] = None,
|
1763
|
+
dag_s3_path: typing.Optional[builtins.str] = None,
|
1764
|
+
deploy_options: typing.Optional[typing.Union[DagStorageDeployOptions, typing.Dict[builtins.str, typing.Any]]] = None,
|
1765
|
+
noncurrent_version_expiration: typing.Optional[_aws_cdk_ceddda9d.Duration] = None,
|
1766
|
+
plugins_config: typing.Optional[typing.Union[DagStorageConfigOptions, typing.Dict[builtins.str, typing.Any]]] = None,
|
1767
|
+
removal_policy: typing.Optional[_aws_cdk_ceddda9d.RemovalPolicy] = None,
|
1768
|
+
requirements_config: typing.Optional[typing.Union[DagStorageConfigOptions, typing.Dict[builtins.str, typing.Any]]] = None,
|
1769
|
+
startup_script_config: typing.Optional[typing.Union[DagStorageConfigOptions, typing.Dict[builtins.str, typing.Any]]] = None,
|
1770
|
+
versioned: typing.Optional[builtins.bool] = None,
|
1771
|
+
) -> None:
|
1772
|
+
"""Type checking stubs"""
|
1773
|
+
pass
|
1774
|
+
|
1775
|
+
def _typecheckingstub__85a9b5242a26a2093aa8052dd8b86bea06801d5a767c2e5f908776c3f849eb63(
|
1776
|
+
*,
|
1777
|
+
s3_path: builtins.str,
|
1778
|
+
s3_object_version: typing.Optional[builtins.str] = None,
|
1779
|
+
) -> None:
|
1780
|
+
"""Type checking stubs"""
|
1781
|
+
pass
|
1782
|
+
|
1783
|
+
def _typecheckingstub__c4eb47db99cbba877092424afc09de8c308a38be2c61e698dd0c28933b9c3b42(
|
1784
|
+
*,
|
1785
|
+
prune: typing.Optional[builtins.bool] = None,
|
1786
|
+
retain_on_delete: typing.Optional[builtins.bool] = None,
|
1787
|
+
sources: typing.Optional[typing.Sequence[_aws_cdk_aws_s3_deployment_ceddda9d.ISource]] = None,
|
1788
|
+
) -> None:
|
1789
|
+
"""Type checking stubs"""
|
1790
|
+
pass
|
1791
|
+
|
1792
|
+
def _typecheckingstub__6a4bace9647a9566f3af4198e17ef015306e92a6d5f673b579ba6fdfcb5231da(
|
1793
|
+
*,
|
1794
|
+
bucket_name: typing.Optional[builtins.str] = None,
|
1795
|
+
dag_s3_path: typing.Optional[builtins.str] = None,
|
1796
|
+
deploy_options: typing.Optional[typing.Union[DagStorageDeployOptions, typing.Dict[builtins.str, typing.Any]]] = None,
|
1797
|
+
noncurrent_version_expiration: typing.Optional[_aws_cdk_ceddda9d.Duration] = None,
|
1798
|
+
plugins_config: typing.Optional[typing.Union[DagStorageConfigOptions, typing.Dict[builtins.str, typing.Any]]] = None,
|
1799
|
+
removal_policy: typing.Optional[_aws_cdk_ceddda9d.RemovalPolicy] = None,
|
1800
|
+
requirements_config: typing.Optional[typing.Union[DagStorageConfigOptions, typing.Dict[builtins.str, typing.Any]]] = None,
|
1801
|
+
startup_script_config: typing.Optional[typing.Union[DagStorageConfigOptions, typing.Dict[builtins.str, typing.Any]]] = None,
|
1802
|
+
versioned: typing.Optional[builtins.bool] = None,
|
1803
|
+
) -> None:
|
1804
|
+
"""Type checking stubs"""
|
1805
|
+
pass
|
1806
|
+
|
1807
|
+
def _typecheckingstub__73e90f0cf9b9873d2646653b49d16d81a04d7e328760c253beb412d5e74258d3(
|
1808
|
+
*,
|
1809
|
+
from_email: builtins.str,
|
1810
|
+
conn_id: typing.Optional[builtins.str] = None,
|
1811
|
+
) -> None:
|
1812
|
+
"""Type checking stubs"""
|
1813
|
+
pass
|
1814
|
+
|
1815
|
+
def _typecheckingstub__ebc587b767dfc724460675574ff2adf5d781edef0bcce6da7e68d76012bd53c2(
|
1816
|
+
scope: _constructs_77d1e7e8.Construct,
|
1817
|
+
id: builtins.str,
|
1818
|
+
*,
|
1819
|
+
airflow_version: builtins.str,
|
1820
|
+
dag_storage: DagStorage,
|
1821
|
+
environment_name: builtins.str,
|
1822
|
+
sizing: Sizing,
|
1823
|
+
vpc: _aws_cdk_aws_ec2_ceddda9d.IVpc,
|
1824
|
+
airflow_configuration_options: typing.Optional[typing.Mapping[builtins.str, typing.Any]] = None,
|
1825
|
+
endpoint_management: typing.Optional[EndpointManagement] = None,
|
1826
|
+
kms_key: typing.Optional[_aws_cdk_aws_kms_ceddda9d.IKey] = None,
|
1827
|
+
logging_configuration: typing.Optional[typing.Union[LoggingConfiguration, typing.Dict[builtins.str, typing.Any]]] = None,
|
1828
|
+
security_groups: typing.Optional[typing.Sequence[_aws_cdk_aws_ec2_ceddda9d.ISecurityGroup]] = None,
|
1829
|
+
tags: typing.Optional[typing.Mapping[builtins.str, builtins.str]] = None,
|
1830
|
+
webserver_access_mode: typing.Optional[WebserverAccessMode] = None,
|
1831
|
+
weekly_maintenance_window_start: typing.Optional[builtins.str] = None,
|
1832
|
+
) -> None:
|
1833
|
+
"""Type checking stubs"""
|
1834
|
+
pass
|
1835
|
+
|
1836
|
+
def _typecheckingstub__e0979be1ca1dd29bc506f750b97db2634a5864c9d6ab41e834a41ad36343c373(
|
1837
|
+
statement: _aws_cdk_aws_iam_ceddda9d.PolicyStatement,
|
1838
|
+
) -> None:
|
1839
|
+
"""Type checking stubs"""
|
1840
|
+
pass
|
1841
|
+
|
1842
|
+
def _typecheckingstub__d58cfc6f1183850b5b51999d54a17bf62c6f7b5c3c75133b721818d02e12a9b8(
|
1843
|
+
*,
|
1844
|
+
airflow_version: builtins.str,
|
1845
|
+
dag_storage: DagStorage,
|
1846
|
+
environment_name: builtins.str,
|
1847
|
+
sizing: Sizing,
|
1848
|
+
vpc: _aws_cdk_aws_ec2_ceddda9d.IVpc,
|
1849
|
+
airflow_configuration_options: typing.Optional[typing.Mapping[builtins.str, typing.Any]] = None,
|
1850
|
+
endpoint_management: typing.Optional[EndpointManagement] = None,
|
1851
|
+
kms_key: typing.Optional[_aws_cdk_aws_kms_ceddda9d.IKey] = None,
|
1852
|
+
logging_configuration: typing.Optional[typing.Union[LoggingConfiguration, typing.Dict[builtins.str, typing.Any]]] = None,
|
1853
|
+
security_groups: typing.Optional[typing.Sequence[_aws_cdk_aws_ec2_ceddda9d.ISecurityGroup]] = None,
|
1854
|
+
tags: typing.Optional[typing.Mapping[builtins.str, builtins.str]] = None,
|
1855
|
+
webserver_access_mode: typing.Optional[WebserverAccessMode] = None,
|
1856
|
+
weekly_maintenance_window_start: typing.Optional[builtins.str] = None,
|
1857
|
+
) -> None:
|
1858
|
+
"""Type checking stubs"""
|
1859
|
+
pass
|
1860
|
+
|
1861
|
+
def _typecheckingstub__5e2c2b7229af680332026a2523648e1c7f223df1a7e4c0c75768ae0221551c16(
|
1862
|
+
*,
|
1863
|
+
dag_processing_logs: typing.Optional[typing.Union[LoggingConfigurationProperty, typing.Dict[builtins.str, typing.Any]]] = None,
|
1864
|
+
scheduler_logs: typing.Optional[typing.Union[LoggingConfigurationProperty, typing.Dict[builtins.str, typing.Any]]] = None,
|
1865
|
+
task_logs: typing.Optional[typing.Union[LoggingConfigurationProperty, typing.Dict[builtins.str, typing.Any]]] = None,
|
1866
|
+
webserver_logs: typing.Optional[typing.Union[LoggingConfigurationProperty, typing.Dict[builtins.str, typing.Any]]] = None,
|
1867
|
+
worker_logs: typing.Optional[typing.Union[LoggingConfigurationProperty, typing.Dict[builtins.str, typing.Any]]] = None,
|
1868
|
+
) -> None:
|
1869
|
+
"""Type checking stubs"""
|
1870
|
+
pass
|
1871
|
+
|
1872
|
+
def _typecheckingstub__36e478654aa87904502c267bca96d1a7c0ca8f8e5e749464cb92a7cd1fd2c4b0(
|
1873
|
+
*,
|
1874
|
+
enabled: typing.Optional[builtins.bool] = None,
|
1875
|
+
log_level: typing.Optional[LogLevel] = None,
|
1876
|
+
) -> None:
|
1877
|
+
"""Type checking stubs"""
|
1878
|
+
pass
|
1879
|
+
|
1880
|
+
def _typecheckingstub__e73d818937427f32bb22179ff7d13eb6aa0201131959780924f6ec21b94dd128(
|
1881
|
+
*,
|
1882
|
+
airflow_version: builtins.str,
|
1883
|
+
environment_name: builtins.str,
|
1884
|
+
airflow_configuration_options: typing.Optional[typing.Mapping[builtins.str, typing.Any]] = None,
|
1885
|
+
bucket_name: typing.Optional[builtins.str] = None,
|
1886
|
+
deploy_options: typing.Optional[typing.Union[DagStorageDeployOptions, typing.Dict[builtins.str, typing.Any]]] = None,
|
1887
|
+
removal_policy: typing.Optional[_aws_cdk_ceddda9d.RemovalPolicy] = None,
|
1888
|
+
sizing: typing.Optional[Sizing] = None,
|
1889
|
+
vpc: typing.Optional[_aws_cdk_aws_ec2_ceddda9d.IVpc] = None,
|
1890
|
+
) -> None:
|
1891
|
+
"""Type checking stubs"""
|
1892
|
+
pass
|
1893
|
+
|
1894
|
+
def _typecheckingstub__5715af45a5664383ddb469b7bffe2c8a7d75c3dfe608847aae4c9fd79f034c9e(
|
1895
|
+
scope: _constructs_77d1e7e8.Construct,
|
1896
|
+
id: builtins.str,
|
1897
|
+
*,
|
1898
|
+
airflow_version: builtins.str,
|
1899
|
+
environment_name: builtins.str,
|
1900
|
+
airflow_configuration_options: typing.Optional[typing.Mapping[builtins.str, typing.Any]] = None,
|
1901
|
+
bucket_name: typing.Optional[builtins.str] = None,
|
1902
|
+
deploy_options: typing.Optional[typing.Union[DagStorageDeployOptions, typing.Dict[builtins.str, typing.Any]]] = None,
|
1903
|
+
removal_policy: typing.Optional[_aws_cdk_ceddda9d.RemovalPolicy] = None,
|
1904
|
+
sizing: typing.Optional[Sizing] = None,
|
1905
|
+
vpc: typing.Optional[_aws_cdk_aws_ec2_ceddda9d.IVpc] = None,
|
1906
|
+
) -> None:
|
1907
|
+
"""Type checking stubs"""
|
1908
|
+
pass
|
1909
|
+
|
1910
|
+
def _typecheckingstub__b4a26a4745b2f3c0bf73fea3716d2c2582a993bce95da0be81eb790bf091aa13(
|
1911
|
+
*,
|
1912
|
+
connections_lookup_pattern: typing.Optional[builtins.str] = None,
|
1913
|
+
connections_prefix: typing.Optional[builtins.str] = None,
|
1914
|
+
variables_lookup_pattern: typing.Optional[builtins.str] = None,
|
1915
|
+
variables_prefix: typing.Optional[builtins.str] = None,
|
1916
|
+
) -> None:
|
1917
|
+
"""Type checking stubs"""
|
1918
|
+
pass
|
1919
|
+
|
1920
|
+
def _typecheckingstub__a0c0edc0cc9086762fba282b3b093245709fb50595ba3be1a94386b8ffc61a0b(
|
1921
|
+
scope: _constructs_77d1e7e8.Construct,
|
1922
|
+
id: builtins.str,
|
1923
|
+
*,
|
1924
|
+
vpc: _aws_cdk_aws_ec2_ceddda9d.IVpc,
|
1925
|
+
allow_all_ipv6_outbound: typing.Optional[builtins.bool] = None,
|
1926
|
+
allow_all_outbound: typing.Optional[builtins.bool] = None,
|
1927
|
+
description: typing.Optional[builtins.str] = None,
|
1928
|
+
disable_inline_rules: typing.Optional[builtins.bool] = None,
|
1929
|
+
security_group_name: typing.Optional[builtins.str] = None,
|
1930
|
+
) -> None:
|
1931
|
+
"""Type checking stubs"""
|
1932
|
+
pass
|
1933
|
+
|
1934
|
+
def _typecheckingstub__0cc85564bef1cef94bed0ad8e10d0c4a5b9d253034b927359a0c50ae7fbafa03(
|
1935
|
+
*,
|
1936
|
+
vpc: _aws_cdk_aws_ec2_ceddda9d.IVpc,
|
1937
|
+
allow_all_ipv6_outbound: typing.Optional[builtins.bool] = None,
|
1938
|
+
allow_all_outbound: typing.Optional[builtins.bool] = None,
|
1939
|
+
description: typing.Optional[builtins.str] = None,
|
1940
|
+
disable_inline_rules: typing.Optional[builtins.bool] = None,
|
1941
|
+
security_group_name: typing.Optional[builtins.str] = None,
|
1942
|
+
) -> None:
|
1943
|
+
"""Type checking stubs"""
|
1944
|
+
pass
|
1945
|
+
|
1946
|
+
def _typecheckingstub__379e3b2e8fe393bf82766c342457e207198846f531bd3cef817a10a9a171a08d(
|
1947
|
+
*,
|
1948
|
+
environment_class: EnvironmentClass,
|
1949
|
+
max_webservers: jsii.Number,
|
1950
|
+
max_workers: jsii.Number,
|
1951
|
+
min_webservers: jsii.Number,
|
1952
|
+
min_workers: jsii.Number,
|
1953
|
+
schedulers: jsii.Number,
|
1954
|
+
) -> None:
|
1955
|
+
"""Type checking stubs"""
|
1956
|
+
pass
|