typescript - AWS CDK genererar resursnamn som är för långa. Vad är anledningen?
Jag använder AWS CDK för att skapa infrastruktur och kod, men när jag distribuerade mina stackar var resursnamnen för långa. Till exempel, när en stack distribuerades var namnet något i stil med detta:
subnet-01b6cba6915f51b9d/NetworkStack/vpc/devvpc/compute-subnet-priv-a-devSubnet1
Jag skulle vilja ha den sista delen av namnet, eftersom det är mycket svårt att läsa och är hemskt. Det händer också med de logiska namnen.
Vet någon hur man kan förhindra eller åtgärda detta? Tack.
Psdt: Jag använder TS
En lösning i konfigurationsfilerna eller en nivåkod som använder AWS CDK
Svar #1
Faktiskt, de namn som kan erhållas genom CDK kan vara något komplicerade, jag ska berätta något som du skulle kunna verifiera, jag vet inte om du redan har gjort det men dessa namn kan anpassas.
Låt oss komma ihåg att CloudFormation finns i bakgrunden, vad dokumentationen säger och jag har sett i vissa fall är att ett fysiskt namn kan anges för när dessa resurser skapas, i fallet med Python kan det se ut ungefär så här.
bucket = s3.Bucket(self, "MyBucket", bucket_name="my-bucket-name")
På min sida gör jag det inte alltid, men självklart, om vi vill ha en implementation som är i linje med specifika standarder och nomenklaturer kommer det att vara nödvändigt, jag såg den här frågan på AWS re:Post och jag delar referensen så att du också kan ta en titt.
Det sagt, om du frågar mig varför de där slumpmässiga namnen, är det i slutändan vad CloudFormation gör när det inte får exakta instruktioner, detta stöds av motsvarande dokumentation, hälsningar.
Svar #2
Namnet består av det logiska ID:t och en hash som genereras av CloudFormation. Det logiska ID:t beräknas genom att sammanfoga konstruktions-ID:n i sökvägen (alla konstruktions-ID:n från den översta Stacken ner till resursen).
Du kan ange ditt eget riktiga namn, men detta avråds. Från bästa praxis-dokumentet:
Använd genererade resursnamn, inte fysiska namn
Namnen är en värdefull resurs. Varje namn kan bara användas en gång. Därför, om du hårdkodar ett tabellnamn eller ett bucket-namn i din infrastruktur och applikation, kan du inte distribuera den delen av infrastrukturen två gånger i samma konto. (Namnet vi talar om här är namnet som anges av till exempel bucketName-egenskapen på en Amazon S3-bucketkonstruktion.)
Vad som är värre är att du inte kan göra ändringar i resursen som kräver att den ersätts. Om en egenskap endast kan ställas in vid skapandet av resursen, såsom KeySchema för en Amazon DynamoDB-tabell, är den egenskapen oföränderlig. Att ändra denna egenskap kräver en ny resurs. Den nya resursen måste dock ha samma namn för att vara en verklig ersättning. Men den kan inte ha samma namn medan den befintliga resursen fortfarande använder det namnet.
Ett bättre tillvägagångssätt är att specificera så få namn som möjligt. Om du utelämnar resursnamn kommer AWS CDK att generera dem åt dig på ett sätt som inte orsakar problem. Anta att du har en tabell som en resurs. Du kan då skicka det genererade tabellnamnet som en miljövariabel till din AWS Lambda-funktion. I din AWS CDK-applikation kan du referera till tabellnamnet som table.tableName. Alternativt kan du generera en konfigurationsfil på din Amazon EC2-instans vid uppstart, eller skriva det faktiska tabellnamnet till AWS Systems Manager Parameter Store så att din applikation kan läsa det därifrån.
