AWS Cloudform- Cách thực hiện chuỗi chữ hoa hoặc chữ thường trong mẫu json / yaml


8

nhập mô tả hình ảnh ở đâyTôi đang làm việc trên AWS CloudFormation và tôi đã tạo một mẫu trong đó tôi yêu cầu người dùng chọn Môi trường.

Trên cơ sở giá trị được chọn, tôi đã tạo ra các tài nguyên. Người dùng phải chọn giữa DEV, QA, PROD, UAT, v.v. nhưng khi tôi nhập giá trị này vào tên nhóm S3 (-doads.com) thì không được phép vì chữ in hoa không được phép trong tên nhóm S3.

Vì vậy, tôi đã thay đổi JSON khi tôi sử dụng fn :: Transform với "Điều kiện": "Thấp hơn" nhưng sau đó trong khi tạo tài nguyên bên dưới xảy ra lỗi.

Không có biến đổi có tên 871247504605 :: Chuỗi được tìm thấy .. Phục hồi theo yêu cầu của người dùng.

Dưới đây là JSON CloudFormation của tôi

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

Câu hỏi của tôi là tôi muốn làm giá trị chữ thường hoặc đôi khi là chữ hoa cho nhóm S3 hoặc bất kỳ tài nguyên nào khác. Làm thế nào để làm gì? Cảm ơn trước.

Hình ảnh của lỗi tạo mẫu đính kèm.


3
JSON không hợp lệ, bạn có thể chia sẻ mẫu cloudformatino đầy đủ không?
Amit Baranes

Tôi cũng đã cập nhật câu hỏi và JSON. Hãy giúp tôi ra. Cảm ơn
Vikramsinh Gaikwad

1
Không rõ câu hỏi của bạn nếu bạn có chức năng lambda thực hiện MyStringmacro được yêu cầu bởi aws để tạo các biến đổi tùy chỉnh. Thêm thông tin có thể được tìm thấy ở đây . Ví dụ (bao gồm cả hàm lambda) có thể được tìm thấy ở đây .
Người đàn ông phân tử

1
Bạn chỉ có thể viết thường chữ nhập của người dùng tức là DEV = dev
George Rushby

2
bạn không thể thực hiện chuyển đổi này chỉ với json / yaml. Mặc dù những gì bạn có thể làm với json / yaml chỉ là lập bản đồ DEV to dev, PROD to prod, etcbằng cách kết hợp ánh xạFn :: FindInMap vào mẫu của bạn.
Người đàn ông phân tử

Câu trả lời:


3

Tôi đã có câu trả lời của câu hỏi này. Để làm điều này, tôi đã sử dụng Mappings JSON, trong đó tôi đã thêm các giá trị như Giá trị được chọn là DEV, sau đó sử dụng dev, Nếu QA thì qa như thế này và được sử dụng bên dưới JSON sử dụng Fn: FindInMap

[{"Fn :: FindInMap": ["Môi trường", "PlatformName", {"Ref": "chọnEnv"}]}, "tên khách hàng"]

Dưới đây là JSON Mappings:

"Ánh xạ": {"Môi trường": {"PlatformName": {"DEV": "dev", "QA": "qa", "UAT": "uat", "PROD": "prod"}}}


1
Tôi cũng đã làm như vậy, nhưng thực sự mong muốn họ sẽ chứng minh một chức năng mà chúng ta có thể sử dụng cho các thao tác đơn giản này. Tôi đã sử dụng các loại thao tác này trong Jenkins Shell trước khi gửi tới CloudFormation. Ví dụ Shell: UpperVar = DEV, LowerVar = $ {UpperVar ,,}
jDub9

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.