Come posso riutilizzare le risorse esistenti in CloudFormation?


32

Ho un bucket S3 come risorsa nel mio modello CloudFormation. Con DeletionPolicyimpostato su Retain. Funziona come previsto, quando si elimina lo stack, mantiene effettivamente il bucket. Tuttavia, quando tento di creare nuovamente lo stack, la creazione non riesce mentre si tenta di creare nuovamente lo stesso bucket, con un messaggio di errore che si lamenta che esiste già.

Cosa devo aggiungere al mio modello CloudFormation per non provare a ricreare una risorsa già esistente?

Il frammento rilevante del mio modello è il seguente:

  "Resources": {
    "SomeS3Bucket" : {
      "Type" : "AWS::S3::Bucket",
      "DeletionPolicy" : "Retain",
      "Properties": {
          "BucketName": "SomeS3Bucket"
          }
      }

per interesse, a cosa serve il secchio? Forse c'è un altro modo per aggirarlo a seconda di cosa stai cercando di fare.
Ha disegnato Khoury il

Risposte:


15

Un approccio consiste nell'aggiungere un parametro di input al modello CloudFormation per indicare che è necessario utilizzare un bucket esistente.

Utilizzare le clausole Condition nel modello per creare il bucket solo se il parametro indica che è necessario.


4
+1 finora questo è l'unico modo che ho visto. Non contrassegnandolo come risposta, però, perché sto davvero cercando un modo per automatizzarlo.
vartec,

1
Dovrebbe esserci un modo, in caso contrario: come funziona "CloudFormer"?
jgomo3,

7

CloudFormation utilizza tag con il prefisso "aws:" per tenere traccia di quali risorse sono associate a quali voci in quali stack - questo è lo stato "live" che utilizza per confrontare con un modello prima di decidere cosa aggiungere / eliminare / aggiornare.

Come utente, non puoi aggiungere, modificare o eliminare tali tag.

Quindi, se le tue risorse esistenti non hanno questi tag o non hanno i valori corretti per quei tag, allora non sono considerati parte del nuovo stack e non vedo un modo per cambiarlo.


2

Sto cercando di automatizzare anche questo, poiché sembra che non possa essere fatto solo con il modello Cloudformation. Il processo a cui sto pensando sarebbe:

  1. crea un altro bucket temporaneo temp-$originalbucketname
  2. copia tutto il contenuto lì a secchio per risparmiare tempo
  3. rimuovere tutto il contenuto da $originalbucketname
  4. rimuovere $ originalbucketname ora che è vuoto
  5. crea lo stack Cloudformation (che ricrea il bucket)
  6. copia il contenuto indietro
  7. rimuovere temp-$originalbucketname

Questo è un processo molto complicato, a seconda della dimensione del bucket potrebbe richiedere facilmente ore poiché la maggior parte dei passaggi sono O (n) con il numero di chiavi.

Penseresti che Cloudformation sia il livello base dell'automazione AWS, ma penso che sia solo un mostro (piuttosto limitato) che riunisce API bizantine per tutti i loro servizi.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.