Bagaimana Anda memberi tag dan memberi nama Instance EC2 yang diluncurkan oleh Permintaan Spot EC2?

8

Saya punya beberapa Permintaan Spot EC2 yang meluncurkan Instance EC2 ketika harganya tepat. Saya ingin contoh yang dihasilkan untuk ditandai dengan Namedan Roletag sehingga alat manajemen konfigurasi saya tahu jenis mesin itu.

PEMBARUAN :

Saya mengambil saran Hyper Anthony dan menerapkannya - karena polling akan cenderung rawan kesalahan dan intensif sumber daya, saya menambahkan skrip startup ke AMI saya yang memperbarui tag ketika sebuah instance diluncurkan, ini adalah langkah-langkah yang saya ambil:

Pastikan Boto diinstal pada AMI apa pun yang Anda gunakan

pip install boto

Tetapkan Peran IAM ke Mesin Virtual EC2

Contoh yang Anda luncurkan harus memiliki beberapa cara untuk mengakses informasi tentang permintaan tempat. Gunakan peran IAM atau buat kunci akses tersedia untuk instance Anda. Kebijakan yang saya lampirkan pada peran IAM yang saya gunakan adalah:

{
    "Statement": [
        {
            "Action": [
                "ec2:CreateTags",
                "ec2:DescribeTags",
                "ec2:DescribeInstances"
            ],
            "Effect": "Allow",
            "Resource": [
                "*"
            ],
            "Sid": "Stmt1432737176000"
        }
    ],
    "Version": "2012-10-17"
}

Jalankan skrip saat startup untuk memperbarui tag

def get_tags_from_spot_request():

    instance_id = boto.utils.get_instance_identity()['document']['instanceId']
    region = boto.utils.get_instance_identity()['document']['region']
    conn = boto.ec2.connect_to_region(region)
    inst = boto.ec2.instance.Instance(connection=conn)
    inst.id = instance_id
    inst.update()
    spot_id = inst.spot_instance_request_id
    tags = conn.get_all_tags(filters={'resource-type': 'spot-instances-request', 'resource-id': spot_id})
    for tag in tags:
        inst.add_tag(tag.name, tag.value)
kita sendiri
sumber

Jawaban:

10

Permintaan instance Instans adalah jenis sumber daya EC2. Dokumentasi AWS mencatat bahwa jenis sumber daya ini dapat ditandai , tetapi tag yang dihasilkan tidak dibawa ke instance aktual:

Tag yang Anda buat untuk permintaan Spot Instance Anda hanya berlaku untuk permintaan. Tag ini tidak ditambahkan secara otomatis ke Instance Spot yang diluncurkan layanan Spot untuk memenuhi permintaan. Anda harus menambahkan sendiri tag ke Instance Spot ketika Anda membuat permintaan Instance Spot atau setelah Instance Spot diluncurkan.

Jadi, Anda harus menambahkan tag setelah instans diluncurkan. Anda memiliki beberapa opsi di sini:

  • Skrip Data Pengguna pada instance yang dibuat: Tulis skrip data pengguna yang menggunakan alat baris perintah dan layanan data meta EC2 untuk memungkinkan instance menemukan id instance dan membuat tag untuk dirinya sendiri. Anda dapat menggunakan AWS CLI create-tag untuk menandai salah satu sumber daya EC2 Anda. Atau, Anda bisa memanggang ini ke dalam AMI sebagai skrip startup untuk OS apa pun yang ingin Anda gunakan. Dalam situasi apa pun, instance harus memiliki izin yang memadai untuk membuat tag EC2 untuk dirinya sendiri.
  • Utilitas Eksternal yang memantau permintaan tempat Anda : Anda dapat menggunakan salah satu AWS SDK untuk memantau permintaan tempat Anda dan menandai instans setelah dibuat. AWS memiliki tutorial tentang topik ini di bawah tajuk "Cara Menandai Permintaan dan Instansi Spot" Anda. Tanpa terlalu bertele-tele, ini hanya melibatkan polling Jelaskan Permintaan Instance Spot sampai Id Instance dibuat tersedia, dan kemudian memanggil Buat Tag .
Anthony Neace
sumber
1

Kemungkinan lain adalah menggunakan Ansible sebagai alat manajemen konfigurasi Anda. Dalam modul EC2, yang memungkinkan Anda untuk mengaktifkan instance siklus hidup spot dan normal, Anda dapat menambahkan atribut "instance_tags" untuk membuat tag. Buku pedoman sederhana adalah:


  - name: Provision Spot Instance
    hosts: localhost
    connection: local
    gather_facts: False
    tasks:
      - name: Launch the new Spot Instance
        local_action:
          module: ec2
          spot_price: 0.02
          group: testSG
          instance_type: m3.medium
          image: ami-12345
          wait: true
          instance_tags:
            Name: TagValueForName
            Foo: TagValueForFoo
          region: us-east-1
          keypair: mykeypair

Yang cukup menarik, keluhan saya adalah bahwa ia hanya memberi tag instance dan tidak menandai permintaan spot, kebalikan dari masalah Anda.

efreedom
sumber
Jika permintaan tempat yang memungkinkan ini habis waktu. Permintaan spot tinggal di dalam AWS, tetapi apa yang terjadi jika ansible tidak lagi hidup untuk menandai instance begitu terserah? Bergantung pada bagaimana sisa playbook menangani instance yang tidak ditandai, dapat menyebabkan instance "zombie"?
t1m0