Сохранить вывод при обновлении стека - PullRequest
0 голосов
/ 30 января 2020

Я написал шаблон Cloudformation, который создает стек с таблицей DynamoDB:

     "FeedStageDynamoTable" : {
        "Type" : "AWS::DynamoDB::Table",
        "UpdateReplacePolicy" : "Retain",
        "Properties" : {
            "TableName" : { "Fn::Sub": [ "feed-${Year}-${Environment}-table", { "Year": {"Ref" : "BundleYear" }, "Environment" : {"Ref" : "DeployEnvironment"}} ]},
            "AttributeDefinitions" : [
              {"AttributeName" : "Guid", "AttributeType" : "S"}
            ],
            "KeySchema"            : [
              {"AttributeName" : "Guid", "KeyType" : "HASH"}
            ],
            "ProvisionedThroughput" : {
                "ReadCapacityUnits" : "2",
                "WriteCapacityUnits" : "2"
            },
            "StreamSpecification": {
                "StreamViewType": "NEW_AND_OLD_IMAGES"
                }
        }
    }

и вывод для потока таблицы:

"Outputs" : {
    "FeedStageTableStreamArn": {
        "Description" : "The security group ID to use for public web servers",
        "Value" :  { "Fn::GetAtt" : ["FeedStageDynamoTable", "StreamArn"] },
        "Export" : { "Name" : {"Fn::Sub": "${AWS::StackName}-FeedStageDynamoTableStreamArn" }}
    },

Вывод используется лямбда-выражением функция из другого шаблона (для второго стека):

    "NotifyWebConsumer" : {
        "Type" : "AWS::Serverless::Function",
        "Properties": {
            "Environment": {
            "Variables" :  {
                "EnvironmentCodename" :  { "Fn::Sub": [ "${Environment}", { "Environment" : {"Ref" : "DeployEnvironment"}} ]}
                }
            },
            "Handler": "AmazonServerlessStageWebUpdate::AmazonServerlessStageWebUpdate.Functions::NotifyWebConsumer",
            "FunctionName": "NotifyWebConsumer",
            "Runtime": "dotnetcore2.1",
            "CodeUri": "",
            "MemorySize": 256,
            "Timeout": 30,
            "Policies":[{  "Fn::ImportValue" : {"Fn::Sub" : "${DeployEnvironment}-LambdaExecutionPolicy"} }],
            "Role":{"Fn::GetAtt": ["NotifyConsumerRole","Arn"]},
            "Events": {

            }
        }
    }

...

"EventSourceMapping": {
            "Type": "AWS::Lambda::EventSourceMapping",
            "Properties": {
             "EventSourceArn": {  "Fn::ImportValue" : {"Fn::Sub" : "StageEnvironment-FeedStageDynamoTableStreamArn"} },
              "FunctionName" : {
                    "Fn::GetAtt": [
                        "NotifyWebConsumer", "Arn"
                    ]
        },
              "StartingPosition" : "LATEST"
              }
        }

После того, как я опубликовал оба стека, я больше не могу обновить первый, так как поток вывода используется вторым стеком. Теперь мой вопрос: есть ли свойство облачной информации типа «UpdateReplacePolicy»: «Сохранить» для выходных данных? Или есть другой способ обновить первый стек, не удаляя второй?

...