• [AWS] Lab: CloudFormation nested stack


    Overview:

    1. Create an S3 Bucket to store CloudFormation template
    2. Create Root Stack CloudFormation stack
    3. Create multi childstacks in rootestack

    Create an S3 Bucket to store CloudFormation template

    Update two files to the bucket:

    noretain.json:

    {
        "AWSTemplateFormatVersion": "2010-09-09",
        "Resources": {
            "S3Bucket": {
                "Type": "AWS::S3::Bucket",
                "Properties": {
                    "AccessControl": "PublicRead",
                    "WebsiteConfiguration": {
                        "IndexDocument": "index.html",
                        "ErrorDocument": "error.html"
                    }
                }
            },
            "BucketPolicy": {
                "Type": "AWS::S3::BucketPolicy",
                "Properties": {
                    "PolicyDocument": {
                        "Id": "MyPolicy",
                        "Version": "2012-10-17",
                        "Statement": [
                            {
                                "Sid": "PublicReadForGetBucketObjects",
                                "Effect": "Allow",
                                "Principal": "*",
                                "Action": "s3:GetObject",
                                "Resource": {
                                    "Fn::Join": [
                                        "",
                                        [
                                            "arn:aws:s3:::",
                                            {
                                                "Ref": "S3Bucket"
                                            },
                                            "/*"
                                        ]
                                    ]
                                }
                            }
                        ]
                    },
                    "Bucket": {
                        "Ref": "S3Bucket"
                    }
                }
            }
        },
        "Outputs": {
            "WebsiteURL": {
                "Value": {
                    "Fn::GetAtt": [
                        "S3Bucket",
                        "WebsiteURL"
                    ]
                },
                "Description": "URL for website hosted on S3"
            },
            "S3BucketSecureURL": {
                "Value": {
                    "Fn::Join": [
                        "",
                        [
                            "https://",
                            {
                                "Fn::GetAtt": [
                                    "S3Bucket",
                                    "DomainName"
                                ]
                            }
                        ]
                    ]
                },
                "Description": "Name of S3 bucket to hold website content"
            }
        }
    }
    

      

    s3static.json

    {
        "AWSTemplateFormatVersion": "2010-09-09",
        "Resources": {
            "S3Bucket": {
                "Type": "AWS::S3::Bucket",
                "Properties": {
                    "AccessControl": "PublicRead",
                    "WebsiteConfiguration": {
                        "IndexDocument": "index.html",
                        "ErrorDocument": "error.html"
                    }
                },
                "DeletionPolicy": "Retain"
            },
            "BucketPolicy": {
                "Type": "AWS::S3::BucketPolicy",
                "Properties": {
                    "PolicyDocument": {
                        "Id": "MyPolicy",
                        "Version": "2012-10-17",
                        "Statement": [
                            {
                                "Sid": "PublicReadForGetBucketObjects",
                                "Effect": "Allow",
                                "Principal": "*",
                                "Action": "s3:GetObject",
                                "Resource": {
                                    "Fn::Join": [
                                        "",
                                        [
                                            "arn:aws:s3:::",
                                            {
                                                "Ref": "S3Bucket"
                                            },
                                            "/*"
                                        ]
                                    ]
                                }
                            }
                        ]
                    },
                    "Bucket": {
                        "Ref": "S3Bucket"
                    }
                }
            }
        },
        "Outputs": {
            "WebsiteURL": {
                "Value": {
                    "Fn::GetAtt": [
                        "S3Bucket",
                        "WebsiteURL"
                    ]
                },
                "Description": "URL for website hosted on S3"
            },
            "S3BucketSecureURL": {
                "Value": {
                    "Fn::Join": [
                        "",
                        [
                            "https://",
                            {
                                "Fn::GetAtt": [
                                    "S3Bucket",
                                    "DomainName"
                                ]
                            }
                        ]
                    ]
                },
                "Description": "Name of S3 bucket to hold website content"
            }
        }
    }
    

      

    Create Root Stack CloudFormation stack

    1. Create template in Designer
    2. Create a root stack template
    {
        "AWSTemplateFormatVersion" : "2010-09-09",
        "Resources" : {
            "myStack" : {
               "Type" : "AWS::CloudFormation::Stack",
               "Properties" : { 
                  "TemplateURL" : "https://<YOUR_SE_BUCKET>/noretain.json",
                  "TimeoutInMinutes" : "60"
               }
            }
        }
    }

      3. Validate template and create stack

      4. Give stack a name and accept all default configuration.

    What we have done is creating a rootStack and a child stack.

    In rootStack, it only has childStack

    In childStack, it has S3.

    If we delete the Root Stack, Child Stack will be deleted as well. And S3 in Childstack will also be deleted.

    Create multi ChildStaks in RootStack

    Create CloudFormation rootStack:

    {
        "AWSTemplateFormatVersion" : "2010-09-09",
        "Resources" : {
            "myStack" : {
               "Type" : "AWS::CloudFormation::Stack",
               "Properties" : {
                  "TemplateURL" : "https://<your_s3_bucket>/s3static.json",
                  "TimeoutInMinutes" : "60"
               }
            },
            "myStack2" : {
                "Type" : "AWS::CloudFormation::Stack",
                "Properties" : {
                   "TemplateURL" : "https://<your_s3_bucket>/noretain.json",
                   "TimeoutInMinutes" : "60"
                }
             }    
        }
    }
  • 相关阅读:
    iOS 3DTouch 的开发套路大全
    启动图后面 添加有倒计时的广告图
    激光推送报错:APNs is not available,please check your provisioning profile and certification 和 设置别名问题 app not registed, give up set tag:
    iOS 微信和支付宝关于回调处理
    Android 开机自启动应用
    android快捷键
    如何让Eclipse的智能提示像VS一样霸气
    Win7下Eclipse中文字体太小
    Android的SharedPreferences实用技巧
    Java基础知识总结
  • 原文地址:https://www.cnblogs.com/Answer1215/p/14642266.html
Copyright © 2020-2023  润新知