AWS云编排详解-Cloud Formation

作者:私语茶馆

1.关键概念

名词

说明

软件:

CloudFormation

描述AWS 资源、配置值和互连关系。借助集成设施即代码加快云部署

CloudFormation Designer

拖拽式图形化模板编辑界面。

Amazon Simple Notification Service (SNS) 

SNS可通过电子邮件跟踪堆栈的创建和删除进度,以及以编程方式和其他流程集成。

概念:

Stack

实例化模板所产生的资源集合

2. CloudFormation介绍

Cloud Formation使用模板和堆栈简化资源管理。

CloudFormation的特征:

(1)文件格式:JSON(Javascript 数据元表示法)格式的文本文件。

(2)  管理服务间关系:模板能简要地获取资源间的相互关系,例如 EC2 实例必须与 Elastic Load Balancing 负载均衡器相关联,或者 EBS 卷必须与其连接的实例位于同一 EC2 可用区域内。

(3)反复使用:使用模板参数可使单个模板用于具有不同配置值的多个基础设施部署,例如要为该应用程序部署多少实例的模板。

(4)获取帮助反馈:模板还提供输出属性,以便向用户返回部署结果或配置信息。例如,完成实例化后,模板可能向客户提供 Elastic Load Balancing 终端节点的 URL,用于连接最新实例化的应用程序。

(5)避免冲突:模板中的所有 AWS 资源通过逻辑名称进行标识,以便在一个模板内创建多个堆栈时 AWS 资源之间不会产生命名冲突。

(6)即写即用:使用任何方法启动堆栈,无需提前使用 AWS CloudFormation 注册模板。

(7)可视化您的堆栈:CloudFormation Designer 让您能够以图表形式显示模板。您可以轻松地查看 AWS 资源及其之间的关系并安排布局,使图表更符合您的意图。您可以借助拖放界面和集成的 JSON 编辑器编辑模板。您对图表所做的修改会自动反映到模板的 JSON 中。 

(8)查询资源:AWS CloudFormation 保留堆栈模板的副本,以便您可以使用 AWS 管理控制台、命令行工具或 API 查询堆栈创建期间应用的确切资源配置。

(9)自动化:您可以选择使用编程语言或所选工具自动生成模板。您还可以选择使用 CloudFormation API、AWS SDK 或 AWS CLI 从模板中自动创建堆栈。

3.CloudFormation模板

资料:http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-guide.html

3.1. CloudFormation模板格式介绍

格式:

