Skip to content

Instantly share code, notes, and snippets.

View alexcasalboni's full-sized avatar
✌️
Happy coding!

Alex Casalboni alexcasalboni

✌️
Happy coding!
View GitHub Profile
@alexcasalboni
alexcasalboni / query.sql
Created June 18, 2019 10:11
Amazon Aurora MySQL - Invoking Lambda functions synchronously
SELECT *
FROM weather_mapping
WHERE
weather = lambda_sync (
'arn:aws:lambda:REGION:ACCOUNT_ID:function:FetchWeather',
'{ "location" : "London" }'
)
@alexcasalboni
alexcasalboni / trigger.sql
Created June 18, 2019 09:56
Amazon Aurora MySQL - Trigger to invoke AWS Lambda
DROP TRIGGER IF EXISTS TR_contacts_on_insert;
DELIMITER ;;
CREATE TRIGGER TR_contacts_on_insert
AFTER INSERT ON Contacts
FOR EACH ROW
BEGIN
SELECT NEW.email , NEW.fullname
INTO @Email , @Fullname;
lambda_async(
'arn:aws:lambda:REGION:ACCOUNT_ID:function:SendEmailWithContact',
@alexcasalboni
alexcasalboni / grant.sql
Created June 18, 2019 09:51
Amazon Aurora MySQL - Grant permissions to invoke AWS Lambda
GRANT INVOKE LAMBDA ON *.* TO user@domain-or-ip-address
@alexcasalboni
alexcasalboni / template.yml
Created June 17, 2019 18:01
CloudWatch Logs - serverless app for logs processing
AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Resources:
MyProcessingFunction:
Type: AWS::Serverless::Function
Properties:
Handler: index.handler
Runtime: python3.7
Policies:
- AWSLambdaExecute # Managed Policy
@alexcasalboni
alexcasalboni / handler.py
Last active June 17, 2019 17:01
AWS CloudWatch Logs - Lambda handler
import time
import boto3
from decode import decode # see decode.py
cloudwatch_logs = boto3.client('logs')
def handler(event, context):
obj = decode(event['awslogs']['data'])
# wait for other logs to be collected in the stream
{
"messageType": "DATA_MESSAGE",
"owner": "123456789123",
"logGroup": "myLogGroup",
"logStream": "myLogStream",
"subscriptionFilters": [
"mySubscriptionFilter"
],
"logEvents": [
{
@alexcasalboni
alexcasalboni / decode.js
Created June 17, 2019 16:34
How to decode CloudWatch Logs events
const zlib = require('zlib');
exports.decode = async (data) => {
const compressedPayload = Buffer.from(data, 'base64');
const jsonPayload = zlib.gunzipSync(compressedPayload).toString('utf8');
return JSON.parse(jsonPayload);
}
@alexcasalboni
alexcasalboni / cloudwatch-logs-event.json
Created June 17, 2019 16:17
Amazon CloudWatch Logs - Lambda event
{
"awslogs": {
"data": "_BASE64_AND_ZIPPED_DATA_"
}
}
@alexcasalboni
alexcasalboni / lex.py
Created May 29, 2019 17:49
Amazon Lex fulfillment function - Lambda handler (Python) + utilities
import logging
from lex_utils import elicit_slot, delegate, close, ElicitAction, DelegateAction
from utils import validate_dialog, init_or_load_session, finalize_session, actually_book_the_hotel
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
def lambda_handler(event, context):
logger.debug('event.bot.name=%s', event['bot']['name'])
logger.debug('userId=%s, intentName=%s', event['userId'], event['currentIntent']['name'])
@alexcasalboni
alexcasalboni / lex.py
Last active May 29, 2019 17:46
Amazon Lex fulfillment function - Lambda handler (Python)
from lex_utils import elicit_slot, delegate, close, ElicitAction, DelegateAction
from utils import validate_dialog, init_or_load_session, finalize_session, actually_book_the_hotel
def lambda_handler(event, context):
intent_name = event['currentIntent']['name']
if intent_name == 'BookHotel':
return book_hotel(event)
# elif (add more intents here)