{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "### End to End demo of starting spot instance in AWS" ] }, { "cell_type": "code", "execution_count": 53, "metadata": { "collapsed": true }, "outputs": [], "source": [ "%reload_ext autoreload\n", "%autoreload 2\n", "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": 54, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from aws_setup import *" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Define parameters" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": true }, "outputs": [], "source": [ "name='fast-ai'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Create new VPC by tag name" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": true }, "outputs": [], "source": [ "vpc = create_vpc(name)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Create SSH key" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "create_ec2_keypair(name)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "ec2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Request Spot instance" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "instance_name = f'{name}-instance'\n", "instance_type = 't2.micro'" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "spot_prices = get_spot_prices(); spot_prices[instance_type]" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "launch_specs = LaunchSpecs(vpc, instance_type=instance_type).build()" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Waiting on spot fullfillment...\n", "Fullfillment completed. InstanceId: i-09602f7331bed103c\n", "Rebooting...\n" ] } ], "source": [ "instance = create_spot_instance(instance_name, launch_specs); instance" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Request on demand instance (if spot error)" ] }, { "cell_type": "code", "execution_count": 68, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# instance = create_instance(instance_name, vpc, instance_type='t2.micro'); instance" ] }, { "cell_type": "code", "execution_count": 74, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "ec2.Instance(id='i-09602f7331bed103c')" ] }, "execution_count": 74, "metadata": {}, "output_type": "execute_result" } ], "source": [ "instance = get_instance(f'{instance_name}'); instance" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Attach EBS volume (Optional)" ] }, { "cell_type": "code", "execution_count": 75, "metadata": { "collapsed": true }, "outputs": [], "source": [ "volume_tag = f'{name}-ebs-volume'" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "volume = create_volume(volume_tag, size=100)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "_ = attach_volume(instance, volume_tag, device='/dev/xvdf')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Create EFS" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "efs_tag = f'{name}-efs'" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "efs = create_efs(efs_tag, vpc)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### SSH into instance" ] }, { "cell_type": "code", "execution_count": 77, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Connecting to SSH...\n", "Connected!\n" ] } ], "source": [ "client = connect_to_instance(instance)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Mount EBS" ] }, { "cell_type": "code", "execution_count": 63, "metadata": { "collapsed": true }, "outputs": [], "source": [ "upload_path = Path.cwd()/'upload_scripts/mount_ebs.sh'\n", "upload_file(client, str(upload_path), 'mount_ebs.sh')" ] }, { "cell_type": "code", "execution_count": 64, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "run_command returned: \n", "\n" ] } ], "source": [ "out, _ = run_command(client, 'chmod 755 mount_ebs.sh')" ] }, { "cell_type": "code", "execution_count": 81, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "run_command returned: \n", "mount: /dev/xvdf is already mounted or /home/ubuntu/ebs_mount busy\r\n", " /dev/xvdf is already mounted on /home/ubuntu/ebs_mount\r\n", "\n" ] } ], "source": [ "out, _ = run_command(client, './mount_ebs.sh --device /dev/xvdf') # no reformatting\n", "# out, _ = run_command(client, './mount_ebs.sh --device /dev/xvdf --reformat true')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Mount EFS" ] }, { "cell_type": "code", "execution_count": 55, "metadata": { "collapsed": true }, "outputs": [], "source": [ "efs_addr = get_efs_address('fast-ai-efs'); efs_addr" ] }, { "cell_type": "code", "execution_count": 60, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "run_command returned: \n", "\n" ] } ], "source": [ "out, _ = run_command(client, 'mkdir ~/efs_mount')" ] }, { "cell_type": "code", "execution_count": 79, "metadata": { "collapsed": true }, "outputs": [], "source": [ "efs_mount_cmd = f'sudo mount -t nfs -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2 {efs_addr}:/ ~/efs_mount'" ] }, { "cell_type": "code", "execution_count": 80, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "run_command returned: \n", "\n" ] } ], "source": [ "out, _ = run_command(client, efs_mount_cmd)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "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.6.3" } }, "nbformat": 4, "nbformat_minor": 2 }