Recently, AWS released Lambda runtime for python 3.9! Great!
But I noticed that, used as a backend of Cloudformation custom resource, cfnresponse is not provided.
This might be a bug, or do I miss something?
How to reproduce:
Use the following cloudformation template, and look into CloudWatch Logs for the backend function.
AWSTemplateFormatVersion: '2010-09-09'
Resources:
BareLambdaFunctionPython39:
Type: AWS::Lambda::Function
Properties:
Runtime: python3.9
Handler: "index.handler"
Role: !GetAtt LambdaExecutionRole.Arn
Code:
ZipFile: |
import cfnresponse
def handler(event, context):
cfnresponse.send(event, context, cfnresponse.SUCCESS, {})
BareLambdaFunctionPython39Custom:
Type: Custom::BareLambdaFunctionPython39
Properties:
ServiceToken: !GetAtt BareLambdaFunctionPython39.Arn
LambdaExecutionRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: Allow
Principal:
Service:
- lambda.amazonaws.com
Action:
- sts:AssumeRole
Path: /
ManagedPolicyArns:
- arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
START RequestId: 96967b62-6969-4005-97ae-4bxxxxxxxxxx Version: $LATEST
[ERROR] Runtime.ImportModuleError: Unable to import module 'index': No module named 'cfnresponse'
Traceback (most recent call last):
END RequestId: 96967b62-6969-4005-97ae-4bxxxxxxxxxx
Note that there is no error if I use python 3.8 runtime.
This is now missing in 3.10 and 3.11 runtime
Reminder to everyone, you can only import
cfnresponse
if you are deploying the Lambda and code using Zip in CloudFormation. You cannot just create a Lambda and import.