Переменные прохода ссылок между стеками CloudFormation между корневым стеком и дочерним стеком - PullRequest
0 голосов
/ 16 мая 2019

Моя цель - создать корневой стек , который передает значение stack-name в дочерний стек , затем дочерний стек создает таблицу DynamoDB с Название таблицы: stack-name-dynamodb-table. Я пытаюсь сделать шаблон dynamodb.json многоразовым. Так что если это похоже на код, я бы хотел сделать что-то похожее на это:

const createDynamoDB = require('createDynamoDB');
fucntion main(stackName) {
  createDynamoDB(stackName);
  createOtherResources(stackName);
}

функция многократного использования:

function createDynamoDB(name) {
  const tableName = `${name}-table`;
  // create the table with tableName
}

Я застрял в курице и яйце ситуация:

Мой root-stack1:

"Parameters": {
        "DatabaseStack": {
            "Description": "The database stack that creates DynamoDB table.",
            "Type": "String",
            "MinLength" : 1,
            "MaxLength" : 255,
            "AllowedPattern" : "^[a-zA-Z][-a-zA-Z0-9]*$",
            "Default" : "dynamodb1"
        }
    },

    "Resources": {
        "Database": {
            "Type": "AWS::DynamoDB::Table",
            "Properties": {
                "Fn::ImportValue" :  {"Fn::Sub": "${DatabaseStack}-DynamoDBProperties" }
            }
        }
    },

    "Outputs": {
        "DatabaseName" : {
            "Value" : {
                "Fn::Sub": "${AWS::StackName}-table"
            },
            "Export": {
                "Name": {
                    "Fn::Sub": "${AWS::StackName}-table"
                }
            }
        }
    }

Мой dynamodb1:

    "Parameters": {
        "RootStack": {
            "Description": "The root stack that controls all templates.",
            "Type": "String",
            "MinLength" : 1,
            "MaxLength" : 255,
            "AllowedPattern" : "^[a-zA-Z][-a-zA-Z0-9]*$",
            "Default" : "root-stack1"
        }
    },

    "Resources": {
        "DDBTable": {
            "Type": "AWS::DynamoDB::Table",
            "Properties": {
                "TableName": {
                    "Fn::ImportValue" :  {"Fn::Sub": "${RootStack}-DatabaseName" }
                },
                "AttributeDefinitions": [
                    ...
    "Outputs": {
        "DynamoDBProperties": {
            "Value": {
                "Fn::GetAtt": [
                    "DDBTable",
                    "Properties"
                ]
            },
            "Export": {
                "Name": {
                    "Fn::GetAtt": ["DDBTable", "TableName"]
                }
            }
        }
    }
}

Проблема в том, что когда я запускаю create-stack с использованием root-stack1, я получаю эту ошибку:

An error occurred (ValidationError) when calling the CreateStack operation: Template format error: Expected an object, received {"Fn::ImportValue":{"Fn::Sub":"${DatabaseStack}-DynamoDBProperties"}}

Как передать все свойства таблицы DynamoDB, созданной в шаблоне dynamodb.json, в шаблон root-stack.json?

Нужно ли мне снова описывать свойства таблицы DynamoDB? Если да, то это кажется излишним. Цель состоит в том, чтобы повторно использовать шаблон dynamodb.json, поэтому в будущем, если мне потребуется создать таблицу с той же схемой, я могу просто сослаться на нее в новом корневом стеке с новым именем стека.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...