Skip to content

Commit da1a404

Browse files
committed
feat: add security group to ingress / egress loadbalancer handler
1 parent d90b903 commit da1a404

File tree

3 files changed

+50
-5
lines changed

3 files changed

+50
-5
lines changed

easyecs/cloudformation/template/__init__.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,20 @@ def create_load_balancer(stack, ecs_manifest: EcsFileModel, vpc):
128128
),
129129
description=egress_rule.name,
130130
)
131+
elif egress_rule.security_group_id:
132+
lb_security_group.add_egress_rule(
133+
peer=SecurityGroup.from_security_group_id(
134+
stack,
135+
"egress_rule_sg",
136+
security_group_id=egress_rule.security_group_id,
137+
),
138+
connection=(
139+
Port.tcp(egress_rule.port)
140+
if egress_rule.port != -1
141+
else Port.all_traffic()
142+
),
143+
description=egress_rule.name,
144+
)
131145
if ecs_manifest.load_balancer.security_group_rules.ingress:
132146
for (
133147
ingress_rule
@@ -156,6 +170,20 @@ def create_load_balancer(stack, ecs_manifest: EcsFileModel, vpc):
156170
),
157171
description=ingress_rule.name,
158172
)
173+
elif ingress_rule.security_group_id:
174+
lb_security_group.add_ingress_rule(
175+
peer=SecurityGroup.from_security_group_id(
176+
stack,
177+
"ingress_rule_sg",
178+
security_group_id=ingress_rule.security_group_id,
179+
),
180+
connection=(
181+
Port.tcp(ingress_rule.port)
182+
if ingress_rule.port != -1
183+
else Port.all_traffic()
184+
),
185+
description=ingress_rule.name,
186+
)
159187
listener = lb.add_listener(
160188
"NlbListener", port=ecs_manifest.load_balancer.listener_port
161189
)

easyecs/model/ecs.py

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -150,13 +150,30 @@ class SecurityGroupRule(BaseModel):
150150
port: int
151151
cidr: Optional[str] = None
152152
prefix_list: Optional[str] = None
153+
security_group_id: Optional[str] = None
153154

154155
@model_validator(mode="after")
155156
def validate_cidr(self):
156-
if self.prefix_list is not None and self.cidr is not None:
157-
raise ValueError("A rule is either a CIDR or a prefix list, not both!")
158-
if self.prefix_list is None and self.cidr is None:
159-
raise ValueError("A rule is either a CIDR or a prefix list, not none!")
157+
has_at_least_two_true = lambda lst: sum(lst) >= 2 # noqa: E731
158+
if has_at_least_two_true(
159+
[
160+
self.prefix_list is not None,
161+
self.cidr is not None,
162+
self.security_group_id is not None,
163+
]
164+
):
165+
raise ValueError(
166+
"A rule is either a CIDR, a security group id or a prefix list!"
167+
)
168+
if (
169+
self.prefix_list is None
170+
and self.cidr is None
171+
and self.security_group_id is None
172+
):
173+
raise ValueError(
174+
"A rule is either a CIDR, a security group id or a prefix list, not"
175+
" none!"
176+
)
160177
return self
161178

162179

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[tool.poetry]
22
name = "easyecs"
3-
version = "0.16.1"
3+
version = "0.17.0"
44
description = ""
55
authors = ["BONVARLET Benjamin <benjaminbonvarlet96@gmail.com>"]
66
readme = "README.md"

0 commit comments

Comments
 (0)