Моя цель - создать корневой стек , который передает значение 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
, поэтому в будущем, если мне потребуется создать таблицу с той же схемой, я могу просто сослаться на нее в новом корневом стеке с новым именем стека.