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 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