Ich arbeite an AWS CloudFormation und habe eine Vorlage erstellt, in der ich den Benutzer gebeten habe, Umgebung auszuwählen.
Auf Basis des ausgewählten Wertes habe ich die Ressourcen erstellt. Der Benutzer muss zwischen DEV, QA, PROD, UAT usw. wählen, aber wenn ich diesen Wert an den S3-Bucket-Namen (-downloads.com) anhänge, ist dies nicht zulässig, da Großbuchstaben im S3-Bucket-Namen nicht zulässig sind.
Also habe ich in JSON geändert, wo ich fn :: Transform mit "Condition": "Lower" verwende, aber dann beim Erstellen von Ressourcen unterhalb des Fehlers auftritt.
Keine Transformation mit dem Namen 871247504605 :: String gefunden. Vom Benutzer angeforderter Rollback.
Unten ist mein 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": ""
}
}
}
Meine Frage ist, ich möchte Kleinbuchstaben oder manchmal Großbuchstaben für S3-Bucket oder andere Ressourcen verwenden. Wie macht man? Danke im Voraus.
Bild des Vorlagenerstellungsfehlers beigefügt.
quelle
MyString
Makro implementiert, das von aws benötigt wird, um benutzerdefinierte Transformationen zu erstellen. Weitere Infos finden Sie hier . Ein Beispiel (einschließlich der Lambda-Funktion) finden Sie hier .DEV to dev, PROD to prod, etc
indem Sie Zuordnungen und Fn :: FindInMap in Ihre Vorlage integrieren.Antworten:
Ich habe die Antwort auf diese Frage bekommen. Dafür habe ich Mappings JSON verwendet, in dem ich Werte wie Wenn ausgewählter Wert DEV ist, dann benutze dev, wenn QA dann qa wie folgt und unter JSON verwendet, das Fn: FindInMap verwendet
Unten ist der Mappings JSON:
quelle
Sie können dies mit einem CloudFormation-Makro tun.
https://github.com/awslabs/aws-cloudformation-templates/tree/master/aws/services/CloudFormation/MacrosExamples/StringFunctions
quelle