写点什么

将现有资源导入 CloudFormation 堆栈中

  • 2019-11-22
  • 本文字数:2500 字

    阅读完需:约 8 分钟

将现有资源导入 CloudFormation 堆栈中

凭借 AWS CloudFormation,您可以使用文本文件对您的整个基础设施进行建模。用此方式,您可以将基础设施视为代码并应用软件开发最佳实践,包括将其置于版本控制中,或在部署前与您的团队一起审查架构变化。


有时候,最初使用控制台或 AWS 命令行界面 (CLI) 创建的 AWS 资源需要使用 CloudFormation 进行管理。例如,您(或者另一个团队)可以在迁移的早期阶段创建 IAM 角色Virtual Private CloudRDS 数据库,然后,您必须花时间将它们纳入与最终应用程序相同的堆栈中。在此类情况下,您最终通常需要使用 CloudFormation 从头开始重新创建资源,然后再从原始资源中迁移配置和数据。


要想使这些步骤对客户更加容易,您现在可以将现有资源导 CloudFormation 堆栈中!


已经可以通过将 DeletionPolicy 设置为保留来在不删除资源的情况下将其从堆栈中删除。这一点与新的导入操作一起提供了一系列新的可能性。例如,您现在能够:


  • 创建新堆栈以导入现有资源。

  • 在已经创建的堆栈中导入现有资源。

  • 在堆栈间迁移资源。

  • 修复检测到的偏离

  • 通过从一个父级堆栈中删除子堆栈,然后将其导入另一个父级堆栈来重构嵌套堆栈


要将现有资源导入 CloudFormation 堆栈,您需要提供:


  • 描述整个堆栈的模板,同时包括要导入的资源和(对于现有堆栈)和已经属于堆栈一部分的资源。

  • 要导入的每个资源在模板中都必须有一个 DeletionPolicy 属性。这样一来,便能以完全安全的方式轻松恢复操作。

  • 每个目标资源的唯一标识符,例如,Amazon DynamoDB 表的名称或您要导入的 Amazon Simple Storage Service (S3) 存储桶的名称。


CloudFormation 会在资源导入操作期间检查如下内容:


  • 导入的资源不属于同一个区域中的另一个堆栈(注意 IAM 角色等全局资源)。

  • 目前资源存在,且您拥有足够的权限来执行操作。

  • 属性和配置值对于资源类型架构是有效的,资源类型架构对其所需的可接受的属性和支持的值进行了定义。


资源导入操作没有检查模板配置和实际配置是否相同。由于导入操作支持与偏离检测相同的资源类型,我建议在将资源导入堆栈后运行偏离检测。


**将现有资源导入新堆栈中


**我的 AWS 账户中拥有一个 S3 存储桶和一个 DynamoDB 表,它们里面都包含一些数据,我希望使用 CloudFormation 来管理它们。 在 CloudFormation 控制台中,我拥有两个新选项:


  • 我可以创建新堆栈以导入现有资源。



  • 我可以将资源导入现有堆栈中。



在此情况下,我想要从头开始,因此,我创建了新堆栈。 接下来,提供一个包含要导入资源的模板。



我上传了包含两个要导入资源(DynamoDB 表和 S3 存储桶)的以下模板。


YAML


AWSTemplateFormatVersion: "2010-09-09"Description: Import testResources:
ImportedTable: Type: AWS::DynamoDB::Table DeletionPolicy: Retain Properties: BillingMode: PAY_PER_REQUEST AttributeDefinitions: - AttributeName: id AttributeType: S KeySchema: - AttributeName: id KeyType: HASH
ImportedBucket: Type: AWS::S3::Bucket DeletionPolicy: Retain
复制代码


在此模板中,我将两种资源的 DeletionPolicy 均设置为保留。用此方式,当您从堆栈中移除它们时不会将它们删除。对于包含您不想错误删除的数据的资源或您可能希望在未来移动到另一个堆栈的资源,这是一个很好的选项。 对于已导入的资源,必须设置一个删除策略,以便您可以轻松安全地恢复操作,防止错误地删除其他人导入的资源。


现在,我必须提供一个标识符来将模板中的逻辑 ID 与现有资源映射。在本例中,我使用 DynamoDB 表名称和 S3 存储桶名称。对于其他资源类型,可能存在多种标识方式,您可以在下拉菜单中选择要使用的属性。



在最终的回顾中,我先查看了更改,然后再进行应用。 在此,我检查并确认,我用正确的标识符锁定了要导入的正确资源。 这实际上是将在我导入资源时执行的 CloudFormation 更改集



将资源导入某个现有堆栈时,不允许对该堆栈的现有资源进行更改。导入操作只允许对导入进行更改集操作。 只要更改参数不会对现有资源的属性解析值造成变化,即可允许此更改。您可以更改现有资源的模板,从而将硬编码值替换为待导入资源的 Ref。 例如,您可能拥有一个包含 EC2 实例的堆栈,该堆栈使用通过控制台创建的现有 IAM 角色。您现在可以将 IAM 角色导入堆栈中,并在模板中将 EC2 实例使用的硬编码值替换为该角色的 Ref


接下来,每个资源在 CloudFormation 控制台中都有其相应的导入事件。



当导入完成时,我在资源选项卡中看到 S3 存储桶和 DynamoDB 表已成为堆栈的一部分。



为确保导入的资源与堆栈模板同步,我使用了偏离检测。



所有的堆栈级标签,包括自动创建的标签都会填充到 CloudFormation 支持的资源中。例如,我可以使用 AWS CLI 将标签集与我刚导入堆栈中的 S3 存储桶关联。这些标签为我提供 CloudFormation 堆栈名称和 ID,以及堆栈模板中的资源的逻辑 ID:


