Implement manual approval confirmation email from 2 people

0

Need to implement a framework to send approval email for two persons once we received approval then only need to take snapshot in boto3 and proceeding further Could you please help me how to send multi approval email and get the both confirmation for further task

1 個回答
0

⚡I'm updating my response because I missed the tag for Step Function, Lambda, and SNS, and didn't consider using serverless services.


Detailed Architecture Diagram Description

Architecture Diagram Description

Here's a basic flow:

  1. External Event trigger the workflow in AWS Step Functions.
  2. Lambda function sends an approval request via SES.
  3. Lambda function checks DynamoDB for approvals.
  4. Once approvals are confirmed, another Lambda function performs the snapshot.
  5. Workflow completes.

ℹ️ You would need to write AWS Lambda functions for several parts of the process: sending the approval requests, handling the approval reception, checking if both approvals have been received, and taking a snapshot.

Send Approval Requests Lambda Function

import boto3
from urllib.parse import quote_plus

def generate_approval_url(approval_lambda_url, user_id):
    return f"{approval_lambda_url}?response=approve&user_id={quote_plus(user_id)}"

def lambda_handler(event, context):
    ses = boto3.client('ses')
    approval_lambda_url = 'https://your-api-gateway-url'

    approvers = {
        'User1': 'user1@example.com',
        'User2': 'user2@example.com',
    }
    
    for user_id, email in approvers.items():
        approval_url = generate_approval_url(approval_lambda_url, user_id)
        ses.send_email(
            Source='sender@example.com',
            Destination={'ToAddresses': [email]},
            Message={
                'Subject': {'Data': 'Approval Request'},
                'Body': {
                    'Text': {
                        'Data': f'Please approve the request by clicking on this link: {approval_url}'
                    }
                }
            }
        )
    return {'status': 'Emails sent'}

Approval Reception Lambda Function

import boto3

def lambda_handler(event, context):
    dynamodb = boto3.resource('dynamodb')
    table = dynamodb.Table('ApprovalsTable')

    user_id = event['queryStringParameters']['user_id']
    response = event['queryStringParameters']['response']

    table.update_item(
        Key={'UserId': user_id},
        UpdateExpression='SET ApprovalStatus = :val1',
        ExpressionAttributeValues={':val1': response}
    )

    return {
        'statusCode': 200,
        'body': 'Approval received'
    }

Check Approvals Lambda Function

import boto3

def lambda_handler(event, context):
    dynamodb = boto3.resource('dynamodb')
    table = dynamodb.Table('ApprovalsTable')

    response = table.scan(
        FilterExpression='ApprovalStatus = :val',
        ExpressionAttributeValues={':val': 'approve'}
    )

    if response['Count'] == 2:
        return {'status': 'approved'}
    else:
        return {'status': 'not_approved'}

Snapshot Lambda Function

import boto3

def lambda_handler(event, context):
    ec2 = boto3.client('ec2')
    
    instance_id = 'i-1234567890abcdef0'

    snapshot = ec2.create_snapshot(InstanceId=instance_id, Description='Snapshot after approval')
    
    return {'status': 'Snapshot created', 'snapshot_id': snapshot['SnapshotId']}

ℹ️ Don't forget to handle permissions and environment variables appropriately. Each Lambda function will need the correct IAM permissions to interact with SES, DynamoDB, EC2, and other services as required.

profile picture
專家
已回答 1 個月前
  • The requester tagged the question with Step Functions and I don't see any workflows in the answer. Additionally, it is unclear how the approvals are collected from the approvers.

您尚未登入。 登入 去張貼答案。

一個好的回答可以清楚地回答問題並提供建設性的意見回饋,同時有助於提問者的專業成長。

回答問題指南