Lambdaから起動テンプレートを用いてスポットリクエストしてみた

Lambdaから起動テンプレートを用いてスポットリクエストしてみた

Lambdaからスポットリクエストを行う起動テンプレートを用いて、スポットインスタンスを作成してみました
Clock Icon2024.09.30

はじめに

こんにちは、アノテーションのなかたです。
今回は、Lambdaからスポットリクエストを行う起動テンプレートを用いて、スポットインスタンスを作成してみました。

やってみる

今回の記事は、前回の記事の発展として検証してみました。
https://dev.classmethod.jp/articles/run-instances-from-lambda-by-launch-template/
前提とする手順が多いため、前回の記事の環境が構築されている上で手順を紹介します。

1. 起動テンプレートの作成

スポットリクエストを含む起動テンプレートを作成します。
スクリーンショット 2024-09-29 21.15.17
名前を指定します。
image.png
インスタンスタイプはt4g.nanoを使用するため、アーキテクチャタイプでArmを指定する必要があります。
スクリーンショット 2024-09-29 21.22.02.png
インスタンスタイプを指定します。
image.png
高度な詳細セクションを開き、購入オプションスポットインスタンスを指定します。
スクリーンショット 2024-09-29 21.26.10.png
起動テンプレートを作成します。

2. Lambda環境変数の設定

先ほど作成した起動テンプレート名をLambdaの環境変数に指定します。

キー: LAUNCH_TEMPLATE_NAME
値: 起動テンプレートの名前

3. Lambda関数の実行

テストします。
スクリーンショット 2024-09-29 21.29.56.png
インスタンスが正常に作成されたようです!

Response
{
  "statusCode": 200,
  "body": "インスタンス i-0d46933dcc58ad1ef が起動テンプレート SpotInstanceT4gNano から正常に起動されました。"
}

EC2インスタンスの画面からも確認できました。
スクリーンショット 2024-09-29 21.33.08.png
スポットリクエストも正常に行われています。
スクリーンショット 2024-09-29 21.35.20.png

4. スポットインスタンスの片付け

検証が終わったため、スポットインスタンスを片付けたいと思います。
オンデマンドインスタンスではインスタンスを終了させてしまえば削除できますが、スポットインスタンスは少し異なります。
スポットインスタンスは、スポットリクエストを満たすインスタンスとして作成されているので、インスタンスを終了してもリクエストによって再度作成されてしまいます。

そのため、インスタンスではなく、スポットリクエストをキャンセルします。
スクリーンショット 2024-09-29 21.44.02.png
ポップアップが表示されるので、こちらからインスタンスの削除を選択し、確認ボタンを押します。
(なぜかスポットリクエスのキャンセルと表示されてしまっています。)
スクリーンショット 2024-09-29 21.47.45.png

また、はじめから1回限りのスポットインスタンスを作成したい場合は、スポットインスタンスオプションのリクエストタイプで1回限りを指定することで実現できます。
スクリーンショット 2024-09-29 21.40.52.png

[One-time] (ワンタイム): Amazon EC2 は、スポットインスタンスに対して 1 回限りのリクエストを送信します。スポットインスタンスが中断された場合、リクエストは再送信されません。
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/spot-requests.html

おわりに

検証を通してみて、特につまづくことなくスポットインスタンスを実行できました。
前回では権限周りでつまづいていたので、今回もおそらくスポットインスタンスを実行する何らかの権限が追加で必要なのだろうと思っていたのですが、空振りに終わりました。

今回のユースケースとして、既に起動テンプレートでスポットインスタンスの作成方法を構築していて、Lambdaから起動したい場合があると思います。
そうしたケースを抱えている場合は、この記事を参考にしていただければと思います。

また検証中に、「起動テンプレートを挟む必要なくLambdaから直接スポットインスタンスを起動すればいいのでは」と考えました。
時間があればそちらも検証してみようと思います。

参考

https://dev.classmethod.jp/articles/how-to-start-a-t4g-instance/
https://dev.classmethod.jp/articles/spotinstances-launch-templates/
https://qiita.com/silv224/items/e089df858dc518a99713

アノテーション株式会社について

アノテーション株式会社はクラスメソッドグループのオペレーション専門特化企業です。サポート・運用・開発保守・情シス・バックオフィスの専門チームが、最新 IT テクノロジー、高い技術力、蓄積されたノウハウをフル活用し、お客様の課題解決を行っています。当社は様々な職種でメンバーを募集しています。「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、アノテーション株式会社 採用サイトをぜひご覧ください。

この記事をシェアする

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.