2017-02-22 13 views
1

Я пытаюсь создать единый шаблон, который создает следующие:CloudFormation Template - любой способ получить идентификатор идентификатора Spot-Fleet-Request?

AWS :: EC2 :: SpotFleet ресурс 2 AWS :: ApplicationAutoScaling :: ScalingPolicy ресурсы (масштабы, масштаб вниз)

Первоначально , мой шаблон включал только ресурс SpotFleet, и я подтвердил, что стек создаст без проблем. Когда я добавлю ресурсы ScalingPolicy, стек будет откатываться из-за отсутствия «Нет масштабируемой цели, зарегистрированной для пространства имен ...» Итак, я добавил дополнительный ресурс.

AWS :: ApplicationAutoScaling :: ScalableTarget ресурс. (от http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-applicationautoscaling-scalabletarget.html#cfn-applicationautoscaling-scalabletarget-resourceid)

{ 
    "Type" : "AWS::ApplicationAutoScaling::ScalableTarget", 
    "Properties" : { 
    "MaxCapacity" : Integer, 
    "MinCapacity" : Integer, 
    "ResourceId" : String, 
    "RoleARN" : String, 
    "ScalableDimension" : String, 
    "ServiceNamespace" : String 
    } 
} 

ResourceId является необходимым свойством. У меня есть данные для всех других свойств, но при исследовании того, какие данные необходимы для свойства ResourceID, я обнаружил, что мне нужны данные идентификатора места-флота, (что-то вроде этого: "SpotFleetRequestId": "sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE").

Итак, вот в чем проблема: поскольку я создаю запрос спот-флота в том же шаблоне, что и политика масштабирования, я не могу поместить SpotFleetRequestId вручную, поскольку, насколько мне известно, это создается, когда ресурс есть, и нет никакого способа предвидеть, что Идентификатор запроса будет. В других шаблонах с другими видами ресурсов я просто использовал "Ref" или "Fn::GetAtt" для передачи в arn ресурса без необходимости вручную вводить это. Однако, похоже, нет способа сделать это это с помощью SpotFleetRequestID. Все проведенные мной исследования ни к чему не привели, даже не один пример шаблона, который использует метод, как я описываю - единственные доступные примеры предполагают, что масштабируемый целевой ресурс уже существует, а SpotFleetRequestID известен до создания ScalingPolicy.

Есть ли у кого-нибудь идеи, если возможно даже обращение к SpotFleetRequestID из AWS :: EC2 :: SpotFleet, инициализированное в том же шаблоне? Или я просто пропущу что-то ДЕЙСТВИТЕЛЬНО очевидное?

-KungFuBilly

ответ

1

Оказывается, что если вы "Ref" логическое имя AWS :: EC2 :: SpotFleet он возвращает идентификатор запроса. Затем нужно использовать "Fn::Join", чтобы получить нужные данные для ResourceID. Должно выглядеть примерно так:

"ResourceId": { 
       "Fn::Join": [ 
        "/", 
        [ 
         "spot-fleet-request", 
         { 
          "Ref": "SpotFleet" 
         } 
        ] 
       ] 
      }, 

Это будет: spot-fleet-request/"SpotFleetRequestID"

Смежные вопросы