EC2 스팟 요청에 의해 시작된 EC2 인스턴스에 태그를 지정하고 이름을 어떻게 지정합니까?


8

가격이 적당 할 때 EC2 인스턴스를 시작하는 몇 가지 EC2 스팟 요청이 있습니다. 결과 인스턴스에 NameRole태그가 지정되어 구성 관리 도구가 어떤 유형의 머신인지 알 수 있기 를 원합니다 .

업데이트 :

Hyper Anthony의 조언을 받아 구현했습니다. 폴링은 오류가 발생하기 쉽고 리소스를 많이 사용하기 때문에 인스턴스가 시작될 때 태그를 업데이트하는 시작 스크립트를 AMI에 추가했습니다.

사용중인 AMI에 Boto가 설치되어 있는지 확인

pip install boto

EC2 인스턴스에 IAM 역할 할당

시작하는 인스턴스는 스팟 요청에 대한 정보에 액세스 할 수있는 방법이 있어야합니다. IAM 역할을 사용하거나 인스턴스에서 액세스 키를 사용할 수있게하십시오. 내가 사용한 IAM 역할에 첨부 한 정책은 다음과 같습니다.

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

시작할 때 스크립트를 실행하여 태그를 업데이트하십시오.

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)

답변:


10

스팟 인스턴스 요청은 EC2 리소스 유형입니다. AWS 설명서에 따르면이 유형의 리소스에 태그를 지정할 수 있지만 결과 태그는 실제 인스턴스로 이전되지 않습니다.

스팟 인스턴스 요청에 대해 생성 한 태그는 요청에만 적용됩니다. 이 태그는 스팟 서비스가 요청을 이행하기 위해 시작하는 스팟 인스턴스에 자동으로 추가되지 않습니다. 스팟 인스턴스 요청을 생성 할 때 또는 스팟 인스턴스가 시작된 후 스팟 인스턴스에 직접 태그를 추가해야합니다.

따라서 인스턴스가 시작된 후 태그를 추가해야합니다. 여기 몇 가지 옵션이 있습니다.

  • 작성된 인스턴스 의 사용자 데이터 스크립트 : 명령 행 도구 및 EC2 메타 데이터 서비스 를 사용하여 인스턴스가 인스턴스 ID를 발견하고 자체 태그를 작성할 수 있도록 하는 사용자 데이터 스크립트를 작성하십시오. AWS CLI 생성 태그 를 사용하여 EC2 리소스에 태그 를 지정할 수 있습니다. 또는 사용하려는 모든 OS의 시작 스크립트로 AMI에이를 구울 수 있습니다. 두 경우 모두 인스턴스에 EC2 태그를 생성 할 수 있는 충분한 권한있어야 합니다.
  • 스팟 요청을 모니터링하는 외부 유틸리티 : AWS SDK 중 하나를 사용하여 스팟 요청을 모니터링하고 생성 된 인스턴스에 태그를 지정할 수 있습니다. AWS "스팟 요청 및 인스턴스에 태그를 지정하는 방법"헤더 아래 에서이 주제에 대한 자습서를 제공합니다 . 너무 자세한 정보를 얻지 않고 생성 된 인스턴스 ID를 사용할 수있을 때까지 설명 스팟 인스턴스 요청을 폴링 한 다음 태그 생성 을 호출하면 됩니다.


1

또 다른 가능성은 Ansible을 구성 관리 도구로 사용하는 것입니다. 스팟 및 일반 라이프 사이클 인스턴스를 모두 실행할 수있는 ec2 모듈에서 "instance_tags"속성을 추가하여 태그를 만들 수 있습니다. 간단한 플레이 북은 다음과 같습니다.


  - 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

흥미롭게도 내 불만은 인스턴스에만 태그를 지정하고 문제와는 반대로 스팟 요청에 태그를 지정하지 않는다는 것입니다.


이 가능한 스팟 요청이 시간 초과되는 경우. 스팟 요청은 AWS 내부에 존재하지만 인스턴스가 활성화 된 후 더 이상 인스턴스에 태그를 지정하지 않으면 어떻게됩니까? 나머지 플레이 북이 태그없는 인스턴스를 처리하는 방법에 따라 "좀비"인스턴스가 발생할 수 있습니까?
t1m0
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.