Как в шаблоне AWS CloudFormation пометить экземпляр EC2 его собственным идентификатором, не получая ошибок циклической ссылки?

Я указал экземпляр EC2 в моем шаблоне CloudFormation и хочу пометить его собственным InstanceId, например:

"Resources": {
    "myInstance": {
        ...
        "Tags": [
            { "Key": "instance.id", "Value": { "Ref": "myInstance" } },
            ...
        ]
    }
}

Но попытка создать стек из этого шаблона генерирует AmazonCloudFormationException: «Циклическая зависимость между ресурсами: [myInstance]»

Запустить экземпляры и пометить их с помощью API EC2 очень просто:

//this is C#, but that's not significant

var instance = ec2Client.RunInstances(...) ...;
var id = instance.InstanceId;
ec2Client.CreateTags(new CreateTagRequest
{
    Resources = { id },
    Tags = { new Tag { Key = "instance.id", Value = id } }
});

Этот подход естественным образом вытекает из того факта, что теги экземпляра не могут быть созданы как часть операции RunInstances, поэтому все теги, а не только собственный идентификатор, должны применяться в последующей операции API.

Итак ... могу ли я сделать то же самое с помощью CloudFormation? Спасибо большое!

(размещено на форумах AWS)


person David Rubin    schedule 13.05.2015    source источник
comment
Какова цель этого тега?   -  person bsvingen    schedule 13.05.2015


Ответы (2)


Я не думаю, что ты сможешь. CloudFormation позволяет пометить ресурс только во время создания, и значение желаемого тега не существует до тех пор, пока ресурс не будет создан.

Но я не думаю, что это должно быть проблемой. Я могу придумать два варианта использования тегов: просмотр экземпляра и просмотр значений тегов или поиск экземпляров с определенными значениями тегов. Вы можете увидеть или найти по идентификатору экземпляра, не имея тега, содержащего его.

person Charles Engelke    schedule 13.05.2015

Вы всегда можете создать сценарий запуска, который обновит тег экземпляра после запуска. Вы можете использовать следующее (AWS CLI):

aws ec2 create-tags --resources `wget -q -O - http://169.254.169.254/latest/meta-data/instance-id` --tags Key=id,Value=`wget -q -O - http://169.254.169.254/latest/meta-data/instance-id`

Однако, если вы хотите использовать только идентификатор экземпляра внутри своего приложения, вы можете использовать wget -q -O - http://169.254.169.254/latest/meta-data/instance-id для получения идентификатора экземпляра.

person cloudxpert    schedule 05.06.2015