Jenkins EC2 Plugin で Spot Instance を使ってテストを回す
動作確認した環境は、
Amazon Linux | 2015.03 |
Java | 1.7.0_75 |
Jenkins | 1.610 |
EC2 Plugin | 1.27 |
です。
Jenkins EC2 Plugin で Spot Instance を使えるようにするまで、
試行錯誤しましたので、導入方法をまとめました。
Jenkins のインストール
適宜 sudo してください。
curl -s http://pkg.jenkins-ci.org/redhat/jenkins.repo -o /etc/yum.repos.d/jenkins.repo rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key yum install -y jenkins
EC2 Plugin のインストール
Jenkins > Jenkinsの管理 > プラグインの管理
の、[利用可能]タブから Amazon EC2 plugin にチェックを入れて 「ダウンロードして再起動後にインストール」
AMI の作成
- EC2 インスタンスを起動
- JENKINS_URL は環境に合わせて適宜変更して、以下を実行。適宜 sudo してください
wget http://JENKINS_URL/plugin/ec2/AMI-Scripts/ubuntu-init.py -O /usr/bin/userdata chmod +x /usr/bin/userdata echo "/usr/bin/userdata" >> /etc/rc.local
- AMI を作成する(以降の手順で AMI ID を使います)
JNLP 用の port を固定する
- JNLP 用の port がデフォルトではランダムになっていますが、これだと Security Group の設定が大変なので固定します
- Jenkins > Jenkinsの管理 > グローバルセキュリティの設定の、
EC2 Plugin の設定
Jenkins > Jenkinsの管理>システムの設定から、
- 以下をそれぞれ入力
- Access Key ID
- Secret Access Key
- Region
- EC2 Key Pair's Private Key
- AMIs
- Description
- AMI ID : 作成した AMI の ID を設定
- Instance Type
- Availability Zone
- Use Spot Instance にチェック
- Spot Max Bid Price
- Choose Bid Type
- Security group names : AWS の Security Group の name をカンマ区切りで指定
- Remote user : ec2-user (適宜変更する)
- AMI Type : unix(Amazon Linux の例なので)
- Root command prefix : sudo(必要であれば)
- Labels : Slave Node を管理する単位なので適宜入力、スペース区切りで複数指定可能
- 用途 : このスレーブをできるだけ利用する(必要に応じて変更)
- Idle termination time : terminate(または stop) するまでの時間(分)
- 高度な設定
ジョブ作成
- Jenkins > 新規ジョブ作成
- ジョブ名 : 適宜入力
- ジョブの種類も適宜設定
- 設定画面に遷移後、
- 実行するノードを制限 の ラベル式 : AMIs の Labels に設定したものを設定する
- ビルド手順の追加 から「シェルの実行」を選択
- シェルの実行のシェルスクリプトに以下を入力
#!/bin/bash echo "$(date) : $(hostname)" >> /tmp/hostname
ビルド実行
- 左ペインにある「ビルド実行」を押下
- Spot Request が投げられて、インスタンスが起動します
- 5 ~ 10 分くらいで起動します
- Spot Instance に入ると、/tmp/hostname が生成されていると思います
- それから Idle termination time 分後、Spot Instance が terminate されます
まとめ
EC2 Plugin を使うと簡単に Spot instance を起動してテストを回すことができます。
システム設定に不備があると起動しないので注意してください。
私は、Tag を設定していなかったことでエラーが出て起動しなくて、半年前に一度挫折しました。
一度できるようになると、かなりの費用削減になると思いますので、おすすめです。