Amazon Elastic BeanstalkでEC2スポットインスタンスを利用する


こんにちは、@s_tsukaです。

今回はAmazon Elastic BeanstalkでEC2スポットインスタンスを利用する方法について解説します。

EC2スポットインスタンスについては以前書いたこちらの記事をご覧下さい。かなり安い価格でEC2を利用することができます。

Amazon EC2 スポットインスタンスを試す(Jenkins)

m1.smallでも大体$0.01で利用することができます。

Elastic Beanstalkのスポットインスタンスサポート

通常であれば、例えばGUI上の設定では、スポットインスタンスを選択することはできません。

これはこのフォーラムで言っている通り、完全にはサポートしていないためです。

https://forums.aws.amazon.com/message.jspa?messageID=542614

ですが、.ebextensionsを利用することでスポットインスタンスを利用できます。ここからはその方法を書いて行きます。

.ebextensionsによるスポットインスタンス設定

実はかなり簡単です。上記のフォーラムにもありますが、たった1ファイル、Resourcesの設定を用意すれば良いだけです。

nginxをデフォルトの状態でEB上で動かすというサンプルを作ってみます。

まずはDockerrun.aws.jsonを用意します。

{
  "AWSEBDockerrunVersion": "1",
  "Image": {
    "Name": "nginx",
    "Update": "true"
  },
  "Ports": [
    {
      "ContainerPort": "80"
    }
  ]
}

次にebextensionsフォルダ以下に適当な名前でResourcesの設定のファイルを用意します。

Resources:
  AWSEBAutoScalingLaunchConfiguration:
    Type: "AWS::AutoScaling::LaunchConfiguration"
    Properties:
      SpotPrice: 0.02

最後にこれをzipで固めてアプリケーションは完成です。

zip app.zip Dockerrun.aws.json .ebextensions/aws-ec2-spot.config

EBのGUI画面上に行き、アプリケーション作成から適当にぽちぽちして行きます。.ebextensionsが大切なので、サンプルアプリ起動ではなく、さっきのzipをアップロードしてそれをデプロイするようにします。

インスタンスはスポットに対応していて、かつ安いm1.smallを選択しておきます。

この状態で環境作成をすると、以下のようにスポットリクエストが作成されます。

EC2_Management_Consoleインスタンスも作成されています。

EC2_Management_Consoleライフサイクルがspotになっています。無事環境作成も終わり、nginxが見えるようになりました。

Welcome_to_nginx_まとめ

.ebextensionsを利用するとスポットインスタンスを利用できることを説明しました。

みなさんも使ってみてはいかがでしょうか!