Làm thế nào để bạn gắn thẻ và đặt tên cho Trường hợp EC2 được đưa ra bởi Yêu cầu tại chỗ EC2?


8

Tôi có một vài Yêu cầu tại chỗ EC2 khởi chạy EC2 Instances khi giá cả phù hợp. Tôi muốn các trường hợp kết quả được gắn thẻ a NameRoletag để công cụ quản lý cấu hình của tôi biết loại máy đó là gì.

CẬP NHẬT :

Tôi đã lấy lời khuyên của Hyper Anthony và thực hiện nó - vì việc bỏ phiếu sẽ dễ bị lỗi và tốn nhiều tài nguyên. Tôi đã thêm một tập lệnh khởi động vào AMI của mình để cập nhật các thẻ khi một phiên bản khởi chạy, đây là những bước tôi đã thực hiện:

Đảm bảo Boto được cài đặt trên bất kỳ AMI nào bạn đang sử dụng

pip install boto

Gán vai trò IAM cho trường hợp EC2

Ví dụ bạn khởi chạy phải có một số cách để truy cập thông tin về yêu cầu tại chỗ. Sử dụng vai trò IAM hoặc thay thế làm cho các khóa truy cập có sẵn cho cá thể của bạn. Chính sách mà tôi đã gắn với vai trò IAM mà tôi đã sử dụng là:

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

Chạy một kịch bản khi khởi động để cập nhật các thẻ

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)

Câu trả lời:


10

Yêu cầu phiên bản tại chỗ là một loại tài nguyên EC2. Tài liệu AWS lưu ý rằng loại tài nguyên này có thể được gắn thẻ , nhưng các thẻ kết quả không được chuyển sang các thể hiện thực tế:

Các thẻ mà bạn tạo cho các yêu cầu Instance của bạn chỉ áp dụng cho các yêu cầu. Các thẻ này không được thêm tự động vào Spot Instance mà dịch vụ Spot khởi chạy để đáp ứng yêu cầu. Bạn phải tự thêm thẻ vào Spot Instance khi bạn tạo yêu cầu Spot Instance hoặc sau khi Spot Instance được khởi chạy.

Vì vậy, bạn sẽ cần thêm các thẻ sau khi các phiên bản đã khởi chạy. Bạn có một số tùy chọn ở đây:

  • Tập lệnh dữ liệu người dùng trên phiên bản đã tạo: Viết tập lệnh dữ liệu người dùng sử dụng các công cụ dòng lệnh và dịch vụ dữ liệu meta EC2 để cho phép cá thể khám phá Id cá thể của nó và tạo các thẻ cho chính nó. Bạn có thể sử dụng thẻ tạo AWS CLI để gắn thẻ bất kỳ tài nguyên EC2 nào của bạn. Ngoài ra, bạn có thể nướng cái này vào AMI dưới dạng tập lệnh khởi động cho bất kỳ HĐH nào bạn định sử dụng. Trong cả hai trường hợp, cá thể sẽ phải có đủ quyền để tạo các thẻ EC2 cho chính nó.
  • Tiện ích bên ngoài theo dõi yêu cầu tại chỗ của bạn: Bạn có thể sử dụng một trong các SDK AWS để theo dõi yêu cầu tại chỗ của bạn và gắn thẻ các trường hợp sau khi chúng được tạo. AWS có một hướng dẫn về chính chủ đề này dưới tiêu đề "Cách gắn thẻ các yêu cầu và trường hợp tại chỗ của bạn". Không cần quá dài dòng, điều này chỉ đơn giản liên quan đến việc bỏ phiếu Mô tả các Yêu cầu sơ thẩm tại chỗ cho đến khi Id Instance được tạo có sẵn, sau đó gọi Tạo thẻ .


1

Một khả năng khác là sử dụng Ansible làm công cụ quản lý cấu hình của bạn. Trong mô-đun ec2, cho phép bạn kích hoạt cả hai trường hợp vòng đời tại chỗ và bình thường, bạn có thể thêm các thuộc tính "instance_tags" để tạo các thẻ. Một cuốn sách đơn giản sẽ là:


  - 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

Thật thú vị, khiếu nại của tôi là nó chỉ gắn thẻ cá thể và không gắn thẻ yêu cầu tại chỗ, ngược lại với vấn đề của bạn.


Nếu điều này không thể yêu cầu tại chỗ thời gian ra. Yêu cầu tại chỗ tồn tại bên trong AWS, nhưng điều gì xảy ra nếu ansible không còn tồn tại để gắn thẻ cá thể một khi nó đã hết? Tùy thuộc vào cách phần còn lại của playbook xử lý các trường hợp không được đánh dấu, có thể dẫn đến các trường hợp "zombie" không?
t1m0
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.