--- wikisrc/amazon_ec2.mdwn 2011/02/18 02:14:27 1.10 +++ wikisrc/amazon_ec2.mdwn 2011/02/18 03:52:23 1.17 @@ -15,7 +15,7 @@ Before you can start playing with Amazon 1. you "sign-up" directly on [Amazon Web Services](http://aws.amazon.com/) home-page. This is where you enter your credentials, and confirm your AWS account registration. 1. you sign-up to EC2 through [EC2 AWS home-page](http://aws.amazon.com/ec2/). You will be asked some more information, like a credit card (for billing), and a phone-number, for account validation. -## What do you need to know +## What do you need to know? EC2 uses different types of credentials. In addition to your login and password, you need an access key, a X.509 certificate (with its private key), and a pair of RSA keys, for remote SSH access. @@ -54,7 +54,7 @@ export EC2_SECRET_KEY=MYSECRETACCESSKEY Please note that the rest of the tutorial will assume that these variables are set. -### Installing EC2 API tools +## Installing EC2 API tools NetBSD provides EC2 API tools, to ease EC2 account management a little bit. The package is found inside [pkgsrc](http://www.pkgsrc.org), under [[!template id=pkg category=misc name=ec2-api-tools]]. @@ -65,7 +65,7 @@ make ACCEPTABLE_LICENSES+=amazon-softwar Package depends on Java, so build will take some time to finish. While it builds, just continue reading. -### EC2 vocabulary -- last notes +## EC2 vocabulary -- last notes Before starting to play with EC2, you need to be familiar with the EC2 vocabulary used throughout this tutorial. @@ -77,11 +77,7 @@ These instances are tied to a *region* ( AKI, or *Amazon Kernel Image*, are a specific type of image. It represents the Xen guest para-virtualized kernel, as used by an AMI. Certain AKIs are allowed to boot customized operating systems, e.g. those that are still not officially supported by Amazon. Thanks to [PyGrub](http://wiki.xensource.com/xenwiki/PyGrub), it can boot a kernel that resides inside an AMI's snapshot. -# Building your first AMI (Amazon Image) - -## Pre-built AMIs - -(For the future) Once NetBSD has decent support for Amazon EC2, we will publish the AMI identifiers so you can quickly boot up in a NetBSD environment without going through all the steps given below. +# Build-up your NetBSD system ## Fetch and build NetBSD @@ -93,7 +89,7 @@ This tutorial assumes that you will buil XXX build and install /mnt/ec2 -## Configuration +# Configuration of your NetBSD EC2 tree /!\This part assumes that you have a non-configured NetBSD system extracted under */mnt/ec2*; that is, it should have not been modified through [[!template id=man name=sysinst section=8]], nor by you. @@ -140,7 +136,7 @@ Image `NetBSD-AMI.img' complete $ gzip -9n NetBSD-AMI.img """]] -## Upload your OS +# Upload NetBSD to EC2 We must now upload our NetBSD system to EC2. For that, we will have to create a minimalist EC2 instance, to which we will copy our files to construct our snapshots. For that, we will use an Amazon Linux AMI instance. @@ -148,7 +144,7 @@ EC2 being localized in geographical regi The examples listed here assume that the instances run in **US East**, within the **c** zone (e.g. **us-east-1c**). To have a list of EC2 regions, you can use the command **ec2-describe-regions**, and **ec2-describe-availability-zones** for availability zones. -### Creating the instance +## Create an Amazon Linux instance Creating an instance straightforward. Amazon provides [different types of instances](http://aws.amazon.com/ec2/pricing/), with varying levels of billing and reliability. We will use a [*micro* instance](http://aws.amazon.com/ec2/faqs/#How_much_compute_power_do_Micro_instances_provide); its pricing is almost free. @@ -166,15 +162,13 @@ $ sleep 5 && ec2-describe-instances i-5b INSTANCE i-5babe737 ami-74f0061d ec2-67-202-24-108.compute-1.amazonaws.com ip-10-99-86-193.ec2.internal running <your_ssh_key_pair_name> 0 t1.micro 2011-02-17T23:22:37+0000 us-east-1c aki-427d952b monitoring-disabled 67.202.24.108 10.99.86.193 ebs """]] -### Upload your files +## Create and attach your NetBSD volumes We will have to create and attach two EBS volumes: 1. one to contain the Grub *menu.lst* config file, as well as the NetBSD kernel. 1. the other one will contain the root file-system. -#### Creating and attaching volumes - [[!template id=programlisting text=""" ec2-create-volume -s 1 -z us-east-1c # 1GiB -- will be used for Grub and kernel VOLUME vol-24f88d4c 1 us-east-1c creating 2011-02-18T00:06:21+0000 @@ -197,9 +191,9 @@ VOLUME vol-24f88d4c 1 ATTACHMENT vol-24f88d4c i-5babe737 /dev/sdg attached 2011-02-18T00:14:10+0000 """]] -### Snapshots! +## Snapshots! -We have to upload the kernel and the NetBSD disk image created earlier, *NetBSD-AMI.img*, to our instance host: +We can now upload the kernel and the NetBSD disk image created earlier, *NetBSD-AMI.img*, to our instance host: [[!template id=programlisting text=""" # Upload kernel to Linux AMI @@ -210,7 +204,15 @@ rsync -aPv -e "ssh -i $EC2_SSH_KEY" NetB ec2-user@ec2-67-202-24-108.compute-1.amazonaws.com: """]] -Connect to the instance, through its name. We will format and mount the Grub partition, create the *menu.lst* file, then copy files to their respective partitions. +Before we can connect to our brand new instance, we have to allow connections on SSH port (22) through the AWS EC2 firewall: + +[[!template id=programlisting text=""" +$ ec2-authorize default -p 22 +GROUP default +PERMISSION default ALLOWS tcp 22 22 FROM CIDR 0.0.0.0/0 +"""]] + +Then, log in to the instance, via its name. We will format and mount the Grub partition, create the *menu.lst* file, then copy files to their respective partitions. [[!template id=programlisting text=""" $ ec2-describe-instances i-5babe737 @@ -224,13 +226,13 @@ $ ssh -i "$EC2_SSH_KEY" ec2-user@ec2-67- [root@ip-10-99-86-193 ec2-user]# mount /dev/sdg /mnt/grub/ [root@ip-10-99-86-193 ec2-user]# mkdir -p /mnt/grub/boot/grub/ [root@ip-10-99-86-193 ec2-user]# cat > /mnt/grub/boot/grub/menu.lst << EOF - default=0 - timeout=0 - hiddenmenu - - title NetBSD AMI - root (hd0) - kernel /boot/netbsd root=xbd1 +default=0 +timeout=0 +hiddenmenu + +title NetBSD AMI +root (hd0) +kernel /boot/netbsd root=xbd1 EOF [root@ip-10-99-86-193 ec2-user]# mv netbsd /mnt/grub/boot/ [root@ip-10-99-86-193 ec2-user]# umount /dev/sdg @@ -238,7 +240,7 @@ EOF [root@ip-10-99-86-193 ec2-user]# sync """]] -### Shutdown the Linux instance +## Shutdown the Linux instance We now have to detach volumes, snapshot them, then we shutdown the Linux instance. @@ -255,6 +257,8 @@ SNAPSHOT snap-8aef2be6IMAGE aki-427d952b ec2-public-images/pv-grub-hd0-V1.01-x86_64.gz.manifest.xml amazon available public x86_64 kernel instance-store paravirtual xen IMAGE aki-4c7d9525 ec2-public-images/pv-grub-hd00-V1.01-i386.gz.manifest.xml amazon available public i386 kernel instance-store paravirtual xen -IMAGE aki-4e7d9527 ec2-public-images/pv-grub-hd00-V1.01-x86_64.gz.manifest.xml amazon available public x86_64 kernel instance-store paravirtual xen +IMAGE aki-4e7d9527 ec2-public-images/pv-grub-hd00-V1.01-x86_64.gz.manifest.xml amazon available public x86_64 kernel instance-store paravirtual xen """]] -We pick the one with the correct architecture (x86_64). Its ID is **aki-4e7d9527**. Then we can proceed to the creation of our AMI, with: +Pick the one with the correct architecture (x86_64 here). **hd0** are for AMIs where the snapshot contains no partition (where the volume is itself the whole partition), while **hd00** are for snapshots partitioned in a classical way (via MBR). Choose **hd0** AKIs. In this case, that will be **aki-427d952b**. + +We can proceed to the creation of our AMI, with: -1. */dev/sda1* as Grub partition (*/dev/sdg*, snapshot *snap-8aef2be6* of volume *vol-24f88d4c*) -1. */dev/sda2* as root file-system (*/dev/sdf*, snapshot *snap-deef2bb2* of volume *vol-36f88d5e*) +1. */dev/sda1* as Grub partition (*/dev/sdg*, snapshot **snap-8aef2be6** of volume **vol-24f88d4c**) +1. */dev/sda2* as root file-system (*/dev/sdf*, snapshot **snap-deef2bb2** of volume **vol-36f88d5e**) [[!template id=programlisting text=""" $ ec2-register -a x86_64 --kernel aki-4e7d9527 --region us-east-1 \ -b "/dev/sda1=snap-8aef2be6" -b "/dev/sda2=snap-deef2bb2" -n "NetBSD-x86_64-current" \ -d "<add your own description here> -IMAGE ami-74d0231d +IMAGE ami-74d0231d """]] -# Play with your first NetBSD instance +## Launch your first instance You can now start your own NetBSD instance, via: @@ -292,13 +298,20 @@ You can now start your own NetBSD instan $ ec2-run-instances ami-74d0231d -t t1.micro -z us-east-1c RESERVATION r-08218465 983624114127 default INSTANCE i-953d72f9 ami-74d0231d pending 0 t1.micro 2011-02-18T02:05:46+0000 us-east-1c aki-4e7d9527 monitoring-disabled +*** Wait a few minutes, micro instances take time to start *** +# Query console output for your new instance $ ec2-get-console-output i-953d72f9 -[...] +Copyright (c) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, + 2006, 2007, 2008, 2009, 2010, 2011 + The NetBSD Foundation, Inc. All rights reserved. +Copyright (c) 1982, 1986, 1989, 1991, 1993 + The Regents of the University of California. All rights reserved. +NetBSD 5.99.45 (XEN3_DOMU) #9: Wed Feb 16 21:14:49 CET 2011 + jym@paris:/home/jym/cvs/obj/sys/arch/amd64/compile/XEN3_DOMU +[...] """]] -## Create the instance - -## Connect to it +## Connect to your NetBSD instance ## And now?