Stiamo adattando le nostre applicazioni modello CloudFormation per utilizzare VPC. All'interno di questo modello abbiamo bisogno di generare in modo programmatico i blocchi CIDR utilizzati per le nostre subnet VPC, al fine di garantire che non siano in conflitto tra gli stack CloudFormation.Generazione di subnet CIDR in blocchi a livello di codice nei modelli CloudFormation (o aggiunta di interi insieme)
Il mio piano iniziale era stato quello di generare i CIDRs di stringhe di concatenare insieme, per esempio:
"ProxyLoadBalancerSubnetA" : {
"Type" : "AWS::EC2::Subnet",
"Properties" : {
"VpcId" : { "Ref" : "Vpc" },
"AvailabilityZone" : "eu-west-1a",
"CidrBlock" : { "Fn::Join" : [ ".", [ { "Ref" : "VpcCidrPrefix" }, "0.0/24" ] ] }
}
},
Su un ulteriore esame però, abbiamo bisogno di usare un singolo VPC piuttosto che avere un VPC per ciascuno dei nostri pile .
AWS limita i VPC a utilizzare un massimo di un blocco CIDR /16
(è stato chiesto di aumentare questo limite, ma apparentemente non è possibile). Ciò significa che non è più possibile utilizzare questo metodo di concatenazione poiché ciascuno dei nostri stack richiede subnet che si estendono su più di 255 indirizzi in totale.
vorrei generare i blocchi CIDR on-the-fly, piuttosto che dover definirli come parametri al modello CloudFormation,
Un'idea che avevo era ogni pila avere un "integer base" e aggiungendo a quello per il blocco CIDR di ciascuna sottorete.
Ad esempio:
"CidrBlock" : { "Fn::Join" : [ ".", [ { "Ref" : "VpcCidrPrefix" }, { "Fn::Sum", [ { "Ref" : "VpcCidrStart" }, 3 ] }, "0/24 ] ] }
Dove VpcCidrStart
è un numero intero che imposta il valore che il terzo ottetto CIDR dovrebbe iniziare all'interno dello script, e 3
è il numero di sottorete.
Ovviamente la funzione intrinseca Fn::Sum
non esiste, quindi volevo sapere se qualcuno aveva una soluzione per aggiungere interi in VPC (sembra qualcosa che non dovrebbe essere possibile, dato che CloudFormation è orientato a stringhe), o una soluzione migliore a questo enigma in generale.
avevo già iniziato a lavorare su un Applicazione "Stack Manager" per gestire le condizioni in cui gli ambienti di staging e produzione richiedono un setup leggermente diverso e per automatizzare gli "spegni" degli ambienti non di produzione di notte - quindi penso che questa soluzione abbia senso per noi. Peccato che CloudFormation manchi comunque di queste funzionalità in modo nativo. – roberthl
Se non lo hai già fatto, sarebbe probabilmente una buona idea descrivere il tuo caso d'uso e presentare la tua richiesta di funzionalità sul forum ufficiale [Forum AWS CloudFormation] (https://forums.aws.amazon.com/forum. jspa? forumID = 92). So che il team di sviluppo gestisce il supporto lì. –
So che è passato un po 'di tempo, ma l'ho implementato e di recente [pubblicato su GitHub] (https://github.com/royaloperahouse/stack-manager). AWS ha recentemente aggiunto la logica e la matematica di base a CloudFormation, ma è piuttosto ingombrante. – roberthl