{"AWSTemplateFormatVersion" : "2010-09-09""Description" : "模板使用方法的文本描述","Parameters": { // 用于根据每个部署自定义模板的一组输入值 },"Resources" : { // 一组 AWS 资源及其相互关系,必选},
“Mappings”:{// 声明条件值,条件值的求值方式与查找表语句相似}"Outputs" : { // 堆栈创建者可以看到的一组值 }
}

EC2样例:

{"AWSTemplateFormatVersion" : "2010-09-09""Description" : "创建运行 Amazon Linux 32 位 AMI 的 EC2 实例。","Parameters" : {"KeyPair" : {"Description" : "允许 SSH 访问此实例的 EC2 密钥对","Type" : "String"}},"Resources" : {"Ec2Instance" : {"Type" : "AWS::EC2::Instance","Properties" : {"KeyName" : { "Ref" : "KeyPair" },"ImageId" : "ami-3b355a52"}}},"Outputs" : {"InstanceId" : {"Description" : "新创建的 EC2 实例的实例 ID","Value" : {"Ref" : "Ec2Instance"}}}
}  

完整Template见附件:WordPress_Single_Instance_With_RDS.template,下载地址:

详细语法如下:

  1. AWSTemplateFormatVersion:本模板满足的AWS CloudFormation模板的版本,目前只有2010-09-09有效。
  2. Parameters:用来指定创建堆栈时,由用户指定的参数及有效性检验规则。
  3. Mapping:相当于Switch Case语句,按照条件确定一个值。
  4. OutPut:描述Stack的属性。
  5. Description:定义提示。用于在Stack创建Wizard时显示在“Specify Parameter page”。
  6. 内嵌函数:
    1. 通过Ref和Fn::GetAt 函数可以在模板中引用其他资源的属性。
    2. 通过Fn::Join函数可以根据parameters、资源属性和其他字符串构建一个值。
  7. 附加属性:
    1. DependsOn 属性:指定资源创建和删除的依赖关系。例如被依赖的资源需要先创建。
    2. DeletionPolicy 属性:定义删除Stack时,如何处理资源,可以同步删除资源或者备份资源。

元数据:该属性为资源指定一个结构化数据。

3.1.模板-Resources

Resources用于定义模板中包括的资源。

3.1.1. 资源模板样例

样例1:

{"Resources" : {"HelloBucket" : {"Type" : "AWS::S3::Bucket", //资源类型,格式:AWS::ProductIdentifier::ResourceType"Properties" : { //定义资源的属性,不同的资源类型有不同的属性。"AccessControl" : "PublicRead","WebsiteConfiguration" : {"IndexDocument" : "index.html", //IndexDocument-WebSiteConfiguration的子属性,subProperty"ErrorDocument" : "error.html"            }               }}}
}

样例2(Ref函数):

{"Parameters" : { //定义了KeyName作为创建Instance时必须输入的参数。"KeyName" : {"Description" : "The EC2 Key Pair to allow SSH access to the instance","Type" : "AWS::EC2::KeyPair::KeyName"}},"Resources" : {"Ec2Instance" : {"Type" : "AWS::EC2::Instance","Properties" : {"SecurityGroups" : [ { "Ref" : "InstanceSecurityGroup" }, "MyExistingSecurityGroup" ],// REF指定的安全组来自模板定义,“MyExistingSecurityGroup”则是一个已部署的安全组。"KeyName" : { "Ref" : "KeyName"}, //KeyName通过Ref函数说明是创建Instance时必须输入的,"ImageId" : "ami-7a11e213"}},"InstanceSecurityGroup" : {"Type" : "AWS::EC2::SecurityGroup","Properties" : {"GroupDescription" : "Enable SSH access via port 22","SecurityGroupIngress" : [ {"IpProtocol" : "tcp","FromPort" : "22","ToPort" : "22","CidrIp" : "0.0.0.0/0"} ]}}}
}

样例3(GetAtt函数)

"Resources" : {"myBucket" : {"Type" : "AWS::S3::Bucket"},"myDistribution" : {"Type" : "AWS::CloudFront::Distribution", //定义一个CloudFront的CDN"Properties" : {"DistributionConfig" : {"Origins" : [ {"DomainName": {"Fn::GetAtt" : ["myBucket", "DomainName"]}, //提供Bucket的Domain名称。"Id" : "myS3Origin","S3OriginConfig" : { }} ],"Enabled" : "true","DefaultCacheBehavior" : {"TargetOriginId" : "myS3Origin","ForwardedValues" : {"QueryString" : "false"},"ViewerProtocolPolicy" : "allow-all"}}}}}

3.1.2.关键特性:

(1)模板中的资源.name是逻辑名,当CloudFormation创建资源时,会产生资源实例的物理名称。资源的物理名称= logical name + stack name + unique ID。

(2)CloudFormation有内嵌函数,例如Ref函数,格式如下:

​
Fn::Ref:The intrinsic function Ref returns the value of the specified parameter or resource.When you specify a parameter's logical name, it returns the value of the parameter.When you specify a resource's logical name, it returns a value that you can typically use to refer to that resource, such as a physical ID.Declaration"Ref" : "logicalName"ParameterslogicalNameThe logical name of the resource or parameter you want to dereference.Return ValueThe physical ID of the resource or the value of the parameter.​

样例如下:

"MyEIP" : { //定义一个Elastic IP"Type" : "AWS::EC2::EIP","Properties" : {"InstanceId" : { "Ref" : "MyEC2Instance" } //应用到一个MyEC2Instance的实例。}
}

Ref函数适合于其返回的资源恰好是你想要的情况。但有的情况你需要资源的其他属性,需要使用GetAtt函数,格式如下:

Fn::GetAtt
The intrinsic function Fn::GetAtt returns the value of an attribute from a resource in the template.
Declaration
"Fn::GetAtt" : [ "logicalNameOfResource", "attributeName" ]
Parameters:
logicalNameOfResource
The logical name of the resource that contains the attribute you want.
attributeName
The name of the resource-specific attribute whose value you want. See the resource's reference page for details about the attributes available for that resource type.
Return Value
The attribute value.Example
This example returns a string containing the DNS name of the LoadBalancer with the logical name MyLB.
"Fn::GetAtt" : [ "MyLB" , "DNSName" ]

其他参考资料:

1)资源的属性:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/71831.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《PyQt5》——设计Python GUI(图形用户界面)实例

PyQt5 PyQt5的配置和基础使用可以参考这篇文章:《 PyQt5》—— 创建 Python GUI(图形用户界面) Python GUI(图形用户界面)实例 本实例是设计一个通过玉米和豆粕的价格来预测生猪的价格,并显示预测价格与实…

kali linux 打开 word

Kali Linux是一款专为网络安全领域而设计的操作系统,它集成了大量的安全工具,帮助用户进行网络渗透测试和安全评估。作为一款功能强大的操作系统,Kali Linux可以满足用户在网络安全领域的各种需求,包括渗透测试、漏洞分析、数字取…

hooks useModule自定义hooks (二次封装AgGridReact ag-table)自定义表头,自定义表头搜索

场景业务: 多次运用AgGridReact的table 列表 思路: 运用自定义hooks进行二次封装: 通用配置例如:传参的参数,传参的url,需要缓存的key这些键值类 定制化配置例如:需要对table 的一些定制化传…

SpringBoot最简单方式实现自定义异常页面(404)

最简单的方式实现所有自定义异常页面(如 404、500 等)是通过 静态资源文件 或 模板引擎 来实现。 方法 1:使用静态资源文件(最简单) Spring Boot 默认会在 src/main/resources/static 或 src/main/resources/public …

django下防御race condition漏洞(竞争型漏洞)

目录 竞争型漏洞 概念 常见类型及示例 环境搭建 ​编辑漏洞复现 ucenter/1/ ucenter/2/ ucenter/3/ ucenter/4/ 总结 悲观锁 乐观锁 竞争型漏洞 概念 竞争型漏洞,也称为竞态条件漏洞(Race Condition Vulnerability),…

用Python写一个算24点的小程序

一、运行界面 二、显示答案——递归介绍 工作流程&#xff1a; 1. 基本情况&#xff1a;函数首先检查输入的数字列表 nums 的长度。如果列表中只剩下一个数字&#xff0c;它会判断这个数字是否接近 24&#xff08;使用 abs(nums[0] - 24) < 1e-10 来处理浮点数精度问题&…

PostgreSQL 18新特性之虚拟生成列

PostgreSQL 12 提供了生成列&#xff08;GENERATED ALWAYS AS STORED&#xff09;功能&#xff0c;但是只能支持存储型的生成列&#xff0c;需要占用存储空间&#xff0c;更新成本高。 为此&#xff0c;PostgreSQL 18 即将引入一个新的增强&#xff1a;虚拟生成列。这种类型的…

GitHub上传项目

总结&#xff08;有基础的话直接执行这几步&#xff0c;就不需要再往下看了&#xff09;&#xff1a; git init 修改git的config文件&#xff1a;添加:[user]:name你的github用户名 email你注册github的用户名 git branch -m master main git remote add origin 你的URL gi…

常见排序算法深度评测:从原理到10万级数据实战

常见排序算法深度评测&#xff1a;从原理到10万级数据实战 摘要 本文系统解析冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序和基数排序8种经典算法&#xff0c;通过C语言实现10万随机数排序并统计耗时。测试显示&#xff1a;快速排序综合性能最优&…

动态规划填表技巧:固定最后一个数 vs 固定倒数第二个数

在动态规划中&#xff0c;填表时固定最后一个数还是倒数第二个数&#xff0c;取决于问题的定义和状态转移方程的设计。 目录 1. 固定最后一个数 适用场景 特点 示例 2. 固定倒数第二个数 适用场景 特点 示例 3. 固定最后一个数与倒数第二个数的对比 4. 总结 1. 固定最…

【C】链式二叉树算法题2

目录 1 另一棵树的子树 1&#xff09; 题目描述 示例1&#xff1a; 示例2&#xff1a; 2&#xff09; 算法解析 3&#xff09; 代码 2 二叉树的遍历 1&#xff09; 问题描述 2&#xff09; 算法解析 3&#xff09; 代码 3 总结 1 另一棵树的子树 leetcode链接…

配置Hadoop集群

Hadoop的运行模式 本地运行&#xff1a;在一台单机上运行&#xff0c;没有分布式文件系统&#xff0c;直接读写本地操作系统的文件系统。特点&#xff1a;不对配置文件进行修改&#xff0c;Hadoop 不会启动 伪分布式&#xff1a;也是在一台单机上运行&#xff0c;但用不同的 …

python办公自动化--数据可视化(pandas+matplotlib)--生成条形图和饼状图

前言 前几天我们学习了pandas读取数据&#xff0c;还学习了如何用patplotlib绘制柱状图和折线图。 今天我们继续学习&#xff0c;如何绘制条形图和饼状图。 一、课程回顾-pandas读取数据 1.示例数据文件 这里我们用到的依旧是d盘底下的这个excel工作簿&#xff0c;这个工作簿…

基于大模型的结节性甲状腺肿诊疗全流程预测与方案研究报告

目录 一、引言 1.1 研究背景与目的 1.2 研究意义 1.3 国内外研究现状 二、大模型预测原理与方法 2.1 相关大模型概述 2.2 数据收集与预处理 2.3 模型训练与验证 三、术前预测与评估 3.1 结节性质预测 3.1.1 良恶性判断 3.1.2 与传统诊断方法对比 3.2 手术风险预测…

不同开发语言对字符串的操作

一、字符串的访问 Objective-C: 使用 characterAtIndex: 方法访问字符。 NSString *str "Hello, World!"; unichar character [str characterAtIndex:0]; // 访问第一个字符 H NSLog("%C", character); // 输出: H NSString 内部存储的是 UTF-16 编…

Java开发者如何接入并使用DeepSeek

目录 一、准备工作 二、添加DeepSeek SDK依赖 三、初始化DeepSeek客户端 四、数据上传与查询 五、数据处理与分析 六、实际应用案例 七、总结 【博主推荐】&#xff1a;最近发现了一个超棒的人工智能学习网站&#xff0c;内容通俗易懂&#xff0c;风格风趣幽默&#xff…

S19文件格式详解:汽车ECU软件升级中的核心镜像格式

文章目录 引言一、S19文件格式的起源与概述二、S19文件的核心结构三、S19在汽车ECU升级中的应用场景四、S19与其他格式的对比五、S19文件实例解析六、工具链支持与安全考量七、未来趋势与挑战结语引言 在汽车电子控制单元(ECU)的软件升级过程中,S19文件(也称为Motorola S-…

CTF杂项——[suctf 2019]签到题

base64转图片 可以直接用随波逐流 得到flag SUCTF{ffffffffT4nk}

【Python】整数除法不正确,少1的问题,以及有关浮点数转换的精度问题

1. 问题 今天在做leetcode 不同路径 的时候发现了个问题 对于m53 n4class Solution:def uniquePaths(self, m: int, n: int) -> int:rlt 1for i in range(0, m-1):rlt * (m n - 2 - i)for i in range(0, m-1):rlt / (i 1)return int(rlt)为什么这个结果是 26234class S…

AI无代码平台

以下是目前支持快速开发产品的高生产力免费AI无代码平台推荐&#xff0c;按功能和适用场景分类&#xff1a; 一、全栈应用开发类 Bolt.DIY DeepSeek-R1 无需编写代码即可开发全栈应用&#xff0c;提供免费API和无速率限制&#xff0c;支持AI编码助手与自动化流程 。 优势&…