diff --git a/lambda-durable-human-approval-sam/README.md b/lambda-durable-human-approval-sam/README.md index 00acae675..14cce96ee 100644 --- a/lambda-durable-human-approval-sam/README.md +++ b/lambda-durable-human-approval-sam/README.md @@ -4,7 +4,7 @@ This pattern demonstrates a human-in-the-loop approval workflow using AWS Lambda **Important:** Please check the [AWS documentation](https://docs.aws.amazon.com/lambda/latest/dg/durable-functions.html) for regions currently supported by AWS Lambda durable functions. -Learn more about this pattern at Serverless Land Patterns: https://serverlessland.com/patterns/lambda-durable-hitl-approval-sam +Learn more about this pattern at Serverless Land Patterns: https://serverlessland.com/patterns/lambda-durable-human-approval-sam ## Architecture @@ -44,7 +44,7 @@ The pattern uses Lambda durable functions to implement a cost-effective approval 1. Navigate to the pattern directory: ```bash - cd lambda-durable-hitl-approval-sam + cd lambda-durable-human-approval-sam ``` 2. Build the SAM application: @@ -197,14 +197,14 @@ sam deploy --parameter-overrides ApproverEmail=new-email@example.com Monitor the durable function: ```bash -aws logs tail /aws/lambda/lambda-durable-hitl-approval-ApprovalFunction-XXXXX \ +aws logs tail /aws/lambda/lambda-durable-human-approval-ApprovalFunction \ --region us-east-2 \ --follow ``` Monitor the callback handler: ```bash -aws logs tail /aws/lambda/lambda-durable-hitl-approv-CallbackHandlerFunction-XXXXX \ +aws logs tail /aws/lambda/lambda-durable-human-approval-CallbackHandlerFunction \ --region us-east-2 \ --follow ``` @@ -214,7 +214,7 @@ aws logs tail /aws/lambda/lambda-durable-hitl-approv-CallbackHandlerFunction-XXX ## Cleanup ```bash -sam delete --stack-name lambda-durable-hitl-approval --region us-east-2 +sam delete --stack-name lambda-durable-human-approval --region us-east-2 ``` diff --git a/lambda-durable-human-approval-sam/src/lambda_function.py b/lambda-durable-human-approval-sam/src/lambda_function.py index 8de2a3532..090c8ea69 100644 --- a/lambda-durable-human-approval-sam/src/lambda_function.py +++ b/lambda-durable-human-approval-sam/src/lambda_function.py @@ -29,8 +29,7 @@ def lambda_handler(event, context: DurableContext): description = body.get('description', 'No description') # Get API Gateway URL from environment or construct it - region = os.environ.get('AWS_REGION', 'us-east-2') - api_base_url = f"https://w8a9tempjb.execute-api.{region}.amazonaws.com/prod" + api_base_url = os.environ['API_BASE_URL'] print(f"Starting approval workflow for request: {request_id}") print(f"API Base URL: {api_base_url}") diff --git a/lambda-durable-human-approval-sam/template.yaml b/lambda-durable-human-approval-sam/template.yaml index 0458f4eab..aabff0a0a 100644 --- a/lambda-durable-human-approval-sam/template.yaml +++ b/lambda-durable-human-approval-sam/template.yaml @@ -36,6 +36,7 @@ Resources: CallbackHandlerFunction: Type: AWS::Serverless::Function Properties: + FunctionName: !Sub '${AWS::StackName}-CallbackHandlerFunction' CodeUri: src/ Handler: callback_handler.lambda_handler Runtime: python3.14 @@ -56,6 +57,7 @@ Resources: ApprovalFunction: Type: AWS::Serverless::Function Properties: + FunctionName: !Sub '${AWS::StackName}-ApprovalFunction' CodeUri: src/ Handler: lambda_function.lambda_handler Runtime: python3.14 @@ -68,6 +70,7 @@ Resources: Variables: APPROVAL_TOPIC_ARN: !Ref ApprovalTopic CALLBACK_TABLE_NAME: !Ref CallbackTable + API_BASE_URL: !Sub 'https://${ApprovalApi}.execute-api.${AWS::Region}.amazonaws.com/prod' Policies: - SNSPublishMessagePolicy: TopicName: !GetAtt ApprovalTopic.TopicName @@ -134,7 +137,7 @@ Resources: x-amazon-apigateway-integration: type: aws httpMethod: POST - uri: !Sub 'arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${ApprovalFunction.Arn}:live/invocations' + uri: !Sub 'arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:${AWS::StackName}-ApprovalFunction:live/invocations' requestParameters: integration.request.header.X-Amz-Invocation-Type: "'Event'" responses: