2

Ich verwende das Beispiel von Walkthrough: Refer to Resources in Another Stack, um Ressourcen von einem anderen Stapel (was ich denke, ist unglaublich nützlich und sollte eine Out-of-the-Box-Funktion sein). Das Beispiel scheint jedoch nicht mit Aktualisierungen zu arbeiten, d. H. Wenn dem referenzierten Stapel eine neue Ausgabe hinzugefügt wurde.CloudFormation-Update-Unterstützung für "Ressourcen in einem anderen Stapel"

Interessanterweise wird die Lambda-Funktion nicht einmal entsprechend Logs und Metriken aufgerufen, so dass es kein Problem scheint, das im Code behoben werden kann. Ich denke jedoch, dass der Code eine andere PhysicalResourceId on update wie Replacing a Custom Resource During an Update verwenden sollte.

Hinweis: wenn eine seiner Eigenschaften ändert dies ist eine Quer Post von einem unanswered AWS Forum thread

Antwort

2

Es stellt sich heraus, dass nur eine benutzerdefinierte Cloudformation Ressource nicht aktualisiert. Sobald dies geschieht, sollte die benutzerdefinierte Ressource signalisieren, dass sie sich geändert hat. So

ersetzen:

response.send(event, context, response.SUCCESS, responseData); 

mit

var crypto = require('crypto'); 
var hash = crypto.createHash('md5').update(JSON.stringify(responseData)).digest('hex'); 
response.send(event, context, response.SUCCESS, responseData, hash); 

dies in folgenden Ereignisse während einer Aktualisierung führen:

15:08:16 UTC+0200 UPDATE_COMPLETE  Custom::NetworkInfo NetworkInfo 
15:08:15 UTC+0200 UPDATE_IN_PROGRESS Custom::NetworkInfo NetworkInfo Requested update required the provider to create a new physical resource 
15:08:08 UTC+0200 UPDATE_IN_PROGRESS Custom::NetworkInfo NetworkInfo 

Dies erfordert noch eine Eigenschaft jedoch geändert werden. Das Beste, was ich kam mit war einen Pseudozufallsparameter an die benutzerdefinierten Ressource übergeben:

{ 
    "Parameters": { 
    "Random": { 
     "Description": "Random value to force stack-outputs update", 
     "Type": "String" 
    } 
    }, 
    "Resources": { 
    "NetworkInfo": { 
     "Type": "Custom::NetworkInfo", 
     "Properties": { 
     "ServiceToken": { "Fn::GetAtt" : ["LookupStackOutputs", "Arn"] }, 
     "Random": { "Ref": "Random" }, 
     "StackName": { "Ref": "NetworkStackName" } 
     } 
    } 
    } 
} 

Unbekannter Parameter (d Random) wird einfach durch die Lambda-Funktion ignoriert.

Verwandte Themen