Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 3 additions & 4 deletions usecases/mwaa-with-codeartifact/app.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
#!/usr/bin/env python3
import os

from aws_cdk import core as cdk
from aws_cdk import core
import aws_cdk as cdk

from infra.vpc_stack import VpcStack
from infra.codeartifact_stack import CodeArtifactStack
Expand All @@ -11,8 +10,8 @@
from infra.mwaa_stack import MwaaStack


app = core.App()
env = core.Environment(region=os.environ.get("AWS_REGION"))
app = cdk.App()
env = cdk.Environment(region=os.environ.get("AWS_REGION"))

vpc = VpcStack(app, "VpcStack", env=env)
ca = CodeArtifactStack(app, "CodeArtifactStack", env=env)
Expand Down
4 changes: 1 addition & 3 deletions usecases/mwaa-with-codeartifact/cdk.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,13 @@
"app": "python3 app.py",
"context": {
"@aws-cdk/aws-apigateway:usagePlanKeyOrderInsensitiveId": true,
"@aws-cdk/core:enableStackNameDuplicates": "true",
"aws-cdk:enableDiffNoFail": "true",
"@aws-cdk/core:stackRelativeExports": "true",
"@aws-cdk/aws-ecr-assets:dockerIgnoreSupport": true,
"@aws-cdk/aws-secretsmanager:parseOwnedSecretName": true,
"@aws-cdk/aws-kms:defaultKeyPolicies": true,
"@aws-cdk/aws-s3:grantWriteWithoutAcl": true,
"@aws-cdk/aws-ecs-patterns:removeDefaultDesiredCount": true,
"@aws-cdk/aws-rds:lowercaseDbIdentifier": true,
"@aws-cdk/aws-efs:defaultEncryptionAtRest": true
}
}
}
11 changes: 6 additions & 5 deletions usecases/mwaa-with-codeartifact/infra/codeartifact_stack.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
from aws_cdk import core
from aws_cdk import Resource, Stack
import aws_cdk.aws_codeartifact as codeartifact
from constructs import Construct


class CodeArtifactStack(core.Stack):
def __init__(self, scope: core.Construct, id: str, **kwargs) -> None:
class CodeArtifactStack(Stack):
def __init__(self, scope: Construct, id: str, **kwargs) -> None:
super().__init__(scope, id, **kwargs)

ca_domain = codeartifact.CfnDomain(
Expand All @@ -17,8 +18,8 @@ def __init__(self, scope: core.Construct, id: str, **kwargs) -> None:
external_connections=["public:pypi"],
description="This is demo repo for MWAA.",
)
self._repo.add_depends_on(ca_domain)
self._repo.add_dependency(ca_domain)

@property
def repo(self) -> core.Resource:
def repo(self) -> Resource:
return self._repo
15 changes: 9 additions & 6 deletions usecases/mwaa-with-codeartifact/infra/lambda_cron_stack.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,20 @@
aws_lambda as lambda_,
aws_events_targets as targets,
aws_iam as iam,
core,
CustomResource,
Duration,
Stack,
)
from constructs import Construct

from infra.codeartifact_stack import CodeArtifactStack
from infra.s3_stack import S3Stack


