Created
July 14, 2017 16:26
-
-
Save michael-erasmus/82f69f03271222293cfc33db3deca0db to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "cells": [ | |
| { | |
| "cell_type": "code", | |
| "execution_count": 39, | |
| "metadata": { | |
| "collapsed": true | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "import boto3" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 52, | |
| "metadata": { | |
| "collapsed": true | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "lambda_client = boto3.client('lambda')\n", | |
| "iam_client = boto3.client('iam')\n", | |
| "kinesis_client = boto3.client('kinesis')" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 79, | |
| "metadata": { | |
| "collapsed": true | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "ASSUMED_ROLE_POLICY = \"\"\"{\n", | |
| " \"Version\": \"2012-10-17\",\n", | |
| " \"Statement\": [\n", | |
| " {\n", | |
| " \"Effect\": \"Allow\",\n", | |
| " \"Principal\": {\n", | |
| " \"Service\": \"lambda.amazonaws.com\"\n", | |
| " },\n", | |
| " \"Action\": \"sts:AssumeRole\"\n", | |
| " }\n", | |
| " ]\n", | |
| "}\"\"\"" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 89, | |
| "metadata": { | |
| "collapsed": true | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "POLICY = \"\"\"{\n", | |
| " \"Version\": \"2012-10-17\",\n", | |
| " \"Statement\": [\n", | |
| " {\n", | |
| " \"Effect\": \"Allow\",\n", | |
| " \"Action\": [\n", | |
| " \"lambda:InvokeFunction\"\n", | |
| " ],\n", | |
| " \"Resource\": [\n", | |
| " \"*\"\n", | |
| " ]\n", | |
| " },\n", | |
| " {\n", | |
| " \"Effect\": \"Allow\",\n", | |
| " \"Action\": [\n", | |
| " \"kinesis:GetRecords\",\n", | |
| " \"kinesis:GetShardIterator\",\n", | |
| " \"kinesis:DescribeStream\",\n", | |
| " \"kinesis:ListStreams\",\n", | |
| " \"kinesis:PutRecord\",\n", | |
| " \"logs:CreateLogGroup\",\n", | |
| " \"logs:CreateLogStream\",\n", | |
| " \"logs:PutLogEvents\"\n", | |
| " ],\n", | |
| " \"Resource\": \"*\"\n", | |
| " }\n", | |
| " ]\n", | |
| "}\"\"\"" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "collapsed": true | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "response = iam_client.create_role(\n", | |
| " Path='/',\n", | |
| " RoleName='firehoser_backup_lambda_role',\n", | |
| " AssumeRolePolicyDocument=POLICY\n", | |
| ")" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 86, | |
| "metadata": { | |
| "collapsed": true | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "role_arn = response['Role']['Arn']\n", | |
| "role_name = response['Role']['RoleName']" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 90, | |
| "metadata": { | |
| "collapsed": true | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "response = iam_client.put_role_policy(\n", | |
| " RoleName=response['Role']['RoleName'],\n", | |
| " PolicyName='firehoser_kinesis_policy',\n", | |
| " PolicyDocument=POLICY\n", | |
| ")" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 92, | |
| "metadata": { | |
| "collapsed": true | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "with open('firehoser.zip', 'rb') as zip_file:\n", | |
| " r = zip_file.read()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 93, | |
| "metadata": { | |
| "collapsed": true | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "import zlib\n", | |
| "import base64" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 95, | |
| "metadata": { | |
| "collapsed": true | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "response = lambda_client.create_function(\n", | |
| " FunctionName='firehoser',\n", | |
| " Runtime='python3.6',\n", | |
| " Role=role_arn,\n", | |
| " Handler='lambda.handler',\n", | |
| " Code={\n", | |
| " 'ZipFile': r,\n", | |
| " },\n", | |
| " Description='Sample description',\n", | |
| " Timeout=10,\n", | |
| " MemorySize=512,\n", | |
| " Environment={\n", | |
| " 'Variables': {\n", | |
| " 'FIREHOSE_STREAM_NAME': 'lambda'\n", | |
| " }\n", | |
| " }\n", | |
| ")" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 96, | |
| "metadata": { | |
| "collapsed": true | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "stream_description = kinesis_client.describe_stream(\n", | |
| " StreamName='oplog_updates'\n", | |
| ")" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 98, | |
| "metadata": { | |
| "collapsed": true | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "response = lambda_client.create_event_source_mapping(\n", | |
| " EventSourceArn=stream_description['StreamDescription']['StreamARN'],\n", | |
| " FunctionName=response['FunctionName'],\n", | |
| " Enabled=True,\n", | |
| " BatchSize=450,\n", | |
| " StartingPosition='LATEST'\n", | |
| ")" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "# Cleanup" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 103, | |
| "metadata": { | |
| "collapsed": true | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "response = iam_client.delete_role_policy(\n", | |
| " RoleName='firehoser_backup_lambda_role',\n", | |
| " PolicyName='firehoser_kinesis_policy'\n", | |
| ")" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 104, | |
| "metadata": { | |
| "collapsed": true | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "response = iam_client.delete_role(\n", | |
| " RoleName='firehoser_backup_lambda_role'\n", | |
| ")" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 99, | |
| "metadata": { | |
| "collapsed": true | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "response = lambda_client.delete_function(\n", | |
| " FunctionName='firehoser'\n", | |
| ")" | |
| ] | |
| } | |
| ], | |
| "metadata": { | |
| "kernelspec": { | |
| "display_name": "Python [conda root]", | |
| "language": "python", | |
| "name": "conda-root-py" | |
| }, | |
| "language_info": { | |
| "codemirror_mode": { | |
| "name": "ipython", | |
| "version": 3 | |
| }, | |
| "file_extension": ".py", | |
| "mimetype": "text/x-python", | |
| "name": "python", | |
| "nbconvert_exporter": "python", | |
| "pygments_lexer": "ipython3", | |
| "version": "3.5.3" | |
| } | |
| }, | |
| "nbformat": 4, | |
| "nbformat_minor": 2 | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment