Estoy trabajando en AWS CloudFormation y creé una plantilla en la que le pedí al usuario que seleccionara Entorno.
Sobre la base del valor seleccionado, creé los recursos. El usuario tiene que seleccionar entre DEV, QA, PROD, UAT, etc., pero cuando agrego este valor al nombre del depósito S3 (-downloads.com) no está permitido porque la letra mayúscula no está permitida en el nombre del depósito S3.
Así que cambié en JSON donde uso fn :: Transform con "Condición": "Lower" pero luego, al crear recursos, se produce un error por debajo.
Ninguna transformación llamada 871247504605 :: Cadena encontrada. Rollback solicitado por el usuario.
A continuación se muestra mi 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": ""
}
}
}
Mi pregunta es que quiero hacer un valor en minúsculas o, a veces, mayúsculas para el depósito S3 o cualquier otro recurso. ¿Cómo hacer? Gracias por adelantado.
Imagen de error de creación de plantilla adjunta.
fuente
MyString
macro de implementación de la función lambda que requiere aws para crear transformaciones personalizadas. Más información se puede encontrar aquí . Ejemplo (incluida la función lambda) se puede encontrar aquí .DEV to dev, PROD to prod, etc
incorporando mapeos y Fn :: FindInMap en su plantilla.Respuestas:
Tengo la respuesta de esta pregunta. Para esto, utilicé Mappings JSON en el que agregué valores como If Selected value is DEV, luego use dev, If QA y qa like this, y usé debajo de JSON que usó Fn: FindInMap
A continuación se muestra el mapeo JSON:
fuente
Puede hacer esto con una macro de CloudFormation.
https://github.com/awslabs/aws-cloudformation-templates/tree/master/aws/services/CloudFormation/MacrosExamples/StringFunctions
fuente