2016-05-04 17 views
2

Ich erstelle mit AWS CloudFormation eine Reihe von Anwendungsressourcen. Wenn die Ressourcen erstellt werden, fügt CloudFormation einen Hash am Ende des Namens hinzu, um es eindeutig zu machen.Programmgesteuertes Verwenden von Ressourcen, die mit CloudFormation erstellt wurden

d. Wenn Sie einen Kinesis-Stream-Namen MyStream erstellen wollten, wäre der tatsächliche Name etwas wie my-stack-MyStream-1F8ISNCLP0W4O.

Ich möchte programmgesteuert auf die Ressourcen zugreifen können, ohne den Hash kennen zu müssen, ohne AWS nach meinen Ressourcen abfragen zu müssen, um die Namen selbst und ohne manuelle Schritte abzugleichen. Kennt jemand eine bequeme Möglichkeit, AWS-Ressourcen in Ihrer Anwendung programmgesteuert und vorhersehbar zu verwenden?

Hier sind die weniger idealen Möglichkeiten ich denken kann:

  1. einen Tag auf der Ressource Set (das heißt name -> MyStream) und AWS abfragen, um die tatsächlichen Ressourcennamen zu erhalten.
  2. Fragen Sie AWS nach einer Liste von Ressourcennamen und suchen Sie nach einer Teilübereinstimmung für den erwarteten Namen.
  3. Nachdem Sie Ihre Ressourcen erstellen, kopieren Sie manuell die tatsächlichen Namen in Ihre Konfigurationsdatei (wahrscheinlich die vernünftigste diese Optionen)
+0

Nummer 3 ist, was wir getan haben. Wir greifen einfach die Ausgaben vom Stapel und schreiben jedes Schlüssel/Wert-Paar in eine Datei, die von bash bezogen wird. Dann sind diese Ausgaben immer vom 'process.env' Objekt verfügbar. – idbehold

Antwort

2

Sie können den Cloudformation-API verwenden, um eine Liste der Ressourcen in Ihrem Stapel zu erhalten. Dadurch erhalten Sie eine Liste von logischen IDs (d. H. Den Namen in Ihrer CloudFormation-Vorlage ohne den Hash) und übereinstimmende physische IDs (mit dem Stacknamen und Hash). Mit Hilfe des AWS CLI, dies zeigt eine Zuordnung zwischen den beiden ids:

aws cloudformation describe-stack-resources 
    --query StackResources[].[LogicalResourceId,PhysicalResourceId] 
    --stack-name <my-stack> 

Cloudformation APIs die gleiche Abfrage zu tun, ist in allen verschiedenen Spricht SDKs zur Verfügung gestellt von Amazon zur Verfügung gestellt.

Sie können dies als Alternative zu # 1 verwenden, indem Sie CloudFormation zur Laufzeit abfragen, oder # 3, indem Sie CloudFormation zur Buildtime abfragen und die Ergebnisse in eine Konfigurationsdatei einbetten. Ich sehe keinen Vorteil darin, Ihre eigenen Tags zu verwenden, anstatt einfach die CF-API abzufragen. # 2 wird zu Problemen führen, wenn zwei oder mehr Stapel von derselben Vorlage nebeneinander existieren sollen.

Ich habe sowohl die Laufzeit-und Build-Zeit-Ansätze verwendet. Mit dem Build-Time-Ansatz können Sie die Abhängigkeit von oder das Wissen über CloudFormation entfernen, müssen jedoch bestimmte Informationen in Ihrer Konfigurationsdatei stapeln. Ich mag den Laufzeitansatz, um zu ermöglichen, dass derselbe Build auf mehreren Stapeln bereitgestellt wird, und dass nur der Stapelname benötigt wird, um alle zugehörigen Ressourcen zu finden.

+0

Ich habe mit der CloudFormation-API '' describe-stack-resources' herumgespielt und stimme zu, dass es eine Verbesserung bei der direkten Abfrage von Diensten darstellt. Wenn Sie den Hash am Ende ausschließen können, können Sie einfach den Ressourcennamen im laufenden Betrieb erstellen, aber das ist noch kein Feature. – EmptyArsenal

Verwandte Themen