2017-01-12 22 views
0

2つの子テンプレートを呼び出すマスターCloudformationテンプレートがあります。最初のテンプレートが実行され、リソースのOutputsセクションにキャプチャされた出力があります。私は入れ子になっているSecond TemplateでChildStack01 Outputの値を使用しようと多くの試みをしてきましたが、なぜ私がTemplate format error: Unresolved resource dependencies [XYZ] in the Resources block of the templateを得るのか分かりません。ここに私のマスターテンプレートがあります。ここでCloudFormation - 子ネストされたスタック内の親スタックの出力へのアクセス

{ 
"AWSTemplateFormatVersion": "2010-09-09", 
"Resources": { 
    "LambdaStack": { 
     "Type": "AWS::CloudFormation::Stack", 
     "Properties": { 
      "TemplateURL": "https://s3.amazonaws.com/bucket1/cloudformation/Test1.json", 
      "TimeoutInMinutes": "60" 
     } 
    }, 
    "PermissionsStack": { 
     "Type": "AWS::CloudFormation::Stack", 
     "Properties": { 
      "TemplateURL": "https://s3.amazonaws.com/bucket1/cloudformation/Test2.json", 
      "Parameters": { 
       "LambdaTest": { 
        "Fn::GetAtt": ["LambdaStack", "Outputs.LambdaTest"] 
       } 
      }, 
      "TimeoutInMinutes": "60" 
     } 
    } 
} 
} 

ここに私のTest1.jsonテンプレート

{ 
"Resources": { 
    "LambdaTestRes": { 
     "Type": "AWS::Lambda::Function", 
     "Properties": { 
      "Description": "Testing AWS cloud formation", 
      "FunctionName": "LambdaTest", 
      "Handler": "lambda_handler.lambda_handler", 
      "MemorySize": 128, 
      "Role": "arn:aws:iam::3423435234235:role/lambda_role", 
      "Runtime": "python2.7", 
      "Timeout": 300, 
      "Code": { 
       "S3Bucket": "bucket1", 
       "S3Key": "cloudformation/XYZ.zip" 
      } 
     } 
    } 
}, 
"Outputs": { 
    "LambdaTest": { 
     "Value": { 
      "Fn::GetAtt": ["LambdaTestRes", "Arn"] 
     } 
    } 
} 
} 

はTest1.jsonの出力を使用しなければならない私のTest2.jsonです。

{ 
"Resources": { 
    "LambdaPermissionLambdaTest": { 
     "Type": "AWS::Lambda::Permission", 
     "Properties": { 
      "Action": "lambda:invokeFunction", 
      "FunctionName": { 
       "Ref": "LambdaTest" 
      }, 
      "Principal": "apigateway.amazonaws.com", 
      "SourceArn": { 
       "Fn::Join": ["", ["arn:aws:execute-api:", { 
        "Ref": "AWS::Region" 
       }, ":", { 
        "Ref": "AWS::AccountId" 
       }, ":", { 
        "Ref": "TestAPI" 
       }, "/*"]] 
      } 
     } 
    } 
}, 
"Parameters": { 
    "LambdaTest": { 
     "Type": "String" 
    } 
} 
} 
+0

見ることができません。ダブルチェックするだけで、パラメータセクションのtest2.jsonにパラメータLambdaTestが含まれていますか?また、通常Outputs。 autoを使用しても、そのテンプレートの依存関係は含まれますが、確かにtest2.jsonでDependsOnを使用してみることはできますか? –

+0

動作に依存しますが、ネストされたテンプレート形式を使用すると、スタック名には埋め込まれたリソースIDとともにオンザフライで作成されます。だから、私たちは、以前のテンプレート名が何であるか分からない。 – ZZzzZZzz

答えて

0

Test2.jsonLambdaTestおよび1からTestAPIの2つの未解決のリソースがあります。

LambdaTestの場合、これは親スタックのパラメータとして渡すようですが、子の入力パラメータとして指定していませんTest2.jsonテンプレート。あなたが直接固定文字列としてこれを指定する必要がありますいずれかのようTestAPIについて

"Parameters": { 
    "LambdaTest": { 
    "Type": "String" 
    } 
}, 

は、このリファレンスは、あなたのテンプレートのどこにも表示されていないようだ、またはこのように、Test2.jsonさんParametersセクションにエントリを追加します。別の入力パラメータをTest2.jsonスタックに追加して(上記参照)、それを親スタックから提供してください。

+0

私はTestAPIを認識していますが、親スタックからのパラメータとしてLambdaTestを渡して、子スタックにアクセスしています。それ以外の場合、私はそのパラメータを参照するはずです。 Test2.jsonでどのようにパラメータを宣言しますか? – ZZzzZZzz

+0

@Zzz ['Parameters'](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/parameters-section)を使用して、CloudFormationテンプレートと同じように子スタックに入力パラメータを宣言します。 -structure.html)セクション - 編集を参照してください。 – wjordan

+0

それはまだ運がないことを追加しました。本当に何が間違っているのか分からない。 "Template error:Fn :: GetAttのインスタンスが未定義のリソースLambdaTestを参照しています" – ZZzzZZzz

0

エラーは、test1.json(LambdaStack)から発生しています。

「LambdaTest」という名前の2つの論理IDがリソースセクションにあり、出力セクションにもう1つあるようです。

+0

それを変更しようとしたが、うまくいかなかった。 – ZZzzZZzz

関連する問題