Estou trabalhando no AWS CloudFormation e criei um modelo no qual pedi ao usuário para selecionar Ambiente.
Com base no valor selecionado, criei os recursos. O usuário precisa selecionar entre DEV, QA, PROD, UAT etc., mas quando eu sufixo esse valor no nome do bloco S3 (-downloads.com), não é permitido porque letras maiúsculas não são permitidas no nome do bloco S3.
Então mudei no JSON, onde uso fn :: Transform com "Condition": "Lower" mas ocorre a criação de recursos abaixo do erro.
Nenhuma transformação denominada 871247504605 :: String encontrada. Reversão solicitada pelo usuário.
Abaixo está meu CloudFormation JSON
{
"AWSTemplateFormatVersion": "2010-09-09",
"Description": "Provides nesting for required stacks to deploy a full resource of ****",
"Metadata": {
"AWS::CloudFormation::Interface": {
"ParameterGroups": [
{
"Label": {
"default": "Enviroment Selection"
},
"Parameters": [
"selectedEnv"
]
}
],
"ParameterLabels": {
"selectedEnv": {
"default": "Please select Enviroment"
}
}
}
},
"Parameters": {
"selectedEnv": {
"Type": "String",
"Default": "DEV",
"AllowedValues": [
"DEV",
"QA",
"UAT",
"PROD"
]
}
},
"Resources": {
"S3BucketName": {
"Type": "AWS::S3::Bucket",
"Properties": {
"BucketName": {
"Fn::Join": [
"",
[
{
"Fn::Transform": {
"Name": "MyString",
"Parameters": {
"InputString": {
"Ref": "selectedEnv"
},
"Operation": "Lower"
}
}
},
"-deployment.companyname.com"
]
]
},
"PublicAccessBlockConfiguration": {
"BlockPublicAcls": "true",
"BlockPublicPolicy": "true",
"IgnorePublicAcls": "true",
"RestrictPublicBuckets": "true"
},
"Tags": [
{
"Key": "ENV",
"Value": {
"Ref": "selectedEnv"
}
},
{
"Key": "Name",
"Value": {
"Fn::Join": [
"",
[
{
"Ref": "selectedEnv"
},
"deployments"
]
]
}
}
]
},
"Metadata": {
"AWS::CloudFormation::Designer": {
"id": "c81705e6-6c88-4a3d-bc49-80d8736bd88e"
}
}
},
"QueueForIOT": {
"Type": "AWS::SQS::Queue",
"Properties": {
"QueueName": {
"Fn::Join": [
"",
[
{
"Ref": "selectedEnv"
},
"QueueForIOT"
]
]
},
"DelaySeconds": "0",
"MaximumMessageSize": "262144",
"MessageRetentionPeriod": "345600",
"ReceiveMessageWaitTimeSeconds": "20",
"VisibilityTimeout": "30"
},
"Metadata": {
"AWS::CloudFormation::Designer": {
"id": "6484fbb7-a188-4a57-a40e-ba9bd69d4597"
}
}
}
},
"Outputs": {
"Help": {
"Description": "This is description",
"Value": ""
}
}
}
Minha pergunta é: eu quero fazer um valor em minúsculas ou às vezes em maiúsculas para o bucket S3 ou qualquer outro recurso. Como fazer? Desde já, obrigado.
Imagem do erro de criação do modelo anexada.
fonte
MyString
macro que é requerida pelo aws para criar transformações personalizadas. Mais informações podem ser encontradas aqui . Exemplo (incluindo a função lambda) pode ser encontrado aqui .DEV to dev, PROD to prod, etc
, incorpore mapeamentos e Fn :: FindInMap ao seu modelo.Respostas:
Eu recebi a resposta desta pergunta. Para isso, usei JSON de mapeamentos nos quais adicionei valores como Se o valor selecionado é DEV, use dev, Se QA, faça um qa como este e usei abaixo o JSON que usou Fn: FindInMap
Abaixo está o JSON de mapeamentos:
fonte
Você pode fazer isso com uma macro CloudFormation.
https://github.com/awslabs/aws-cloudformation-templates/tree/master/aws/services/CloudFormation/MacrosExamples/StringFunctions
fonte