| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- # ============================================================
- # Lambda Layer (shared dependencies)
- # ============================================================
- resource "aws_lambda_layer_version" "deps" {
- filename = "${path.module}/../lambdas/layer.zip"
- layer_name = "${local.prefix}-deps"
- compatible_runtimes = ["python3.12"]
- source_code_hash = filebase64sha256("${path.module}/../lambdas/layer.zip")
- }
- # ============================================================
- # IAM Role for Lambdas
- # ============================================================
- resource "aws_iam_role" "lambda" {
- name = "${local.prefix}-lambda-role"
- assume_role_policy = jsonencode({
- Version = "2012-10-17"
- Statement = [{
- Action = "sts:AssumeRole"
- Effect = "Allow"
- Principal = { Service = "lambda.amazonaws.com" }
- }]
- })
- }
- resource "aws_iam_role_policy" "lambda" {
- name = "${local.prefix}-lambda-policy"
- role = aws_iam_role.lambda.id
- policy = jsonencode({
- Version = "2012-10-17"
- Statement = [
- {
- Effect = "Allow"
- Action = ["logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents"]
- Resource = "arn:aws:logs:*:*:*"
- },
- {
- Effect = "Allow"
- Action = ["s3:PutObject", "s3:GetObject", "s3:DeleteObject"]
- Resource = "${aws_s3_bucket.media.arn}/*"
- },
- {
- Effect = "Allow"
- Action = ["dynamodb:GetItem", "dynamodb:PutItem", "dynamodb:UpdateItem", "dynamodb:Scan"]
- Resource = [aws_dynamodb_table.users.arn, aws_dynamodb_table.jobs.arn]
- },
- {
- Effect = "Allow"
- Action = ["transcribe:StartTranscriptionJob", "transcribe:GetTranscriptionJob"]
- Resource = "*"
- },
- {
- Effect = "Allow"
- Action = ["ssm:GetParameter", "ssm:GetParameters"]
- Resource = "arn:aws:ssm:${var.aws_region}:*:parameter/${local.prefix}/*"
- },
- {
- Effect = "Allow"
- Action = ["states:StartExecution"]
- Resource = aws_sfn_state_machine.pipeline.arn
- },
- ]
- })
- }
- # ============================================================
- # Lambda Functions
- # ============================================================
- locals {
- lambda_env = {
- PROJECT = local.prefix
- S3_BUCKET = aws_s3_bucket.media.id
- USERS_TABLE = aws_dynamodb_table.users.name
- JOBS_TABLE = aws_dynamodb_table.jobs.name
- SSM_PREFIX = "/${local.prefix}"
- }
- }
- resource "aws_lambda_function" "submit" {
- filename = "${path.module}/../lambdas/submit.zip"
- function_name = "${local.prefix}-submit"
- role = aws_iam_role.lambda.arn
- handler = "submit.handler"
- runtime = "python3.12"
- timeout = 30
- source_code_hash = filebase64sha256("${path.module}/../lambdas/submit.zip")
- layers = [aws_lambda_layer_version.deps.arn]
- environment {
- variables = merge(local.lambda_env, {
- STATE_MACHINE = aws_sfn_state_machine.pipeline.arn
- })
- }
- }
- resource "aws_lambda_function" "download" {
- filename = "${path.module}/../lambdas/download.zip"
- function_name = "${local.prefix}-download"
- role = aws_iam_role.lambda.arn
- handler = "download.handler"
- runtime = "python3.12"
- timeout = 900
- memory_size = 1024
- source_code_hash = filebase64sha256("${path.module}/../lambdas/download.zip")
- layers = [aws_lambda_layer_version.deps.arn]
- environment { variables = local.lambda_env }
- }
- resource "aws_lambda_function" "transcribe" {
- filename = "${path.module}/../lambdas/transcribe_start.zip"
- function_name = "${local.prefix}-transcribe"
- role = aws_iam_role.lambda.arn
- handler = "transcribe_start.handler"
- runtime = "python3.12"
- timeout = 60
- source_code_hash = filebase64sha256("${path.module}/../lambdas/transcribe_start.zip")
- environment { variables = local.lambda_env }
- }
- resource "aws_lambda_function" "check" {
- filename = "${path.module}/../lambdas/transcribe_check.zip"
- function_name = "${local.prefix}-check"
- role = aws_iam_role.lambda.arn
- handler = "transcribe_check.handler"
- runtime = "python3.12"
- timeout = 60
- source_code_hash = filebase64sha256("${path.module}/../lambdas/transcribe_check.zip")
- environment { variables = local.lambda_env }
- }
- resource "aws_lambda_function" "summarize" {
- filename = "${path.module}/../lambdas/summarize.zip"
- function_name = "${local.prefix}-summarize"
- role = aws_iam_role.lambda.arn
- handler = "summarize.handler"
- runtime = "python3.12"
- timeout = 900
- memory_size = 512
- source_code_hash = filebase64sha256("${path.module}/../lambdas/summarize.zip")
- layers = [aws_lambda_layer_version.deps.arn]
- environment { variables = local.lambda_env }
- }
- resource "aws_lambda_function" "notify" {
- filename = "${path.module}/../lambdas/notify.zip"
- function_name = "${local.prefix}-notify"
- role = aws_iam_role.lambda.arn
- handler = "notify.handler"
- runtime = "python3.12"
- timeout = 60
- source_code_hash = filebase64sha256("${path.module}/../lambdas/notify.zip")
- environment { variables = local.lambda_env }
- }
|