AWS Cloudformation- json / yamlテンプレートで大文字または小文字の文字列を実行する方法


8

ここに画像の説明を入力してください私はAWS CloudFormationで作業しており、ユーザーに環境を選択するように依頼するテンプレートを1つ作成しました。

選択した値に基づいて、リソースを作成しました。ユーザーはDEV、QA、PROD、UATなどから選択する必要がありますが、この値をS3バケット名(-downloads.com)に追加すると、S3バケット名では大文字が許可されないため許可されません。

そのため、fn :: Transform「Condition」:「Lower」を使用するJSONを変更しました が、リソースの作成中にエラーが発生しました。

871247504605 :: Stringという名前の変換は見つかりませんでした。ユーザーによってロールバックが要求されました。

以下は私の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": ""
        }
    }
}

私の質問は、S3バケットまたはその他のリソースに対して小文字または場合によっては大文字の値を実行することです。実行する方法?前もって感謝します。

テンプレート作成エラーの画像が添付されています。


3
JSONが無効です。cloudformatinoテンプレート全体を共有できますか?
Amit Baranes

質問とJSONも更新しました。私を助けてください。ありがとう
Vikramsinh Gaikwad

1
MyStringカスタム変換を作成するためにawsが必要とするラムダ関数実装マクロがあるかどうかは、質問から明らかではありません。詳細については、こちらをご覧ください。例(ラムダ関数を含む)はこちらにあります
モレキュラーマン

1
ユーザー入力を小文字で小文字で入力することもできます。つまり、DEV = dev
George Rushby

2
json / yamlだけでこの変換を行うことはできません。json / yamlでできることは、テンプレートにマッピングFn ::鵺nMapDEV to dev, PROD to prod, etc組み込んでマッピングすることだけですが。
モレキュラーマン

回答:


3

この質問の答えを得ました。このために、マッピングされたJSONを使用しました。ここでは、If Selected値がDEVの場合に値を追加し、次にdevを使用し、QAの場合は次のようにqaを使用し、以下のように使用します。

[{"Fn :: AddItemnMap":["環境"、 "プラットフォーム名"、{"参照": "選択されたEnv"}]}、 "クライアント名"]

以下はマッピングJSONです。

"マッピング":{"環境":{"プラットフォーム名":{"DEV": "dev"、 "QA": "qa"、 "UAT": "uat"、 "PROD": "prod"}}}


1
私もこのようにしてきましたが、これらの簡単な操作に使用できる関数を証明してくれることを本当に望んでいます。CloudFormationに送信する前に、Jenkins Shellでこれらのタイプの操作を行うことに頼っていました。シェルの例:UpperVar = DEV、LowerVar = $ {UpperVar ,,}
jDub9

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.