Skip to content

Commit 0d3e00a

Browse files
committed
minor updates
1 parent 7f8251c commit 0d3e00a

File tree

9 files changed

+34
-49
lines changed

9 files changed

+34
-49
lines changed

README.md

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -106,18 +106,10 @@ When running `cdk` commands, you must specify which environment's
106106
configuration to use. This is done by passing a context variable to
107107
CDK, which loads environment-specific parameters.
108108

109-
Create a configuration file in the config folder for each environment
109+
Create a configuration file in the [config folder](./config) for each environment
110110
(e.g., `dev.yaml`, `prod.yaml`). Both yaml and json files are supported.
111111
The supported environments are dev, stage, and prod.
112112

113-
Example (`dev.yaml`):
114-
115-
```yaml
116-
VPC_CIDR: 10.254.172.0/24
117-
FQDN: dev.mydomain.io
118-
CERTIFICATE_ARN: arn:aws:acm:us-east-1:XXXXXXXXX:certificate/e8093404-7db1-4042-90d0-01eb5bde1ffc
119-
```
120-
121113
To synthesize or deploy using the `prod` environment configuration:
122114

123115
```console

app.py

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -11,27 +11,27 @@
1111
cdk_app = cdk.App()
1212
env_name = cdk_app.node.try_get_context("env") or "dev"
1313
config = load_context_config(env_name=env_name)
14-
stack_name_prefix = f"app-{env_name}"
15-
fully_qualified_domain_name = config["FQDN"]
16-
environment_tags = config["TAGS"]
17-
app_version = "latest"
14+
STACK_NAME_PREFIX = f"app-{env_name}"
15+
FQDN = config["FQDN"]
16+
TAGS = config["TAGS"]
17+
APP_VERSION = "latest"
1818

1919
# recursively apply tags to all stack resources
20-
if environment_tags:
21-
for key, value in environment_tags.items():
20+
if TAGS:
21+
for key, value in TAGS.items():
2222
cdk.Tags.of(cdk_app).add(key, value)
2323

2424
network_stack = NetworkStack(
2525
scope=cdk_app,
26-
construct_id=f"{stack_name_prefix}-network",
26+
construct_id=f"{STACK_NAME_PREFIX}-network",
2727
vpc_cidr=config["VPC_CIDR"],
2828
)
2929

3030
ecs_stack = EcsStack(
3131
scope=cdk_app,
32-
construct_id=f"{stack_name_prefix}-ecs",
32+
construct_id=f"{STACK_NAME_PREFIX}-ecs",
3333
vpc=network_stack.vpc,
34-
namespace=fully_qualified_domain_name,
34+
namespace=FQDN,
3535
)
3636

3737
# From AWS docs https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-connect-concepts-deploy.html
@@ -40,7 +40,7 @@
4040
# client service is running and available the public, but a backend isn't.
4141
load_balancer_stack = LoadBalancerStack(
4242
scope=cdk_app,
43-
construct_id=f"{stack_name_prefix}-load-balancer",
43+
construct_id=f"{STACK_NAME_PREFIX}-load-balancer",
4444
vpc=network_stack.vpc,
4545
)
4646
load_balancer_stack.add_dependency(ecs_stack)
@@ -49,16 +49,16 @@
4949
ecs_task_cpu=256,
5050
ecs_task_memory=512,
5151
container_name="my-app",
52-
# can also reference github with 'ghcr.io/sage-bionetworks/my-app:{app_version}'
53-
container_location=f"nginx:{app_version}",
52+
# can also reference github with 'ghcr.io/sage-bionetworks/my-app:{APP_VERSION}'
53+
container_location=f"nginx:{APP_VERSION}",
5454
container_port=80,
5555
container_env_vars={
56-
"APP_VERSION": f"{app_version}",
56+
"APP_VERSION": f"{APP_VERSION}",
5757
},
5858
)
5959
app_stack = LoadBalancedServiceStack(
6060
scope=cdk_app,
61-
construct_id=f"{stack_name_prefix}-app",
61+
construct_id=f"{STACK_NAME_PREFIX}-app",
6262
vpc=network_stack.vpc,
6363
cluster=ecs_stack.cluster,
6464
props=app_props,

cdk.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"app": "python3 app.py",
2+
"app": "python app.py",
33
"watch": {
44
"include": [
55
"**"

config/dev.yaml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
VPC_CIDR: 10.254.172.0/24
22
FQDN: dev.mydomain.io
3-
CERTIFICATE_ARN: >-
4-
arn:aws:acm:us-east-1:XXXXXXXXX:certificate/e8093404-7db1-4042-90d0-01eb5bde1ffc
3+
4+
# Optional
5+
# CERTIFICATE_ARN: >-
6+
# arn:aws:acm:us-east-1:XXXXXXXXX:certificate/e8093404-7db1-4042-90d0-01eb5bde1ffc

config/prod.yaml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
VPC_CIDR: 10.254.174.0/24
22
FQDN: prod.mydomain.io
3-
CERTIFICATE_ARN: >-
4-
arn:aws:acm:us-east-1:XXXXXXXXX:certificate/69b3ba97-b382-4648-8f94-a250b77b4994
3+
4+
# Optional
5+
# CERTIFICATE_ARN: >-
6+
# arn:aws:acm:us-east-1:XXXXXXXXX:certificate/69b3ba97-b382-4648-8f94-a250b77b4994

config/stage.yaml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
VPC_CIDR: 10.254.173.0/24
22
FQDN: stage.mydomain.io
3-
CERTIFICATE_ARN: >-
4-
arn:aws:acm:us-east-1:XXXXXXXXX:certificate/69b3ba97-b382-4648-8f94-a250b77b4994
3+
4+
# Optional
5+
# CERTIFICATE_ARN: >-
6+
# arn:aws:acm:us-east-1:XXXXXXXXX:certificate/69b3ba97-b382-4648-8f94-a250b77b4994

src/utils.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,11 @@ def load_context_config(env_name: str, config_dir: str = "config") -> Dict[str,
1919
"""
2020

2121
# ✅ Validate environment name
22-
valid_envs = {"dev", "stage", "prod"}
23-
if env_name not in valid_envs:
22+
VALID_ENVS = {"dev", "stage", "prod"}
23+
if env_name not in VALID_ENVS:
2424
raise ValueError(
2525
f"Invalid environment '{env_name}'. "
26-
f"Must be one of: {', '.join(sorted(valid_envs))}"
26+
f"Must be one of: {', '.join(sorted(VALID_ENVS))}"
2727
)
2828

2929
# Define possible config paths

tests/unit/test_network_stack.py

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,11 @@
22
import aws_cdk.assertions as assertions
33

44
from src.network_stack import NetworkStack
5-
from src.utils import load_context_config
65

76

87
def test_vpc_created():
9-
# Load configuration from dev environment
10-
config = load_context_config(env_name="dev")
11-
128
app = core.App()
13-
vpc_cidr = config["VPC_CIDR"]
9+
vpc_cidr = "10.254.192.0/24"
1410
network = NetworkStack(app, "NetworkStack", vpc_cidr)
1511
template = assertions.Template.from_stack(network)
1612
template.has_resource_properties("AWS::EC2::VPC", {"CidrBlock": vpc_cidr})

tests/unit/test_service_stack.py

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,23 +5,14 @@
55
from src.ecs_stack import EcsStack
66
from src.service_props import ServiceProps, ServiceSecret, ContainerVolume
77
from src.service_stack import ServiceStack
8-
from src.utils import load_context_config
98

109

1110
def test_service_stack_created():
12-
# Load configuration from dev environment
13-
config = load_context_config(env_name="dev")
14-
1511
cdk_app = cdk.App()
16-
vpc_cidr = config["VPC_CIDR"]
17-
fully_qualified_domain_name = config["FQDN"]
18-
12+
vpc_cidr = "10.254.192.0/24"
1913
network_stack = NetworkStack(cdk_app, "NetworkStack", vpc_cidr=vpc_cidr)
2014
ecs_stack = EcsStack(
21-
cdk_app,
22-
"EcsStack",
23-
vpc=network_stack.vpc,
24-
namespace=fully_qualified_domain_name,
15+
cdk_app, "EcsStack", vpc=network_stack.vpc, namespace="dev.app.io"
2516
)
2617

2718
app_props = ServiceProps(

0 commit comments

Comments
 (0)