AWS Cloudformation - Designer 的使用

今天豆子尝试着使用Cloudformation Designer来创建一个Template 文件。Designer对于初学者还是很有帮助的,一方面可以通过可视界面拖动Resource,另外可以按住Ctrl+Space 来提示对应的Property里面可以配置哪些东西。还可以直接拖动线条来实现依赖关系。当然最重要的一点是可以帮忙进行语法检测。

下面是一个小例子。

平常豆子需要经常创建S3的bucket进行备份,对于每个Bucket需要配置lifecycle rule,创建对应的user policy,attach到一个新的User,然后配置这个新用户的Secretkey,最后在客户端写个小脚本定期备份。

现在把AWS的这一部分都改成用Cloudformation实现。

基本的resource就这4个部分。双击rerouce可以进行编辑对应的内容,在空格处随便单击一下 就可以编辑Parameter等section

编辑过程中,可以从对应的Resource里面点开他的帮助文档,这个是一个很方便的功能

提交之前,记得检查语法。


{
    "AWSTemplateFormatVersion": "2010-09-09",
    "Metadata": {
        "AWS::CloudFormation::Designer": {
            "5f48a1ce-1a7b-44e3-b9b6-b83719bded79": {
                "size": {
                    "width": 60,
                    "height": 60
                },
                "position": {
                    "x": 510,
                    "y": 120
                },
                "z": 0,
                "embeds": []
            },
            "e0e4e707-9bea-46b5-ab39-588be81cb5e3": {
                "size": {
                    "width": 60,
                    "height": 60
                },
                "position": {
                    "x": -20,
                    "y": 110
                },
                "z": 0,
                "embeds": []
            },
            "b81b1033-9cc0-4248-b807-fb575fd54687": {
                "size": {
                    "width": 60,
                    "height": 60
                },
                "position": {
                    "x": 160,
                    "y": 240
                },
                "z": 0,
                "embeds": [],
                "isassociatedwith": [
                    "e0e4e707-9bea-46b5-ab39-588be81cb5e3"
                ],
                "dependson": [
                    "e0e4e707-9bea-46b5-ab39-588be81cb5e3"
                ]
            },
            "83bda625-f2d4-4de1-8b66-d475476308ed": {
                "size": {
                    "width": 60,
                    "height": 60
                },
                "position": {
                    "x": -90,
                    "y": 210
                },
                "z": 0,
                "embeds": []
            },
            "fc691126-aba2-4041-a755-93a1a15ac969": {
                "source": {
                    "id": "b81b1033-9cc0-4248-b807-fb575fd54687",
                    "selector": "g:nth-child(1) g:nth-child(4) g:nth-child(1) circle:nth-child(1)     ",
                    "port": "AWS::RefLink-AWS::IAM::User-Users"
                },
                "target": {
                    "id": "e0e4e707-9bea-46b5-ab39-588be81cb5e3"
                },
                "z": 12
            },
            "55264e1b-ae17-48b2-9508-fef96a0ca753": {
                "source": {
                    "id": "b81b1033-9cc0-4248-b807-fb575fd54687",
                    "selector": "g:nth-child(1) g:nth-child(4) g:nth-child(1) circle:nth-child(1)     ",
                    "port": "AWS::RefLink-AWS::IAM::User-Users"
                },
                "target": {
                    "id": "e0e4e707-9bea-46b5-ab39-588be81cb5e3"
                },
                "z": 12
            },
            "5585399a-b5be-4e8e-8779-6bc1471da1f5": {
                "source": {
                    "id": "b81b1033-9cc0-4248-b807-fb575fd54687"
                },
                "target": {
                    "id": "e0e4e707-9bea-46b5-ab39-588be81cb5e3"
                },
                "z": 11
            }
        }
    },
    "Resources": {
        "IAMUser": {
            "Type": "AWS::IAM::User",
            "Properties": {
                "UserName": {
                    "Ref": "UserName"
                }
            },
            "Metadata": {
                "AWS::CloudFormation::Designer": {
                    "id": "e0e4e707-9bea-46b5-ab39-588be81cb5e3"
                }
            }
        },
        "Bucket": {
            "Type": "AWS::S3::Bucket",
            "Properties": {
                "BucketName": {
                    "Ref": "S3BucketName"
                },
                "LifecycleConfiguration": {
                    "Rules": [
                        {
                            "Id": "GlacierRule",
                            "Prefix": "glacier",
                            "Status": "Enabled",
                            "ExpirationInDays": "365",
                            "Transitions": [
                                {
                                    "TransitionInDays": "1",
                                    "StorageClass": "GLACIER"
                                }
                            ]
                        }
                    ]
                }
            },
            "Metadata": {
                "AWS::CloudFormation::Designer": {
                    "id": "5f48a1ce-1a7b-44e3-b9b6-b83719bded79"
                }
            }
        },
        "IAMPolicy": {
            "Type": "AWS::IAM::Policy",
            "Properties": {
                "Users": [
                    {
                        "Ref": "IAMUser"
                    }
                ],
                "PolicyName": "Test",
                "PolicyDocument": {
                    "Version": "2012-10-17",
                    "Statement": [
                        {
                            "Sid": "VisualEditor0",
                            "Effect": "Allow",
                            "Action": "s3:ListBucket",
                            "Resource": {
                                "Fn::Join": [
                                    ":",
                                    [
                                        "arn:aws:s3::",
                                        {
                                            "Ref": "Bucket"
                                        }
                                    ]
                                ]
                            }
                        },
                        {
                            "Sid": "VisualEditor1",
                            "Effect": "Allow",
                            "Action": [
                                "s3:ListAllMyBuckets",
                                "s3:HeadBucket"
                            ],
                            "Resource": "*"
                        },
                        {
                            "Sid": "VisualEditor2",
                            "Effect": "Allow",
                            "Action": "s3:*",
                            "Resource": {
                                "Fn::Join": [
                                    "/",
                                    [
                                        {
                                            "Fn::Join": [
                                                ":",
                                                [
                                                    "arn:aws:s3::",
                                                    {
                                                        "Ref": "Bucket"
                                                    }
                                                ]
                                            ]
                                        },
                                        "*"
                                    ]
                                ]
                            }
                        }
                    ]
                }
            },
            "Metadata": {
                "AWS::CloudFormation::Designer": {
                    "id": "b81b1033-9cc0-4248-b807-fb575fd54687"
                }
            },
            "DependsOn": [
                "IAMUser"
            ]
        },
        "IAMKey": {
            "Type": "AWS::IAM::AccessKey",
            "Properties": {
                "UserName": {
                    "Ref": "IAMUser"
                }
            },
            "Metadata": {
                "AWS::CloudFormation::Designer": {
                    "id": "83bda625-f2d4-4de1-8b66-d475476308ed"
                }
            },
            "DependsOn": [
                "IAMUser"
            ]
        }
    },
    "Parameters": {
        "S3BucketName": {
            "Type": "String"
        },
        "UserName": {
            "Type": "String"
        },
        "PolicyName": {
            "Type": "String"
        }
    },
    "Outputs": {
        "BucketName": {
            "Value": {
                "Ref": "Bucket"
            },
            "Description": "S3 Bucket Name"
        },
        "SecretAccessKey": {
            "Value": {
                "Fn::GetAtt": [
                    "IAMKey",
                    "SecretAccessKey"
                ]
            },
            "Description": "Secret Access Key"
        },
        "AccessKeyID": {
            "Value": {
                "Ref": "IAMKey"
            },
            "Description": "Access ID"
        }
    }
}

