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.
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
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"}}}