Learn it in 5 minutes
HTMLAbout five minutes of reading
The flow log is telling the truth. The function never ran.
AccessDenied in the flow log means Connect could not invoke the function. Add the function on the instance and allow connect.amazonaws.com to invoke that version or alias. A permission on the flow author is irrelevant at runtime.
If there is no Lambda log line at all, you are in this case or the payload was rejected. If there is a log line, the bug is inside the function.
- Use an alias, not $LATEST, in production.
- Resource-based policy and identity policy answer different questions.
- VPC-attached functions need a path to their dependency and still must return in time.
- Terraform's association resource is the reviewable form of the console click.
Number on this page: Principal connect. connect.amazonaws.com on the function policy
Glossary
- Lambda synchronous timeout At most 8 seconds. The function's own timeout can be longer. The flow still takes the Error or Timeout branch at 8 seconds.
- Lambda asynchronous mode The flow continues without waiting. You can wait up to 60 seconds with a Wait block. A sequence of Lambda calls must finish within 20 seconds.
- String map A flat object of string keys and string values. One of the two Lambda response shapes.
- CloudFormation AWS::Connect::ContactFlow A stack resource whose content is flow-language JSON. Use it to move a flow between instances.
Mind map
Open the Lambda mind map
Sister technologies
Most 'random' flow errors are a Lambda response that missed the timeout or the shape Connect accepts.
Config and troubleshooting
Adding lambda:InvokeFunction to the admin user and retesting the call.
Two pieces: a resource policy that trusts connect.amazonaws.com, and an integration association so the flow can select the function. The block still waits at most 8 seconds when InvocationType is SYNCHRONOUS.
Lambda functions IntegrationAssociation
CloudFormation study snippet
Resources:
InvokePermission:
Type: AWS::Lambda::Permission
Properties:
FunctionName: !Ref FlowHook
Action: lambda:InvokeFunction
Principal: connect.amazonaws.com
SourceArn: !GetAtt CampusInstance.Arn
LambdaAssociation:
Type: AWS::Connect::IntegrationAssociation
Properties:
InstanceId: !GetAtt CampusInstance.Id
IntegrationType: LAMBDA_FUNCTION
IntegrationArn: !GetAtt FlowHook.Arn
Integration map
Join records on ContactId. The integration map room lists the seams.
Cross-platform bridges
A CUCM calling search space is not a routing profile, but the profile is the closest idea of 'who can receive what'. A partition is not a Connect object. A UCCX CSQ and a UCCE skill group map to a queue. Precision steps map to routing criteria. A script, an Architect flow, and an Avaya vector map to a contact flow.
Open the mapping room
Future hooks
Hooks you can adopt later: EventBridge contact events, the CTR stream, agent events, Kinesis Video, Customer Profiles events, Cases, Show view, data tables, External Tool, and the flow language JSON in your pipeline. Live Sync and Agentic CX are the 2026 hooks for guided and agentic experiences.