Skip to content

Commit dcefdc1

Browse files
committed
Set up verified email and sns subscription
1 parent 54a785a commit dcefdc1

File tree

1 file changed

+29
-3
lines changed

1 file changed

+29
-3
lines changed

cdk/quiz_app/quiz_app_stack.py

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@
1111
aws_iam as iam,
1212
aws_lambda as _lambda,
1313
aws_sns as sns,
14+
aws_pipes as pipes,
1415
aws_sqs as sqs,
16+
custom_resources as cr,
1517
CfnOutput as Output,
1618
)
1719
from constructs import Construct
@@ -62,7 +64,7 @@ def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None:
6264
write_capacity=5,
6365
)
6466

65-
dlq_submission_queue = sqs.Queue(self, "QuizSubmissionQueue")
67+
dlq_submission_queue = sqs.Queue(self, "QuizSubmissionQueueDLQ")
6668
submission_queue = sqs.Queue(
6769
self,
6870
"QuizSubmissionQueue",
@@ -184,9 +186,33 @@ def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None:
184186
)
185187
resource.add_method(http_method, integration=integration)
186188

187-
# SQS DLQ -> EventBridge Pipes -> SNS
188-
dlq_alarm_topic = sns.Topic(self, "DLQAlarmTopic")
189+
# verify email identity for SES
190+
191+
sanitised_email = email.replace(".", "-").replace("@", "-")
192+
cr.AwsCustomResource(
193+
self,
194+
f"EmailVerifier{sanitised_email}",
195+
on_update=cr.AwsSdkCall(
196+
service="SES",
197+
action="VerifyEmailIdentity",
198+
parameters={
199+
"EmailAddress": email,
200+
},
201+
physical_resource_id=cr.PhysicalResourceId.of(
202+
f"verify-{sanitised_email}"
203+
),
204+
),
205+
policy=cr.AwsCustomResourcePolicy.from_sdk_calls(
206+
resources=cr.AwsCustomResourcePolicy.ANY_RESOURCE,
207+
),
208+
)
189209

210+
dlq_alarm_topic = sns.Topic(self, "DLQAlarmTopic")
211+
dlq_alarm_topic.add_subscription(
212+
aws_cdk.aws_sns_subscriptions.EmailSubscription(
213+
email_address="[email protected]",
214+
)
215+
)
190216

191217
@staticmethod
192218
def read_policy_file(file_path: str) -> dict:

0 commit comments

Comments
 (0)