$ aws s3api get-bucket-tagging --bucket danilop-toimport


Json


{  "TagSet": [    {      "Key": "aws:cloudformation:stack-name",      "Value": "imported-stack"    },    {      "Key": "aws:cloudformation:stack-id",      "Value": "arn:aws:cloudformation:eu-west-1:123412341234:stack/imported-stack/..."    },    {      "Key": "aws:cloudformation:logical-id",      "Value": "ImportedBucket"    }  ]}
复制代码


**现已推出


**您可以在以下区域通过控制台AWS 命令行界面 (CLI)AWS 软件开发工具包使用新的 CloudFormation 导入操作:美国东部(俄亥俄)、美国东部(弗吉尼亚北部)、美国西部(加利福尼亚北部)、美国西部(俄勒冈)、加拿大(中部)、亚太地区(孟买)、亚太地区(首尔)、亚太地区(新加坡)、亚太地区(悉尼)、亚太地区(东京)、欧洲(法兰克福)、欧洲(爱尔兰)、欧洲(伦敦)、欧洲(巴黎)和南美洲(圣保罗)。


现在,您可以更简单的管理您的基础设施即代码,要了解更多信息,您可以参见文档中的将现有资源引入 CloudFormation 管理


本文转载自 AWS 技术博客。


原文链接:


https://amazonaws-china.com/cn/blogs/china/new-import-existing-resources-into-a-cloudformation-stack/


2019-11-22 08:00744

评论

发布
暂无评论
发现更多内容

在世界人工智能大会,看京东AI向产业奔涌

脑极体

挑战30天学完Python:Day1火力全开-初识Python(含系列大纲)

MegaQi

9月月更 挑战30天学完Python

DPDK技术学习路线总结,虚拟化专家之路

C++后台开发

后台开发 DPDK VPP OvS DPDK开发

小六六学Netty系列之Java BIO

自然

网络 9月月更 neety

深入思考Schema管理的几个基本问题

HackMSF

Java工程师丨面试必会进程线程问答

陈橘又青

Java 面试 9月月更

软件复杂性的来源与应对

源字节1号

软件开发 前端开发 后端开发 小程序开发

秋招国内大厂最牛的Java面试八股文合集(全彩版),不接受反驳

退休的汤姆

Java 程序员 面经 Java工程师 秋招

PANAMA: 共享机器学习集群的网内聚合框架

俞凡

大数据 架构 网络

C++学习------cerrno头文件的作用与源码学习

桑榆

c++ 9月月更

中小企业集成AI人工智能的窘境

felix

人工智能 中小企业 开放应用模型

设计模式的艺术 第十三章外观设计模式练习(为新开发的智能手机控制与管理软件提供一键备份功能。通过该功能可以将原本存储在手机中的通讯录、短信、照片、歌曲等资料一次性地全部复制到移动存储介质(如MMC卡或SD卡)中。实现过程中需要与多个已有的类进行交互)

代廉洁

设计模式的艺术

常见的网络安全攻击及防御技术概述

阿泽🧸

网络安全 9月月更

【大话 C 语言】春眠不觉晓,函数知多少?

Albert Edison

递归 C语言 函数 开发语言 9月月更

如果你是Java程序员,你会选择Cloud Studio进行云端开发,放弃IDEA吗?

wljslmz

Java Cloud Studio 9月月更

C++后台开发学习路线(已多人拿下腾讯后台开发)

C++后台开发

后台开发 后端开发 C++后台开发 C++开发 腾讯后台开发

腾讯T4整合Spring+Spring MVC+MyBatis+Redis实现

退休的汤姆

Java 程序员 面经 Java工程师 秋招

数据存储与物联网

CnosDB

IoT 时序数据库 开源社区 CnosDB infra

数据治理的内核:元数据管理

小鲸数据

数据治理 数字化 元数据 元数据管理 元数据管理平台

费时3个月啃烂了这份Redis技术笔记,我成功上岸进了字节

收到请回复

redis 架构 语言 & 开发 Java core redis 底层原理

如何成为资深的测试专家

穿过生命散发芬芳

测试 9月月更

小六六学Netty系列之Java NIO(一)

自然

网络 9月月更 neety

分布式技术难学?谷歌大神首发纯手撸ZK+Dubbo笔记,网友看完直呼NB

收到请回复

Java zookeeper 架构 分布式 语言 & 开发

设计模式的艺术 第十一章组合设计模式练习(开发一个界面控件库。界面控件分为两大类:一类是单元控件,例如按钮、文本框等;另一类是容器控件,例如窗体、中间面板等。试用组合模式设计该界面控件库)

代廉洁

设计模式的艺术

重学网络系列之(我的名字叫IP)

自然

网络 9月月更

完美!华为大佬手码20w字Redis全栈小册,原来Redis性能可压榨到极致

Java全栈架构师

数据库 redis 程序员 面试 后端

设计模式的艺术 第十二章装饰设计模式练习(开发一个数据加密模块,可以对字符串进行加密。最简单的加密算法通过对字母移位来实现,同时提供了稍复杂的逆向输出加密和更高级的求模加密。用户先用最简单的算法加密,如果觉得不够,可以使用其他算法进行二次加密和三次加密)

代廉洁

设计模式的艺术

《游戏机图鉴》:发展、继承、崩溃、复兴,游戏机的前世今生

图灵社区

科普 游戏机

首次发布!Java面试八股文让569人成功进入大厂,堪称2022最强面试八股文核心知识版!

退休的汤姆

Java 程序员 面经 秋招 Java八股文

将现有资源导入 CloudFormation 堆栈中_语言 & 开发_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章