2016-03-11 38 views
2

如果您部署創建kinesis流的cloudformation,如何將輸出(例如arn)提供給在相同部署中創建的lambda。在無服務器創建lambda表達式之前是否會發生cf,並且有沒有辦法將lambdata中的cloudformation值存儲?如何在無服務器框架內使用雲信息輸出?

+0

從5.0版本開始。我能夠使用。 sls資源部署 sls功能部署 關於訪問cf輸出。這是通過通過$ {myValue}從s-resources-cf.json引用輸出值,然後通過「SERVERLESS_MYVALUE」將該值映射到s-function-cf.json中的環境變量來完成的:$ {myValue} – Josh

回答

0

從無服務器的角度來看,您在這裏部署的步驟是什麼?對於問題的第一部分,我相信你可以通過'sls resources deploy'部署所有CF相關資源,然後執行'sls function deploy'或者'sls dash deploy'來部署lambda函數。所以從技術上講,資源部署(CF)實際上並不部署lambda函數。

對於問題的第二部分,如果您有一個使用案例,您希望使用創建的CF資源的輸出,(現在),此feature已被添加/合併到v0.5的尚未發佈的無服務器。

3

要從CloudFormation模板「s-resource-cf.json」中存儲Arn,請將一些項目添加到「Outputs」部分。

"Outputs": { 
    "InsertVariableNameForLaterUse": { 
    "Description": "This is the Arn of My new Kinesis Stream", 
    "Value": { 
     "Fn::GetAtt": [ 
     "InsertNameOfCfSectionToFindArnOf", 
     "Arn" 
     ] 
    } 
    } 
    } 

Fn::GetAtt是CF中的一個函數,用於從另一個創建的資源中獲取引用。

當您使用serverless resources deploy -s dev -r eu-west-1部署CF模板時,將爲該階段/區域創建Kinesis流,並將Arn保存到區域屬性文件/_meta/resources/variables/s-variables-dev-euwest1.json中。請注意初始大寫變化insertVariableNameForLaterUse

然後可以使用,在功能的s-function.json${insertVariableNameForLaterUse},如環境部:

var myKinesisStreamArn = process.env.InsertVariableNameWeWantToUseInLambda; 

CloudFormation情況:

"environment": { 
    "InsertVariableNameWeWantToUseInLambda": "${insertVariableNameForLaterUse}" 
    ... 
} 

和參考使用這樣的變量在您的LAMBDA在Lambda部署之前。雖然你應該用腳本控制它,而不是僅僅使用儀表板:

serverless resources deploy -s dev -r eu-west-1 
serverless function deploy --a -s dev -r eu-west-1 
serverless endpoint deploy --a -s dev -r eu-west-1 

希望有幫助。

相關問題