knife ec2コマンドで AWS EC2 インスタンスを作成する

ここ一ヶ月ほどは EC2 インスタンスを作って遊んでいました。Chef を使っていると、knife コマンドで AWS の EC2 インスタンスを作成できると便利です。そこで今回は knife コマンドで ec2 インスタンスを作成するところまでをご紹介します。

なお、Chef serverを構築していると、Chef serverと連携してChefの実行までできるようですが、今回は Chef solo 環境で knife ec2 コマンドを使用するところまでです。

http://aws.amazon.com/jp/

knifeコマンドのインターフェースを用いて AWS EC2 インスタンスを作成します。Chef Server は無いので、単純にインスタンスを作るところまで。

Amazon EC2 API Toolsから、Amazon EC2 CLI Toolsをダウンロードします。ダウンロードしたら解答します:

wget "http://www.amazon.com/gp/redirect.html/ref=aws_rc_ec2tools?location=http://s3.amazonaws.com/ec2-downloads/ec2-api-tools.zip&token=A80325AA4DAB186C80828ED5138633E3F49160D9" -O ec2-api-tools.zip

unzip ec2-api-tools.zip

mv ec2-api-tools-1.6.7.3 ~/bin/ec2-api-tools

私の場合は ~/bin/ec2-api-tools 配下に格納しました。

ちなみに ~/bin/ec2-api-tools/bin に PATH を通しておきましょう。

AWSマネジメントコンソールにアクセスして、セキュリティ証明書を選択します:

AWS Management Console | アマゾン ウェブ サービス(AWS 日本語)

Security Credentialsをクリックします:

IAM Management Console

Access Credentialセクションにアクセスキー・シークレットアクセスキーが表示されます:

Amazon Web Services

JAVA_HOMEの設定は各自の環境に応じて設定してください。ACCESS_KEY, SECRET_KEYは先ほど調べたアクセスキー・シークレットアクセスキーを入力してください:

export JAVA_HOME=/usr

export EC2_HOME=/home/kazu634/bin/ec2-api-tools
export PATH=$PATH:$EC2_HOME/bin

export AWS_ACCESS_KEY=your-aws-access-key
export AWS_SECRET_KEY=your-aws-secret-key

export EC2_REGION=ap-northeast-1
export EC2_URL=https://ec2.ap-northeast-1.amazonaws.com
export EC2_AVAILABILITY_ZONE=ap-northeast-1a

ec2-describe-regionコマンドを実行して、以下のように表示されれば OK です:

% ec2-describe-regions
REGION  eu-west-1       ec2.eu-west-1.amazonaws.com
REGION  sa-east-1       ec2.sa-east-1.amazonaws.com
REGION  us-east-1       ec2.us-east-1.amazonaws.com
REGION  ap-northeast-1  ec2.ap-northeast-1.amazonaws.com
REGION  us-west-2       ec2.us-west-2.amazonaws.com
REGION  us-west-1       ec2.us-west-1.amazonaws.com
REGION  ap-southeast-1  ec2.ap-southeast-1.amazonaws.com
REGION  ap-southeast-2  ec2.ap-southeast-2.amazonaws.com

gemからインストールします:

gem install knife-ec2

knife ec2コマンドの使い方は以下の通りです:

knife ec2コマンドは Chef Server の情報をもとにEC2インスタンスをセットアップします。今回私は Chef Server をセットアップしていないため、Chef Serverとの通信をしないように明示的に指定してあげます。

まずは次のようなテンプレートファイルを作成します:

bash -c '
aptitude update
aptitude safe-upgrade -y
'

そして次のようにコマンドを実行します:

knife ec2 server create -I AMIのイメージ名称 -G セキュリティグループ名 --flavor=t1.micro -S AWSのSSH Key Pair -i SSHのプライベートキー --template-file テンプレート名

こうすることで Chef Server との通信を実施せずに、EC2インスタンスの作成だけが実行されます(他に aptitude update && aptitude safe-upgrade も)。私の場合は次のように指定して knife ec2 server create することが多いです:

knife ec2 server create -I ami-9763e696 -G quicklaunch-1 --flavor=t1.micro -S amazon -i ~/.ssh/amazon.pem --template-file ~/junk/template.erb

knife ec2 server listコマンドを実行します。

knife ec2 server deleteコマンドを実行します。