cloudformation Flashcards
(14 cards)
AWS CloudFormation 是什么类型的服务?它的主要目的是什么?
AWS CloudFormation 是一种基础设施即代码 (IaC) 服务。它旨在帮助您以声明式方式定义和管理 AWS 基础设施。您可以使用代码(通常是 JSON 或 YAML 文件)来描述您希望在 AWS 中拥有的所有资源,然后 CloudFormation 会自动为您预置和管理这些资源。
使用 AWS CloudFormation 的主要优势有哪些?
主要优势包括:
* 基础设施即代码 (IaC):所有资源都通过代码创建,消除了手动操作,支持版本控制(如 Git)和代码审查,增强了控制力。
* 成本效益:栈中的每个资源都有标识符,便于跟踪成本。可以通过模板估算成本,甚至自动化开发环境的模板删除和重新创建以节省开支。
* 提高生产力:能够即时销毁和重新创建云基础设施。它支持自动化生成基础设施图表,并采用声明式编程,无需考虑资源的创建顺序和编排。
* 关注点分离:可以为不同的应用程序和基础设施层创建多个独立的栈(例如,VPC 栈、网络栈、应用程序栈)。
* 代码复用:可以利用现有模板和文档,避免重复劳动。
CloudFormation 模板的文件格式是什么?它们如何被 CloudFormation 使用?
CloudFormation 模板通常使用 JSON 或 YAML 格式的文件编写。模板文件必须首先上传到 Amazon S3 存储桶,然后 CloudFormation 会引用这些文件来创建和管理 AWS 资源集合,这个集合被称为“栈 (Stack)”。
CloudFormation 模板中最核心且强制的组成部分是什么?请说明其作用和命名约定。
CloudFormation 模板中最核心且强制的组成部分是 Resources
。\n* 作用:它声明了将被创建和配置的各种 AWS 组件。资源可以相互引用,AWS 负责它们的创建、更新和删除。\n* 命名约定:资源类型通常遵循 service-provider::service-name::data-type-name
格式。
CloudFormation 模板中的 Parameters
和 Mappings
有什么区别?它们各自适用于什么场景?
\n* Parameters
(参数):用于向 CloudFormation 模板提供动态输入。它们适用于模板需要在不同环境(如开发、生产)中,或无法提前确定的输入值。参数可以定义类型、默认值、允许值、长度限制等来控制输入。当资源配置可能在未来发生变化时,应将其定义为参数。\n* Mappings
(映射):用于定义模板中固定的变量。它们适用于根据区域、环境或 AMI 类型等来区分配置的场景。所有的值都在模板中硬编码。\n* 区别和适用场景:当您提前知道所有可能的值,并且这些值可以根据区域、AWS 账户或环境等变量推导出来时,使用 Mappings
更安全、更有控制力。当值是用户特定或无法预先确定时,使用 Parameters
。
如何在 CloudFormation 模板中引用参数或其他资源?
在 CloudFormation 模板中,可以使用 Fn::Ref
函数来引用参数或其他资源。在 YAML 格式中,其简写形式为 !Ref
。
Outputs
部分在 CloudFormation 模板中的作用是什么?它如何实现跨栈协作?
Outputs
部分声明了可选的输出值。这些输出值可以在 AWS 控制台或 AWS CLI 中查看。它们非常有用,例如,当您定义一个网络 CloudFormation 栈,并将其 VPC ID 和子网 ID 作为输出时。\n为了实现跨栈协作,输出值可以导出 (export),然后被其他栈导入 (import)。导入时使用 Fn::ImportValue
函数。
CloudFormation 中的回滚 (Rollback) 机制是如何工作的?
\n* 栈创建失败:默认情况下,如果栈创建失败,所有已创建的资源都会回滚并删除。可以选择禁用回滚以便进行故障排除。\n* 栈更新失败:如果栈更新失败,栈会自动回滚到上一个已知的工作状态。\n这种机制确保了基础设施的稳定性。
在部署包含 IAM 资源的 CloudFormation 模板时,需要明确确认哪些能力 (Capabilities)?
在部署包含 IAM 资源的 CloudFormation 模板时,需要明确确认 CAPABILITY_IAM
或 CAPABILITY_NAMED_IAM
能力。如果 IAM 资源有自定义名称,则需要使用 CAPABILITY_NAMED_IAM
。这是安全措施,用于确认模板可能创建或修改 IAM 资源。
CloudFormation 的 DeletionPolicy
属性有哪几种值?它们各自的作用是什么?
DeletionPolicy
属性控制当 CloudFormation 模板被删除或资源从模板中移除时,资源的生命周期行为。它是一种额外的安全措施,用于保护和备份资源。\n* Delete
(默认):删除资源。注意:对于非空 S3 存储桶,Delete
策略将不起作用。\n* Retain
:保留资源,不删除。适用于任何资源类型。\n* Snapshot
:在删除资源之前创建最终快照。这适用于支持快照的资源,例如 EBS 卷、ElastiCache 集群、RDS 数据库实例等。
什么是 CloudFormation 的 Stack Policies
(栈策略)?它的主要用途是什么?
Stack Policies
是一个 JSON 文档,它定义了在栈更新期间允许对特定资源执行哪些更新操作。它的主要用途是防止对生产环境中的关键资源进行意外的更新。当设置了栈策略后,默认情况下栈中的所有资源都会受到保护,需要显式指定 ALLOW
才能允许对某些资源进行更新。
什么是 CloudFormation 的 Custom Resources
(自定义资源)?它们通常通过什么服务实现?
Custom Resources
允许您定义 CloudFormation 尚未原生支持的资源。它们也可以用于为 CloudFormation 外部的资源(如本地资源、第三方资源)定义自定义的预置逻辑。它们通常通过 AWS Lambda 函数来实现。在模板中,自定义资源可以定义为 AWS::CloudFormation::CustomResource
或 Custom::MyCustomResourceTypeName
。
什么是 CloudFormation 的 StackSets
(栈集)?它的主要优势是什么?
StackSets
允许您通过单个操作和模板在多个 AWS 账户和区域中创建、更新或删除栈。它的主要优势是实现了多账户和多区域部署的自动化和集中管理,尤其适用于 AWS Organizations。只有管理员账户(或委派管理员)可以创建栈集。
如何在 CloudFormation 模板中动态引用 AWS Systems Manager Parameter Store 或 AWS Secrets Manager 中的值?
可以使用动态引用 (Dynamic References)。CloudFormation 会在创建、更新或删除操作期间检索指定引用(例如 ssm
用于 Parameter Store 的纯文本值,ssm-secure
用于 Parameter Store 的安全字符串,secretsmanager
用于 Secrets Manager 的秘密值)的值。例如,引用 Secrets Manager 中的密码可以使用 {{resolve:secretsmanager:secret-id:secret-string:json-key:version-stage:version-id}}
格式。