下面是stack创建的过程,因为我设置了依赖关系,所以顺序是S3 Bucket, User, UserPolicy和UserKey

最后输出我的AccessID和SecretKey,这样我在客户端才能调用

原文地址:https://blog.51cto.com/beanxyz/2487170

时间: 2024-10-20 19:42:19

AWS Cloudformation - Designer 的使用的相关文章

AWS CloudFormation入门实践

AWS cloudformation通过模板对AWS云资源进行编排和调用.并且可以通过模板代码层面的修改就可以对现有环境进行升级改造,云端业务的灵活便捷特点展现无疑.下面我们通过一个入门级的简单动手案例给大家展示cloudformation是如何使用的.希望大家也动手亲自实践体验. 创建cloudformation模板上图:进入webconsole控制台的cloudformation界面,点选create new stack.(新用户有1年的AWS free tier可以用来体验各种服务) 上图

AWS Cloudformation的相关概念

Cloudformation的相关概念AWS cloudformation是一项典型的基础架构即代码服务.通过编写模板对亚马逊云服务的资源进行调用和编排.借助cloudformation可以极大帮助DevOps提升工作效率,减少重复劳动,配置和部署相关服务的时间,并把更多的精力花在应用程序领域. 引用AWS官网https://docs.aws.amazon.com对cloudformation服务的优势总结: 简化基础设施管理 快速复制基础设施 轻松控制和跟踪基础设施层的变更 部署业务:传统环境

