2017-04-21 18 views
0

我正在使用两个自定义资源在我的cloudFormation模板中。基本上这些自定义资源是具有自定义代码的lambda函数。我想开始创建第二lambda恒定3分钟创建具有恒定超时的cloudFormation waitCondition

我以为使用cloudFormation的WaitCondition超时属性来解决这个问题。但它需要一个WaitHandle的具有超时前收到成功信号。一旦接收到信号,WaitCondition就会转到Create-Complete。但在我的情况下,我不能让自定义函数发送信号等待句柄。在完成第一个自定义资源后,我需要持续3分钟的等待时间。然后,后开始第二个自定义资源创建创建完成WaitCondition的这里是我的代码:

"SecondCustomResource": { 
    "Type": "Custom::SecondCustomResource", 
    "DependsOn" : "WaitCondition", 
    "Properties": { 
    "ServiceToken": { "Fn::GetAtt" : ["SecondCustomResourceFunction", "Arn"] } 
    } 
}, 


"SecondCustomResourceFunction": { 
    "Type": "AWS::Lambda::Function", 
    "Properties": { 
    "Code": { 
     "S3Bucket": { "Ref": "S3Bucket" }, 
     "S3Key": { "Ref": "S3Key" } 
    }, 
    "Handler": { "Fn::Join" : [ "", [{ "Ref": "ModuleName" },".handler"] ] }, 
    "Runtime": "nodejs4.3", 
    "Timeout": "30" 
    } 
}, 


"WaitCondition": { 
    "Type" : "AWS::CloudFormation::WaitCondition", 
    "DependsOn" : "FirstCustomResource", 
    "Properties": { 
    "Timeout": "180" 
    } 
}, 


"FirstCustomResource": { 
    "Type": "Custom::FirstCustomResource", 
    "Properties": { 
    "ServiceToken": { "Fn::GetAtt" : ["FirstCustomResourceFunction", "Arn"] } 
    } 
}, 


"FirstCustomResourceFunction": { 
    "Type": "AWS::Lambda::Function", 
    "Properties": { 
    "Code": { 
     "S3Bucket": { "Ref": "S3Bucket" }, 
     "S3Key": { "Ref": "S3Key" } 
    }, 
    "Handler": { "Fn::Join" : [ "", [{ "Ref": "ModuleName" },".handler"] ] }, 
    "Runtime": "nodejs4.3", 
    "Timeout": "30" 
    } 
} 

这似乎并不奏效。任何破解或解决方法都有一个恒定的WaitCondition?

+1

你有没有在堆栈中,可以提供“休眠”的实例,然后将信号处理? –

+0

不,我正在自定义函数中部署一个kubernetes集群。从Google云发送成功信号很困难。 –

回答

0

你为什么要等整整三分钟呢?

+0

群集需要大约3分钟才能启动。一旦运行,我需要在集群内部署Pod。因此,我正在使用第二个自定义资源来执行此操作 –

+0

我不确切知道kubernetes集群是什么以及您如何在AWS CloudFormation上实施它,但没有基于它的EC2实例?您能不能发出完成后的WaitHandle完成信号?使用cfn-signal? –

+0

所以这里是:自定义资源在谷歌云中部署集群(Kinda AWS ECS服务)。来自谷歌计算实例的信号很难。我只想在我的第一个和第二个自定义资源之间等待3分钟。这可能吗 ? –

0

我只是想我的第一个和第二个自定义资源之间的恒定3分钟等待时间。这可能吗 ? < <

可能。我想你会想通过做这两件事来尝试。 1.将“休眠”功能到该休眠信令成功之前3分钟FirstCustomResourceFunction。看到这个,超级重要的,寻找“SUCCESS”http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lambda-function-code.html

  1. 让SecondCustomResourceFunction依赖于FirstCustomResource。这样它才会开始,直到FirstCustomResource完成(又名睡眠,然后成功)。

我想你可以摆脱WaitConditions的然后。

请注意,“所有对AWS Lambda的调用都必须在300秒内完成执行”。 (https://aws.amazon.com/lambda/faqs/)所以,如果你的部署增长了60%,那么你很可能已经熟了。 (这是我试图让您远离使用Lambda作为等待状态的原因之一)。我真的会试图找到一些更好的方法。在DevOps的15年中,我从来没有达到“恒值等待状态”,这是一个成功的长期解决方案。

+0

有趣!我认为这一点,但是当我在Lambda内部等待群集将状态更改为Running时,它将会非常昂贵。我理解你对持续3分钟的关注,我想我必须想出其他解决方案。 –