Bagaimana cara memeriksa harga spot AWS secara otomatis?

15

Saya sudah memikirkan pekerjaan Jenkins untuk memeriksa harga untuk kotak agen yang kami putar; sering kali harga melonjak dan itu akan menjadi satu atau dua jam sebelum ada yang tahu bahwa tidak ada agen baru yang muncul, dan kemudian kita harus masuk secara manual dan memeriksa harga spot dan menyesuaikan sesuai, atau beralih zona, dll.

Insting pertama saya adalah bahwa rute terbaik adalah memiliki pekerjaan Jenkins setiap jam yang menjalankan aws ec2 describe-spot-instance-requestsdan memeriksa permintaan yang gagal (dan kemudian membuat kami gagal). Tapi saya bertanya-tanya apakah ada metode yang lebih bersih yang melibatkan benar-benar membandingkan harga yang sulit (dan karena itu dapat memberi tahu kami persis apa yang salah, dan seberapa banyak), daripada melihat permintaan yang berhasil / gagal.

Adakah yang mengatur sesuatu yang serupa? Bagaimana kamu melakukannya?

Alex
sumber
1
Pertanyaan yang masuk akal, saya kira ... tetapi mengapa Anda tidak hanya menawar nilai instans yang sebenarnya bernilai bagi Anda, pilih beberapa tipe instance (termasuk instans yang lebih besar dari yang Anda butuhkan, yang terkadang lebih murah ketika harga spot instance yang lebih kecil naik ... kadang-kadang - termasuk sekarang ketika saya menulis ini - saya menemukan diri saya dengan cc2.8xlarge, karena saat ini lebih murah daripada c3.2xlarge yang saya butuhkan, walaupun memiliki 4x core dan 4x memori) dan biarkan sistem menangani contoh pemilihan jenis dan penempatan AZ berdasarkan pasar?
Michael - sqlbot
1
@ Michael-sqlbot Saya tidak mengatakan apa-apa di bagian proses itu; kami memiliki dokumentasi yang menyatakan bahwa kami membeli ukuran contoh tertentu untuk tujuan audit dan itulah yang kami lakukan. Hanya berusaha memanfaatkan situasi yang tidak menyenangkan.
Alex
1
Cukup adil, @Alex. Kupikir aku akan melemparnya, kalau-kalau kamu tidak mempertimbangkannya.
Michael - sqlbot
@ Alex Tidak Menarik, apakah ukuran instance tertentu sehingga dapat dilihat dengan mudah pada tagihan? Karena Anda (lebih tepatnya, mereka!) Dapat menggunakan tag dan kemudian melihatnya di Cost Explorer.
Tim Malone

Jawaban:

15

Melihat alat sumber terbuka yang disebut autospotting yang mungkin bisa membantu dengan ini:

Setelah diaktifkan pada grup AutoScaling on-demand yang ada, ia meluncurkan instance spot EC2 yang lebih murah, setidaknya sama besar dan dikonfigurasi secara identik dengan instance on-demand Anda saat ini. Segera setelah instance baru siap, ditambahkan ke grup dan instance on-demand terlepas dari grup dan diakhiri.

Kami memiliki ini di pipeline yang harus dilakukan, akan dapat menambahkan lebih banyak konteks setelah kami menyelesaikannya.

Memperbarui:

Alat lain yang baru-baru ini didemokan dalam konferensi adalah mapbox / spotswap

Ini bekerja sedikit berbeda. Memonitor ASG normal dengan instance On-Demand atau Reserved dan kemudian, jika skala muncul, tawaran dan ketentuan menempatkan instance dari tingkat komputasi yang sama pada ASG terpisah.

Hashfyre
sumber
2
Selamat datang di situs, Hashfyre :)
Dawny33
1
Saya penulis AutoSpotting, terima kasih telah menyebutkannya! Apakah Anda sudah mencobanya? Saya mendengarkan umpan balik pengguna.
Cristian Măgherușan-Stanciu
6

Saya pribadi akan mempertimbangkan model seperti ini:

Timed Lambdas -> Checks spot price -> Push to ElastiCache

Maka ketika Anda membutuhkan contoh:

Timed lambdas -> Pulls spot price from ElastiCache, sets it as environment variable on your Machine where you spin up IaC from -> This is parsed as argument to IaC code and pushes out the spot price

Anda dapat menetapkan beberapa toleransi, juga, dalam lambda (yaitu 10, 25, peningkatan 50% berdasarkan kepentingan) dan batasan keras sesuai permintaan, misalnya. Ini juga merupakan tempat yang hebat untuk membangun logika untuk menangani, misalnya, menemukan AZ termurah, menemukan harga spot yang relatif murah ( 2xt2.mediumvs t2.large), dll.

Henry
sumber
Sekadar informasi, Anda dapat mengedit jawaban yang dihapus dan menandainya untuk meminta penghapusan. (Tidak ada salahnya, itu hanya informatif :))
Tensibai
1
Saya akan meninggalkan rasa malu saya untuk bertahan untuk mengingatkan saya tentang hari-hari saya yang salah arah untuk selamanya.
Henry
Rofl, benar-benar tidak ada rasa malu, jangan khawatir :)
Tensibai
3
DEFINE MY SCARS WHO I AM
Henry
Ide keren - mungkin juga layak disebutkan bahwa seseorang dapat mendorong harga ke tabel DynamoDB, jika mereka belum memiliki gugus ElastiCache yang tergeletak di sekitar;). Atau mungkin bahkan file JSON dalam ember S3.
Tim Malone
4

Biarkan saya memberi Anda cara alat-agnostik untuk mencoba melakukan ini.

sering kali harga melonjak dan itu akan menjadi satu atau dua jam sebelum ada yang tahu bahwa tidak ada agen baru yang muncul, dan kemudian kita harus masuk secara manual dan memeriksa harga spot dan menyesuaikan sesuai, atau beralih zona, dll

Kami menghadapi masalah yang sama dalam infrastruktur yang kami bangun. Jadi, kami memiliki if-elseblok gaya untuk menetapkan harga penawaran, tergantung pada harga berdasarkan permintaan dari instance.

AWS memiliki API untuk mendapatkan harga sesuai permintaan instance. Kami menggunakan pembungkus Python ini untuk tujuan tersebut.

Jadi, setelah kami mendapat harga on-demand (katakanlah X), kami terpasang di if-elseblok gaya, yang 0.4*X, 0.6*X, 0.8*X, X, yang berarti kita berusaha untuk harga penawaran di kisaran 40%, 60%, 80% dari pada - harga permintaan. Jika semuanya gagal, maka kita kembali ke membuat instance on-demand.

Juga, karena ini terlepas dari penetapan harga spot AWS saat ini, kami tidak pernah membayar harga di atas harga berdasarkan permintaan.

Tetapi, jika Anda mencari cara untuk melakukannya dengan cepat, maka solusi Hashfyre harus menjadi cara untuk melakukannya.

Dawny33
sumber