AWS Cloudformation - Template 学习(1)

Cloudformation里面,整个架构都是在template里面定义的,然后通过这个template生成对应的Stack AWS官方提供了一个参考手册,https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-whatis-howdoesitwork.html 非常的详细和有用,初看有些枯燥,但是细细品味很有意思,下面是豆子的学习笔记. 在template里面,他一共有9个section可以定义,但是只有resour

AWS Cloudformation Template 学习(2)

前面简单的过了一遍模板的9大模块,这一节学习一下他的内置函数(Intrinsic function). 官方文档链接 https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference.html Fn::Base64 这个是返回一个字符串的base64格式,一般的使用场景是创建EC2 实例的时候配置 UserData使用的.注意Yaml格式2可以简写 Fn:: 为!,不要和其他语言

System Operations on AWS - Lab 7 - CloudFormation

CloudFormation模板:创建一个VPC(包含Public子网,Private子网,分别在不同的AZ),创建NAT,Bastion Server在Public子网. 1. 修改并运行AWS CloudFormation模板 1.1 添加AMI ID到模板中 1.1.1 下载模板 https://d2lrzjb0vjvpn5.cloudfront.net/sys-ops/v2.4/lab-7-automating/static/Lab-7-Start-CF.template 1.1.2 替

DevOps on AWS之Cloudformation概念介绍篇

Cloudformation的相关概念 AWS cloudformation是一项典型的(IAC)基础架构即代码服务..通过编写模板对亚马逊云服务的资源进行调用和编排.借助cloudformation可以极大帮助DevOps提升工作效率,减少重复劳动,配置和部署相关服务的时间,并把更多的精力花在应用程序领域. 引用AWS官网https://docs.aws.amazon.com对cloudformation服务的优势总结: 简化基础设施管理 快速复制基础设施 轻松控制和跟踪基础设施层的变更 部署

OpenStack-Heat中的Autoscaling - AWS的autoscaling

在Heat中完全使用aws的语法创建一套autoscaling的template. 流程: Create LaunchConfig (Create basic instance, send mem status to ALARM) -> Create ASGroup (Define instance num range) -> Create ScaleUpPolicy (+1 instance when mem_alarm_high) -> Create MEMAlarmHigh (Mo

AWS 学习之路(技术专业人员Training and Certification)架构解决方案1

AWS 学习之路--技术专业人员架构解决方案1·(1h) 摘要主题: DevOps和云迁移. 将AWS云架构与传统架构进行比较. 联系用于生成各个解决方案的AWS服务,了解可能的迁移策略和技术含义. 第一部分:基于AWS的DevOps DevOps和传统架构的区别: 传统架构: DevOps模型: 独立环境 两团队协作额(开发运维团队) 线性开发 经常沟通 工程师执行开发和运营 提高效率 流程和完成方式延迟对客户的交付 改进服务质量 端到端模型 也可能会涉及QA和安全团队 开发和基础设施是每个团

OpenStack-Heat中的AWS::WaitCondition的使用

在heat中.一个instance的创建成功信号是在这个instance状态成为active之后发出的,这时候user-data可能还没有运行.可是heat已经觉得这个resource创建成功了,開始调度下一个resource的创建. 假设我们要建立一个webserver,这个webserver须要在databaseServer运行完user-data之后才開始创建,就须要使用AWS的waitcondition通讯机制. 整个流程例如以下: Create WaitHandler -> WaitH