2017-04-21 21 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分鐘的關注,我想我必須想出其他解決方案。 –