Reputation: 1585
My lambda file in python looks like this: greet_lambda.py
import os
def lambda_handler(event, context):
return "{} from Lambda!".format(os.environ['greeting'])
My main.tf file is successfully deployed through terraform apply
and looks like this:
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
}
}
}
provider "aws" {
region = "us-east-1"
}
resource "aws_iam_role" "lambda_role" {
name = "lambda_role"
assume_role_policy = <<EOF
{
"Version": "2012-10-17",
"Statement": [
{
"Action": "sts:AssumeRole",
"Principal": {
"Service": "lambda.amazonaws.com"
},
"Effect": "Allow",
"Sid": ""
}
]
}
EOF
}
resource "aws_lambda_function" "test_lambda" {
function_name = "greet_lambda"
s3_bucket = "dirai-terraform-lambda"
s3_key = "v1.0.0/greet_lambda.zip"
handler = "greet_lambda.lambda_handler"
runtime = "python3.7"
role = aws_iam_role.lambda_role.arn
}
On invoking the lambda greet_lambda.py through the below command I get an error in output.txt
file and no logs are generated in cloudwatch
$aws lambda invoke --region=us-east-1 --function-name=greet_lambda output.txt
Error in output.txt
{"errorMessage": "'greeting'", "errorType": "KeyError", "stackTrace": [" File \"/var/task/greet_lambda.py\", line 4, in lambda_handler\n return \"{} from Lambda!\".format(os.environ['greeting'])\n", " File \"/var/lang/lib/python3.7/os.py\", line 681, in __getitem__\n raise KeyError(key) from None\n"]}
Please advice where I am going wrong.
Upvotes: 1
Views: 456
Reputation: 238189
os.environ['greeting']
tries to fetch lambda's environment variable called greeting
. Your test_lambda
does not have any such variables, defined using environment.
Not sure what you are trying to achieve with your lambda code, but maybe you are after:
import os
def lambda_handler(event, context):
return "{} from Lambda!".format('greeting')
Update
To add managed policy use managed_policy_arns
resource "aws_iam_role" "lambda_role" {
name = "lambda_role"
managed_policy_arns = ["arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"]
assume_role_policy = <<EOF
{
"Version": "2012-10-17",
"Statement": [
{
"Action": "sts:AssumeRole",
"Principal": {
"Service": "lambda.amazonaws.com"
},
"Effect": "Allow",
"Sid": ""
}
]
}
EOF
}
Upvotes: 4