class LambdaCronStack(core.Stack):
class LambdaCronStack(Stack):
def __init__(
self,
scope: core.Construct,
scope: Construct,
id: str,
ca: CodeArtifactStack,
s3: S3Stack,
Expand Down Expand Up @@ -49,7 +52,7 @@ def __init__(
"MWAA-UpdateCodeArtifactIndexURL",
code=lambda_.InlineCode(handler_code),
handler="index.handler",
timeout=core.Duration.seconds(300),
timeout=Duration.seconds(300),
runtime=lambda_.Runtime.PYTHON_3_7,
environment={
"CA_DOMAIN": ca.repo.domain_name,
Expand All @@ -67,10 +70,10 @@ def __init__(
rule = events.Rule(
self,
"Rule",
schedule=events.Schedule.rate(core.Duration.hours(10)),
schedule=events.Schedule.rate(Duration.hours(10)),
enabled=True,
)
rule.add_target(targets.LambdaFunction(lambda_fn))

# Invoke Lambda once after cdk deploy
core.CustomResource(self, "InvokeLambda", service_token=lambda_fn.function_arn)
CustomResource(self, "InvokeLambda", service_token=lambda_fn.function_arn)
9 changes: 5 additions & 4 deletions usecases/mwaa-with-codeartifact/infra/mwaa_stack.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
import os

from aws_cdk import aws_mwaa as mwaa, aws_iam as iam, core
from aws_cdk import aws_mwaa as mwaa, aws_iam as iam, CfnJson, Stack
from constructs import Construct
from infra.s3_stack import S3Stack
from infra.vpc_stack import VpcStack


class MwaaStack(core.Stack):
class MwaaStack(Stack):
def __init__(
self, scope: core.Construct, id: str, vpc: VpcStack, s3: S3Stack, **kwargs
self, scope: Construct, id: str, vpc: VpcStack, s3: S3Stack, **kwargs
) -> None:
super().__init__(scope, id, **kwargs)

Expand Down Expand Up @@ -94,7 +95,7 @@ def __init__(
effect=iam.Effect.ALLOW,
)
)
string_like = core.CfnJson(
string_like = CfnJson(
self,
"ConditionJson",
value={f"kms:ViaService": f"sqs.{self.region}.amazonaws.com"},
Expand Down
11 changes: 6 additions & 5 deletions usecases/mwaa-with-codeartifact/infra/s3_stack.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
import os
import secrets

from aws_cdk import aws_s3 as s3, core
from aws_cdk import aws_s3 as s3, RemovalPolicy, Resource, Stack
from aws_cdk import aws_s3_deployment as s3_deploy
from constructs import Construct


class S3Stack(core.Stack):
def __init__(self, scope: core.Construct, id: str, **kwargs) -> None:
class S3Stack(Stack):
def __init__(self, scope: Construct, id: str, **kwargs) -> None:
super().__init__(scope, id, **kwargs)

rand_int = secrets.randbelow(1000001)
Expand All @@ -15,7 +16,7 @@ def __init__(self, scope: core.Construct, id: str, **kwargs) -> None:
"mwaa-ca-bucket",
bucket_name=os.environ.get("BUCKET_NAME", f"mwaa-ca-{rand_int}"),
block_public_access=s3.BlockPublicAccess.BLOCK_ALL,
removal_policy=core.RemovalPolicy.DESTROY,
removal_policy=RemovalPolicy.DESTROY,
auto_delete_objects=True,
versioned=True,
)
Expand All @@ -30,5 +31,5 @@ def __init__(self, scope: core.Construct, id: str, **kwargs) -> None:
)

@property
def instance(self) -> core.Resource:
def instance(self) -> Resource:
return self._instance
33 changes: 20 additions & 13 deletions usecases/mwaa-with-codeartifact/infra/vpc_stack.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,17 @@
from aws_cdk import core, aws_ec2 as ec2
from aws_cdk import aws_ec2 as ec2, CfnOutput, Resource, Stack, Tags
from constructs import Construct
from typing import List


class VpcStack(core.Stack):
def __init__(self, scope: core.Construct, id: str, **kwargs) -> None:
class VpcStack(Stack):
def __init__(self, scope: Construct, id: str, **kwargs) -> None:
super().__init__(scope, id, **kwargs)

self._instance = ec2.Vpc(
self,
"mwaa-vpc",
max_azs=2,
cidr="10.0.0.0/16",
ip_addresses=ec2.IpAddresses.cidr("10.0.0.0/16"),
subnet_configuration=self.subnets,
enable_dns_hostnames=True,
enable_dns_support=True,
Expand All @@ -19,23 +20,25 @@ def __init__(self, scope: core.Construct, id: str, **kwargs) -> None:
self.create_security_groups()
self.create_endpoints()
self.tag_subnets()
core.CfnOutput(self, "Output", value=self._instance.vpc_id)
CfnOutput(self, "Output", value=self._instance.vpc_id)

@property
def instance(self) -> core.Resource:
def instance(self) -> Resource:
return self._instance

@property
def get_vpc_private_subnet_ids(self) -> ec2.SelectedSubnets:
return self.instance.select_subnets(
subnet_type=ec2.SubnetType.ISOLATED
subnet_type=ec2.SubnetType.PRIVATE_ISOLATED
).subnet_ids

@property
def subnets(self) -> List:
return [
ec2.SubnetConfiguration(
subnet_type=ec2.SubnetType.ISOLATED, name="mwaa-private", cidr_mask=24
subnet_type=ec2.SubnetType.PRIVATE_ISOLATED,
name="mwaa-private",
cidr_mask=24,
),
]

Expand Down Expand Up @@ -75,19 +78,23 @@ def create_endpoints(self) -> None:
name,
vpc=self.instance,
service=service,
subnets=ec2.SubnetSelection(subnet_type=ec2.SubnetType.ISOLATED),
subnets=ec2.SubnetSelection(
subnet_type=ec2.SubnetType.PRIVATE_ISOLATED
),
private_dns_enabled=True,
security_groups=[self.mwaa_sg],
)

self.instance.add_gateway_endpoint(
"s3-endpoint",
service=ec2.GatewayVpcEndpointAwsService.S3,
subnets=[ec2.SubnetSelection(subnet_type=ec2.SubnetType.ISOLATED)],
subnets=[ec2.SubnetSelection(subnet_type=ec2.SubnetType.PRIVATE_ISOLATED)],
)

def tag_subnets(self) -> None:
selection = self.instance.select_subnets(subnet_type=ec2.SubnetType.ISOLATED)
selection = self.instance.select_subnets(
subnet_type=ec2.SubnetType.PRIVATE_ISOLATED
)
for subnet in selection.subnets:
core.Tags.of(subnet).add("Name", f"mwaa-private-{subnet.availability_zone}")
core.Tags.of(self.instance).add("Name", "private-mwaa-vpc")
Tags.of(subnet).add("Name", f"mwaa-private-{subnet.availability_zone}")
Tags.of(self.instance).add("Name", "private-mwaa-vpc")
11 changes: 2 additions & 9 deletions usecases/mwaa-with-codeartifact/requirements.txt
Original file line number Diff line number Diff line change
@@ -1,9 +1,2 @@
aws-cdk.core==1.102.0
aws-cdk.aws_ec2==1.102.0
aws-cdk.aws_codeartifact==1.102.0
aws-cdk.aws_mwaa==1.102.0
aws-cdk.aws_s3_deployment==1.102.0
aws-cdk.aws_events==1.102.0
aws-cdk.aws_lambda==1.102.0
aws-cdk.aws_events_targets==1.102.0
aws-cdk.aws_iam==1.102.0
aws-cdk-lib>=2.16.0,<3.0.0
constructs>=10.0.0,<11.0.0