Abbiamo un modello CloudFormation che crea un'istanza EC2 e di un gruppo di protezione (tra molte altre risorse), ma abbiamo bisogno di essere in grado di aggiungere qualche ulteriore preesistente gruppi di sicurezza per la stessa istanza EC2.Aggiungere un elenco sconosciuta dimensioni dei gruppi di protezione a un'istanza EC2
Il problema che abbiamo è che il numero di pre-esistenti gruppi di protezione non sarà sempre lo stesso, e vogliamo avere un unico modello che gestirà tutti i casi.
Attualmente, abbiamo un parametro di input che assomiglia a questo:
"WebTierSgAdditional": {
"Type": "String",
"Default": "",
"Description": ""
}
Passiamo In questo parametro è una stringa delimitata da virgole di gruppi di protezione pre-esistenti, come ad esempio 'sg-abc123,sg-abc456'
.
Il tag SecurityGroup dell'istanza EC2 simile a questa:
"SecurityGroups": [
{
"Ref": "WebSg"
},
{
"Ref": "WebTierSgAdditional"
}
]
Con questo codice, quando l'istanza viene creato, otteniamo questo errore nella console AWS:
necessario utilizzare usa group-id o group-name per tutti i gruppi di sicurezza, non entrambi allo stesso tempo
Il riferimento sopra "WebSg" è uno dei gruppi di sicurezza che sono cr mangiato altrove nel modello. Questo stesso errore appare se passiamo in un elenco di nomi di gruppi piuttosto che in un elenco di Id di gruppo attraverso il parametro di input.
Quando cambiamo il campo "Tipo" del parametro di ingresso di essere 'CommaDelimitedList', otteniamo un errore dicendo:
Valore della SecurityGroups proprietà deve essere di tipo List di String
Ovviamente non è possibile unire una lista con una stringa per renderla una nuova lista.
Quando il parametro contiene un solo sg id, tutto viene creato con successo, però, abbiamo bisogno di avere la capacità di aggiungere più di un solo sg id.
Abbiamo provato molte combinazioni diverse di utilizzo Fn::Join
all'interno del tag SecurityGroups, ma nulla sembra funzionare. Quello di cui abbiamo veramente bisogno è una sorta di funzione 'Esplodi' per estrarre i singoli ID dalla stringa dei parametri.
Qualcuno sa di un bel modo per ottenere questo lavoro?
Il motivo è, per le istanze in EC2-classico, è necessario fornire il nome SG mentre le istanze all'interno di VPC, è necessario fornire SG ID. Quindi l'errore 'Devi usare sia l'id di gruppo o il nome di gruppo per tutti i gruppi di sicurezza, non entrambi allo stesso tempo 'è semplice. In altre parole, puoi avere l'istanza in esecuzione in EC2-classic OR in VPC ... ma non in entrambi. È necessario escogitare un altro approccio per passare solo il nome SG o solo gli ID SG all'istanza. – slayedbylucifer
I nostri gruppi di sicurezza sono creati all'interno di un VPC, quindi la funzione 'Rif' restituisce l'ID SG, non il nome SG. Il problema sembra essere che Cloudformation stia interpretando il nostro parametro stringa di ids ('sg-abc123, sg-abc456') come un nome SG, e dobbiamo in qualche modo convertirlo in un elenco di SG ID –