写点什么

将现有资源导入 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:00866

评论

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

通过npm+Vant Weapp 构建微信小程序

kcnf

通达系统架构设计文档

小锅米线

maven工具的使用

Rubble

4月日更

设计电商秒杀系统

唐尤华

架构实战营

关于线程池,面试的时候你时候还打怵,这里我有话要说保证让你对线程池的各个参数一边就懂

派大星

线程池

明道云如何实现银行内部评级管理

明道云

Rust的对象安全性

Shine

rust

聊聊最近比较火的一款Web3.0应用(25/100)

hackstoic

区块链 gamefi Web3.0 stepn Play2Earn

RocketMQ—Producer(二)路由动态更新

IT巅峰技术

Apache RocketMQ

大话后端开发的奇技淫巧大集合

SFLYQ

架构 Web 后端 服务端 经验分享

读《A Philosophy of Software Design》(01-07)

术子米德

架构师成长笔记

Spinner: 往Pinterest新工作流平台的大规模迁移

俞凡

架构 工作流引擎 大厂实践 Pinterest

MapReduce 学习思考

en

mapreduce

使用 fluro 转场动画优化页面跳转体验

岛上码农

flutter 移动端开发 安卓开发 4月月更 苹果开发

Kubernetes官方java客户端之七:patch操作

程序员欣宸

4月月更

兑现 Service Mesh 的新价值:精确控制“爆炸半径”

阿里巴巴云原生

分布式链路追踪

yuexin_tech

链路追踪

Linux驱动开发-安装驱动参数传递

DS小龙哥

4月月更

WEB3的DAO生态服务平台,SeekTiger展现新的契机

小哈区块

开源IM项目OpenIM发布消息推送api,支持应用与IM互通深度融合

Geek_1ef48b

作业七

Geek_f3e842

架构实战营

通达快递系统设计

peter

mysql的FIND_IN_SET group_concat 函数

Rubble

MySQL 4月日更

云原生时代如何用 Prometheus 实现性能压测可观测-Metrics 篇

阿里巴巴云原生

开源IM项目OpenIM每周迭代版本发布-群管理 阅后即焚等-v2.0.6

Geek_1ef48b

架构实战营毕业总结(第 5 期)

唐尤华

架构实战营

Bigdata作业 第五周

Pyel

剑指Offer之面试题57: 和为s的数字

宇宙之一粟

算法刷题 4月月更 剑指Offer

Spring容器的灵魂

IT巅峰技术

Spring 框架漏洞

Spring容器的核心组件

IT巅峰技术

Spring Boot 整合Dubbo + Zookeeper 实现分布式 消费者与服务者的业务调用

Bug终结者

Java dubbo springboot

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