knife ec2コマンドで AWS EC2 インスタンスを作成する
ここ一ヶ月ほどは EC2 インスタンスを作って遊んでいました。Chef を使っていると、knife コマンドで AWS の EC2 インスタンスを作成できると便利です。そこで今回は knife コマンドで ec2 インスタンスを作成するところまでをご紹介します。
なお、Chef serverを構築していると、Chef serverと連携してChefの実行までできるようですが、今回は Chef solo 環境で knife ec2 コマンドを使用するところまでです。
やりたいこと
knifeコマンドのインターフェースを用いて AWS EC2 インスタンスを作成します。Chef Server は無いので、単純にインスタンスを作るところまで。
Amazon EC2 CLI Toolsのセットアップ
Amazon EC2 CLI Toolsのダウンロード
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マネジメントコンソールにアクセスして、セキュリティ証明書を選択します:
Security Credentialsをクリックします:
Access Credentialセクションにアクセスキー・シークレットアクセスキーが表示されます:
環境変数の設定など
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
knife ec2 コマンドのインストール
gemからインストールします:
gem install knife-ec2
knife ec2コマンドの使い方
knife ec2コマンドの使い方は以下の通りです:
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
EC2インスタンスの一覧取得
knife ec2 server listコマンドを実行します。
EC2インスタンスの削除
knife ec2 server deleteコマンドを実行します。