mirror of
https://github.com/Sea-Haven-Industries/procurement-ingest.git
synced 2026-09-30 06:03:14 +00:00
* feat(lambda): report unhandled Lambda errors to Sentry * fix(lambda): strip Sentry stack-frame locals * style(tests): wrap long lines in sentry_init tests
137 lines
4.2 KiB
HCL
137 lines
4.2 KiB
HCL
resource "aws_cloudwatch_log_group" "po_email_processor" {
|
|
name = "/aws/lambda/po-email-processor"
|
|
retention_in_days = 60
|
|
|
|
lifecycle {
|
|
prevent_destroy = true
|
|
}
|
|
}
|
|
|
|
resource "aws_cloudwatch_log_group" "po_web_ui" {
|
|
name = "/aws/lambda/po-web-ui"
|
|
retention_in_days = 60
|
|
|
|
lifecycle {
|
|
prevent_destroy = true
|
|
}
|
|
}
|
|
|
|
resource "aws_cloudwatch_log_group" "po_site_extractor" {
|
|
name = "/aws/lambda/po-ingest-site-extractor"
|
|
retention_in_days = 60
|
|
|
|
lifecycle {
|
|
prevent_destroy = true
|
|
}
|
|
}
|
|
|
|
resource "aws_lambda_function" "po_email_processor" {
|
|
function_name = "po-email-processor"
|
|
role = aws_iam_role.po_email_processor.arn
|
|
handler = "handler.handler"
|
|
runtime = "python3.12"
|
|
architectures = ["arm64"]
|
|
memory_size = 256
|
|
timeout = 60
|
|
|
|
s3_bucket = aws_s3_bucket.artifacts.id
|
|
s3_key = aws_s3_object.lambda["po_email_processor"].key
|
|
source_code_hash = data.archive_file.lambda["po_email_processor"].output_base64sha256
|
|
|
|
dead_letter_config {
|
|
target_arn = aws_sqs_queue.po_email_processor_dlq.arn
|
|
}
|
|
|
|
environment {
|
|
variables = {
|
|
PO_TABLE = aws_dynamodb_table.purchase_orders.name
|
|
ALLOWED_DKIM_DOMAINS = "amazon.coupahost.com"
|
|
BEDROCK_MODEL_ID = local.bedrock_model_id
|
|
SENTRY_DSN = var.sentry_dsn
|
|
}
|
|
}
|
|
|
|
depends_on = [
|
|
aws_s3_object.lambda,
|
|
aws_cloudwatch_log_group.po_email_processor,
|
|
aws_iam_role_policy_attachment.po_email_processor_basic,
|
|
aws_iam_role_policy.po_email_processor_s3,
|
|
aws_iam_role_policy.po_email_processor_ddb,
|
|
aws_iam_role_policy.po_email_processor_kms,
|
|
aws_iam_role_policy.po_email_processor_bedrock,
|
|
aws_iam_role_policy.po_email_processor_dlq,
|
|
]
|
|
}
|
|
|
|
resource "aws_lambda_function" "po_web_ui" {
|
|
function_name = "po-web-ui"
|
|
role = aws_iam_role.po_web_ui.arn
|
|
handler = "handler.handler"
|
|
runtime = "python3.12"
|
|
architectures = ["arm64"]
|
|
memory_size = 256
|
|
timeout = 60
|
|
|
|
s3_bucket = aws_s3_bucket.artifacts.id
|
|
s3_key = aws_s3_object.lambda["po_web_ui"].key
|
|
source_code_hash = data.archive_file.lambda["po_web_ui"].output_base64sha256
|
|
|
|
environment {
|
|
variables = {
|
|
PO_TABLE = aws_dynamodb_table.purchase_orders.name
|
|
WEB_UI_AUTH_TOKEN_SECRET_ARN = var.web_ui_auth_token_secret_arn
|
|
SENTRY_DSN = var.sentry_dsn
|
|
}
|
|
}
|
|
|
|
depends_on = [
|
|
aws_s3_object.lambda,
|
|
aws_cloudwatch_log_group.po_web_ui,
|
|
aws_iam_role_policy_attachment.po_web_ui_basic,
|
|
aws_iam_role_policy.po_web_ui_ddb,
|
|
aws_iam_role_policy.po_web_ui_kms,
|
|
aws_iam_role_policy.po_web_ui_secrets,
|
|
]
|
|
}
|
|
|
|
resource "aws_lambda_function" "po_site_extractor" {
|
|
function_name = "po-ingest-site-extractor"
|
|
role = aws_iam_role.po_site_extractor.arn
|
|
handler = "handler.handler"
|
|
runtime = "python3.12"
|
|
architectures = ["arm64"]
|
|
memory_size = 256
|
|
timeout = 60
|
|
|
|
s3_bucket = aws_s3_bucket.artifacts.id
|
|
s3_key = aws_s3_object.lambda["po_site_extractor"].key
|
|
source_code_hash = data.archive_file.lambda["po_site_extractor"].output_base64sha256
|
|
|
|
environment {
|
|
variables = {
|
|
VERIFIED_SITES_TABLE = aws_dynamodb_table.verified_sites.name
|
|
PENDING_REVIEW_TABLE = aws_dynamodb_table.pending_site_review.name
|
|
SENTRY_DSN = var.sentry_dsn
|
|
}
|
|
}
|
|
|
|
depends_on = [
|
|
aws_s3_object.lambda,
|
|
aws_cloudwatch_log_group.po_site_extractor,
|
|
aws_iam_role_policy_attachment.po_site_extractor_basic,
|
|
aws_iam_role_policy.po_site_extractor_ddb,
|
|
aws_iam_role_policy.po_site_extractor_kms,
|
|
]
|
|
}
|
|
|
|
resource "aws_lambda_event_source_mapping" "po_site_extractor" {
|
|
event_source_arn = aws_dynamodb_table.purchase_orders.stream_arn
|
|
function_name = aws_lambda_function.po_site_extractor.arn
|
|
starting_position = "TRIM_HORIZON"
|
|
batch_size = 10
|
|
maximum_batching_window_in_seconds = 30
|
|
bisect_batch_on_function_error = true
|
|
maximum_retry_attempts = 3
|
|
parallelization_factor = 1
|
|
enabled = true
|
|
}
|