resource "aws_kinesis_stream" "test_stream" { name = "terraform-kinesis-test" shard_count = 1 retention_period = 48 shard_level_metrics = [ "IncomingBytes", "OutgoingBytes", ] stream_mode_details { stream_mode = "PROVISIONED" } tags = { Environment = "test" } } data "aws_iam_policy_document" "assume_role" { statement { effect = "Allow" principals { type = "Service" identifiers = ["lambda.amazonaws.com"] } actions = ["sts:AssumeRole"] } } resource "aws_iam_role" "iam_for_lambda" { name = "iam_for_lambda" assume_role_policy = data.aws_iam_policy_document.assume_role.json } data "archive_file" "lambda" { type = "zip" source_file = "lambda.js" output_path = "lambda_function_payload.zip" } resource "aws_lambda_function" "test_lambda" { # If the file is not in the current working directory you will need to include a # path.module in the filename. filename = "lambda_function_payload.zip" function_name = "lambda_function_name" role = aws_iam_role.iam_for_lambda.arn handler = "index.test" source_code_hash = data.archive_file.lambda.output_base64sha256 runtime = "nodejs18.x" environment { variables = { foo = "bar" } } } resource "aws_lambda_event_source_mapping" "kinesis_to_sqs" { event_source_arn = aws_kinesis_stream.test_stream.arn function_name = aws_lambda_function.test_lambda.arn starting_position = "LATEST" }