我正在尝试创建一个模板,该模板创建以下内容:
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属性需要哪些数据时,我发现我需要的数据是spot-ResourceID-request(类似于:"SpotFleetRequestId": "sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE")。
因此问题来了:由于我在与缩放策略相同的模板中创建现货车队请求,因此无法手动放入SpotFleetRequestId,因为据我所知,这是在资源是时创建的,并且无法预测请求ID是什么。在其他模板中,对于其他类型的资源,我只需使用"Ref"或"Fn::GetAtt"传入资源的arn,而无需手动输入。但是,使用SpotFleetRequestID似乎无法做到这一点。我所做的所有研究都没有发现任何结果,甚至没有一个使用我所描述的方法的模板示例-唯一可用的示例假设可伸缩的目标资源已经存在,并且在创建ScalingPolicy之前SpotFleetRequestID是已知的。
有没有人知道引用在同一模板中初始化的AWS::EC2::SpotFleet的SpotFleetRequestID是否可行?或者我只是遗漏了一些非常明显的东西?
-KungFuBilly
发布于 2017-02-23 05:32:08
事实证明,如果您使用"Ref"的逻辑名称,它将返回请求ID。然后,就需要使用"Fn::Join"为ResourceID获取正确的数据。应该看起来像这样:
"ResourceId": {
"Fn::Join": [
"/",
[
"spot-fleet-request",
{
"Ref": "SpotFleet"
}
]
]
},这将输出:spot-fleet-request/"SpotFleetRequestID"
https://stackoverflow.com/questions/42396605
复制相似问题