Lambdaから起動テンプレートを用いてスポットリクエストしてみた
はじめに
こんにちは、アノテーションのなかたです。
今回は、Lambdaからスポットリクエストを行う起動テンプレートを用いて、スポットインスタンスを作成してみました。
やってみる
今回の記事は、前回の記事の発展として検証してみました。
前提とする手順が多いため、前回の記事の環境が構築されている上で手順を紹介します。1. 起動テンプレートの作成
スポットリクエストを含む起動テンプレートを作成します。
名前を指定します。
インスタンスタイプはt4g.nano
を使用するため、アーキテクチャタイプでArm
を指定する必要があります。
インスタンスタイプを指定します。
高度な詳細
セクションを開き、購入オプション
でスポットインスタンス
を指定します。
起動テンプレートを作成します。
2. Lambda環境変数の設定
先ほど作成した起動テンプレート名をLambdaの環境変数に指定します。
キー: LAUNCH_TEMPLATE_NAME
値: 起動テンプレートの名前
3. Lambda関数の実行
テストします。
インスタンスが正常に作成されたようです!
Response
{
"statusCode": 200,
"body": "インスタンス i-0d46933dcc58ad1ef が起動テンプレート SpotInstanceT4gNano から正常に起動されました。"
}
EC2インスタンスの画面からも確認できました。
スポットリクエストも正常に行われています。
4. スポットインスタンスの片付け
検証が終わったため、スポットインスタンスを片付けたいと思います。
オンデマンドインスタンスではインスタンスを終了させてしまえば削除できますが、スポットインスタンスは少し異なります。
スポットインスタンスは、スポットリクエストを満たすインスタンスとして作成されているので、インスタンスを終了してもリクエストによって再度作成されてしまいます。
そのため、インスタンスではなく、スポットリクエストをキャンセルします。
ポップアップが表示されるので、こちらからインスタンスの削除
を選択し、確認ボタンを押します。
(なぜかスポットリクエスのキャンセル
と表示されてしまっています。)
また、はじめから1回限りのスポットインスタンスを作成したい場合は、スポットインスタンスオプションのリクエストタイプで1回限り
を指定することで実現できます。
[One-time] (ワンタイム): Amazon EC2 は、スポットインスタンスに対して 1 回限りのリクエストを送信します。スポットインスタンスが中断された場合、リクエストは再送信されません。
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/spot-requests.html
おわりに
検証を通してみて、特につまづくことなくスポットインスタンスを実行できました。
前回では権限周りでつまづいていたので、今回もおそらくスポットインスタンスを実行する何らかの権限が追加で必要なのだろうと思っていたのですが、空振りに終わりました。
今回のユースケースとして、既に起動テンプレートでスポットインスタンスの作成方法を構築していて、Lambdaから起動したい場合があると思います。
そうしたケースを抱えている場合は、この記事を参考にしていただければと思います。
また検証中に、「起動テンプレートを挟む必要なくLambdaから直接スポットインスタンスを起動すればいいのでは」と考えました。
時間があればそちらも検証してみようと思います。
参考
アノテーション株式会社について
アノテーション株式会社はクラスメソッドグループのオペレーション専門特化企業です。サポート・運用・開発保守・情シス・バックオフィスの専門チームが、最新 IT テクノロジー、高い技術力、蓄積されたノウハウをフル活用し、お客様の課題解決を行っています。当社は様々な職種でメンバーを募集しています。「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、アノテーション株式会社 採用サイトをぜひご覧ください。