web-dev-qa-db-fra.com

AWS Cloudformation - Comment faire une chaîne en majuscules ou en minuscules dans un modèle json / yaml

enter image description here

Je travaille sur AWS CloudFormation et j'ai créé un modèle dans lequel j'ai demandé à l'utilisateur de sélectionner Environnement.

Sur la base de la valeur sélectionnée, j'ai créé les ressources. L'utilisateur doit choisir entre DEV, QA, PROD, UAT, etc., mais lorsque je suffixe cette valeur au nom du compartiment S3 (-downloads.com), cela n'est pas autorisé car la lettre majuscule n'est pas autorisée dans le nom du compartiment S3.

J'ai donc changé en JSON où j'utilise fn :: Transform avec "Condition": "Lower" mais lors de la création des ressources ci-dessous, une erreur se produit.

Aucune transformation nommée 871247504605 :: String trouvée. Restauration demandée par l'utilisateur.

Voici mon JSON CloudFormation

{
    "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": ""
        }
    }
}

Ma question est la suivante: je veux utiliser une valeur minuscule ou parfois majuscule pour le compartiment S3 ou toute autre ressource. Comment faire cela?

Image d'erreur de création de modèle jointe.

10
Vikramsinh Gaikwad

Vous pouvez le faire avec une macro CloudFormation.

Parameters:
  InputString:
    Default: "This is a test input string"
    Type: String
Resources:
  S3Bucket:
    Type: "AWS::S3::Bucket"
    Properties:
      Tags:
        - Key: Upper
          Value:
            'Fn::Transform':
             - Name: 'String'
               Parameters:
                 InputString: !Ref InputString
                 Operation: Upper

https://github.com/awslabs/aws-cloudformation-templates/tree/master/aws/services/CloudFormation/MacrosExamples/StringFunctions

2
Mr. Young

J'ai eu la réponse à cette question. Pour cela, j'ai utilisé Mappings JSON dans lequel j'ai ajouté des valeurs telles que Si la valeur sélectionnée est DEV, puis utilisez dev, Si QA puis qa comme ceci, et utilisé ci-dessous JSON qui a utilisé Fn: FindInMap

[{"Fn :: FindInMap": ["Enviroment", "PlatformName", {"Ref": "selectedEnv"}]}, "clientname"]

Voici le JSON de mappages:

"Mappings": {"Enviroment": {"PlatformName": {"DEV": "dev", "QA": "qa", "UAT": "uat", "PROD": "prod"}}}

3
Vikramsinh Gaikwad