aws cloudformation 理解宏的使用

news2024/10/6 8:34:35

资料

  • 使用 AWS CloudFormation 宏对模板执行自定义处理
  • Macros Examples
  • 使用 AWS Lambda 支持的宏扩展 AWS CloudFormation

宏的理解

在cfn模板的创建过程中,我们会使用内置函数和伪函数对配置参数进行进一步处理,避免冗长的写法,更灵活的配置堆栈。但是仅仅使用托管的cfn内置函数可能仍旧无法满足我们的需要,这个时候我们就可以使用宏函数进行定制。

顾名思义,宏就是一段处理函数,处理的内容是cfn模板本身

我们可以创建类型为AWS::CloudFormation::Macro,该资源能够在cfn中调用lambda函数

cfn模板宏的执行逻辑如下

img

从上图可以看出,宏的使用方式有两种:

  • Fn::Transform,处理模板的一部分

  • 在模板的Transform部分指定,处理整个模板

    Transform:
      - MyMacro
      - 'AWS::Serverless'
    

cfn有一些宏是托管的,最常用的有:

  • AWS::Serverless ,通过sam的写法简化lambda函数的创建

  • AWS::Include ,引入cfn模板片段,无法嵌套include

    # 最终渲染的结果是有两个WaitHandle资源
    $ cat single_wait_condition.yaml
    WebServerWaitHandle:
      Type: 'AWS::CloudFormation::WaitConditionHandle'
      
    $ cat main.yaml
    Resources:
      MyWaitHandle:
        Type: 'AWS::CloudFormation::WaitConditionHandle'
      'Fn::Transform':
        Name: 'AWS::Include'
        Parameters:
          Location : "s3://MyAmazonS3BucketName/single_wait_condition.yaml"
    

此外还有以下注意点:

  • 宏依赖lambda函数
  • 宏的解析在模板处理之前,宏在内部函数之前处理
  • 宏中无法嵌套宏
  • 引用宏的堆栈无法通过更改集更新,只能直接更新或重建

测试宏

创建cfn堆栈测试,我们直接以示例String function中的宏啦测试

注意:需要开启以下权限CAPABILITY_AUTO_EXPAND

CAPABILITY_AUTO_EXPAND Some templates reference macros. If your stack set template references one or more macros, you must create the stack set directly from the processed template, without first reviewing the resulting changes in a change set. To create the stack set directly, you must acknowledge this capability

string function宏的用法如下,不同场景示例参考(upper,lower,replace等),使用经典的一句话26字母

Parameters:
  InputString:
    Default: "The quick brown fox jumps over a lazy dog"
    Type: String
Resources:
  S3Bucket:
    Type: "AWS::S3::Bucket"
    Properties:
      Tags:
        - Key: Upper
          Value:
            'Fn::Transform':
             - Name: 'String'
               Parameters:
                 InputString: !Ref InputString
                 Operation: Upper

查看string function创建的lambda处理函数,实际上就是对params.InputString参数按照Operation进行处理,抓取下事件信息

import traceback
def handler(event, context):
    print(event)
    response = {
        "requestId": event["requestId"],
        "status": "success"
    }
    try:
        operation = event["params"]["Operation"]
        input = event["params"]["InputString"]
        no_param_string_funcs = ["Upper", "Lower", "Capitalize", "Title", "SwapCase"]
        if operation in no_param_string_funcs:
            response["fragment"] = getattr(input, operation.lower())()
        elif operation == "Strip":
            chars = None
            if "Chars" in event["params"]:
                chars = event["params"]["Chars"]
            response["fragment"] = input.strip(chars)
        elif operation == "Replace":
            old = event["params"]["Old"]
            new = event["params"]["New"]
            response["fragment"] = input.replace(old, new)
        elif operation == "MaxLength":
            length = int(event["params"]["Length"])
            if len(input) <= length:
                response["fragment"] = input
            elif "StripFrom" in event["params"]:
                if event["params"]["StripFrom"] == "Left":
                    response["fragment"] = input[len(input)-length:]
                elif event["params"]["StripFrom"] != "Right":
                    response["status"] = "failure"
            else:
                response["fragment"] = input[:length]
        else:
            response["status"] = "failure"
    except Exception as e:
        traceback.print_exc()
        response["status"] = "failure"
        response["errorMessage"] = str(e)
    return response

转换之前的模板

Parameters:
  InputString:
    Default: "The quick brown fox jumps over a lazy dog"
    Type: String
Resources:
  S3Bucket:
    Type: "AWS::S3::Bucket"
    Properties:
      Tags:
        - Key: Upper
          Value:
            'Fn::Transform':
             - Name: 'String'
               Parameters:
                 InputString: !Ref InputString
                 Operation: Upper

转换之后的模板

Parameters:
  InputString:
    Default: The quick brown fox jumps over a lazy dog
    Type: String
Resources:
  S3Bucket:
    Properties:
      Tags:
        - Value: THE QUICK BROWN FOX JUMPS OVER A LAZY DOG
          Key: Upper
    Type: AWS::S3::Bucket

查看下cw log的日志观察下请求和响应

{
    "accountId": "xxxxxxxxxxxx",
    "fragment": {},
    "transformId": "xxxxxxxxxxxx::String",
    "requestId": "da2a76a3-594c-4b8b-9d13-d571bcf631b5",
    "region": "cn-north-1",
    "params": {
        "InputString": "The quick brown fox jumps over a lazy dog",
        "Operation": "Upper"
    },
    "templateParameterValues": {
        "InputString": "The quick brown fox jumps over a lazy dog"
    }
}

响应,cfn会将fragment中的值提取出来作为模板的内容

The processed template content for AWS CloudFormation to include in the processed template, including siblings. AWS CloudFormation replaces the template content that is passed to the Lambda function with the template fragment it receives in the Lambda response.

{
    "requestId": "f42a896f-c9e0-4560-8996-0ef5b72d3ae2",
    "status": "success",
    "fragment": "THE QUICK BROWN FOX JUMPS OVER A LAZY DOG"
}

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

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

相关文章

西门子精彩触摸屏SMART V3组态报警的具体方法示例

西门子精彩触摸屏SMART V3组态报警的具体方法示例 用户自定义报警分为离散量报警和模拟量报警。 离散量报警:离散量对应于二进制数的1位,离散量的两种相反状态可以用1位二进制数的0、1状态来表示。例如:电动机的交流接触器的接通和断开、各种故障信号的出现和消失,都可以用…

建模助手:Revit中梁注释设置表达相对净高

一、Revit中梁注释设置表达相对净高 当我们利用 Revit 软件做管综的时候&#xff0c;需要明确与结构体的相对位置关系&#xff0c;下面我们就用“梁标记”的方式来做一下标记&#xff0c;在平面图上表达一下相对净高。如下图&#xff1a; 这样的平面梁标注是如何做上去的呢? 首…

获取网络时间、解析xml、截取string

很多游戏具有每日登陆奖励功能&#xff0c;为防止玩家修改本地时间&#xff0c;需要读取服务器时间。下面分两部分介绍获取网络时间的两种方法&#xff0c;第一部分解析xml&#xff0c;第二部分截取string。 第一部分&#xff1a;通过国家授时中心链接获得的数据如下: 获取网络…

互联网+医疗解决方案

国家“互联网”行动指导意见&#xff0c;明确“互联网医疗健康”行动路线。 制定“互联网”行动计划&#xff0c;推动移动互联网、云计算、大数据、物联网等与现代制造业结合&#xff0c;促进电子商务、工业互联网和互联网金融健康发展&#xff0c;引导互联网企业拓展国际市场…

麒麟信安携手河南IT联盟召开 《麒麟信安信创应用解决方案》线上分享会

在党政及金融、交通、能源等重要行业的信创应用步伐逐步加快的背景下&#xff0c;各行业均面临着不同程度的国产化落地难题。11月29日下午&#xff0c;麒麟信安与河南省信息协会IT产业分会&#xff08;河南IT联盟&#xff09;携手召开《麒麟信安信创应用解决方案》线上分享会&a…

微信小程序| 做一款可以计算亲戚关系的计算器

&#x1f4cc;个人主页&#xff1a;个人主页 ​&#x1f9c0; 推荐专栏&#xff1a;小程序开发成神之路 --【这是一个为想要入门和进阶小程序开发专门开启的精品专栏&#xff01;从个人到商业的全套开发教程&#xff0c;实打实的干货分享&#xff0c;确定不来看看&#xff1f; …

Spring(Spring的理解+DI+Spring的创建)

目录 1. Spring 是什么 2. DI 3. 面试题: IoC 和 DI 有什么区别? 4. Spring 的创建 5. 将 Bean (对象) 存储到 Spring (容器) 中 6. 将 Bean (对象) 从 Spring (容器) 中取出来 7. 面试题: ApplicationContext 和 BeanFactory的区别 8. getBean 更多用法 1. Spring 是…

能否在虚拟平台里构建真实的生活体验?

接近三年的疫情&#xff0c;重构了每一个人的生活。线下活动的频繁延期、取消&#xff0c;使得物理空间的聚集充满了不确定性&#xff0c;线上办公、网络授课等远程协同的方式在这样的时代背景下&#xff0c;毫无疑问成了主旋律。曾经只停留在想象层面的不出门就能完成工作、上…

u盘打不开常见原因|数据恢复方法|解决方案

u盘作为一种常用的外部存储器&#xff0c;能够帮助我们存放大量的数据&#xff0c;如图片、文档、视频等文件类型。但是在使用过程中&#xff0c;难免会遇到这样或那样的问题&#xff0c;比如使用过程中出现u盘打不开的情况&#xff0c;但是里面又有自己重要的文件&#xff0c;…

数字图像处理(入门篇)一 图像的数字化与表示

目录 1 人眼图像是如何形成的&#xff1f; 2 图像的感知与获取&#xff1f; 3 图像的数字化 4 数字图像的表示 1 人眼图像是如何形成的&#xff1f; 人眼近似为一个球体&#xff0c;物体的光线经过角膜和晶状体的折射&#xff0c;在视网膜上形成“倒立缩小”的实像。 视网膜…

这或许是全网最详细的介绍预言机赛道的视频课程,通俗易通,有趣有料!

图片来源&#xff1a;由无界版图 AI 绘画工具生成有一句话在创业者中很流行&#xff1a;Web3创业三大坑&#xff0c;隐私、跨链、预言机……搞塌加密市场的DK和SBF还在豪华度假酒店里思考人生搞隐私&#xff0c;一毛钱没赚到的Tornado cash开发者却在吃牢饭……加密圈前十大资产…

javascript中的polyfill是什么,polyfill和babel的关系

首先我们看看这个单词的意思 好像也没有解释啥&#xff0c;但是给人的感觉是一种用来补充&#xff0c;优化的东西。 没错在js中也正有这个意思 js中的polyfill用来表示&#xff0c;根据新特性的定义&#xff0c;创建一段与之行为等价&#xff0c;但是能够在旧的js环境中运行的…

如何实现机器人自动拉微信群

如果想长期运营一个微信群&#xff0c;每天手动拉人进群是很痛苦的事情。实际上可以用微信机器人来替代人力&#xff0c;实现过程也并没有想象中的那么困难 引导一下思路 1. 经验分析 如果是手动拉人进群的话&#xff0c;根据我们的日常经验&#xff0c;基本上逻辑是这样的&…

​GENIUS: 根据草稿进行文本生成的预训练模型,可用于多种NLP任务的数据增强...

©PaperWeekly 原创 作者 | 郭必扬 单位 | 上海财经大学信息管理与工程学院AI Lab论文标题&#xff1a;GENIUS: Sketch-based Language Model Pre-training via Extreme and Selective Masking for Text Generation and Augmentation论文作者&#xff1a;Biyang Guo, Yeyu…

赤霉素3β-羟化酶的下调增强了大豆的光合作用并提高了种子产量

文章信息 题目&#xff1a;Downregulation of a gibberellin 3β-hydroxylase enhances photosynthesis and increases seed yield in soybean 刊名&#xff1a;New Phytologist 作者&#xff1a;Fang Huang,Zhixi Tian,Deyue Yu et al. 单位&#xff1a;Nanjing Agricultu…

探讨下如何更好的使用缓存 —— 集中式缓存Redis的BitMap存储、管道与事务、以及与本地缓存一起构建多级缓存

大家好&#xff0c;又见面了。 通过前面的文章&#xff0c;我们一起剖析了Guava Cache、Caffeine、Ehcache等本地缓存框架的原理与使用场景&#xff0c;也一同领略了以Redis为代表的集中式缓存在分布式高并发场景下无可替代的价值。 现在的很多大型高并发系统都是采用的分布式…

Oracle自定义函数实现递归查询(用自定义函数替换connect_by_root)

Oracle自定义函数实现递归查询&#xff08;用自定义函数替换connect_by_root&#xff09;1. 前言2. connect_by_root 和 自定义函数2.1 用 connect_by_root 实现2.2 用 自定义函数实现2.2.1 自定义函数2.2.2 实现效果1. 前言 看这篇文章之前可以先看下面的文章 oracle递归查询&…

B站季报图解:营收58亿净亏收窄36% 日活突破9000万

雷递网 雷建平 11月29日哔哩哔哩股份有限公司&#xff08;简称&#xff1a;“B站”&#xff09;今日发布财报。财报显示&#xff0c;B站2022年第三季营收57.9亿&#xff0c;同比增11%。B站2022年第三季度日均活跃用户数达9030万&#xff0c;月均活跃用户数达3.33亿&#xff0c;…

springboot整合minio

minio是对象存储服务。它基于Apache License 开源协议&#xff0c;兼容Amazon S3云存储接口。适合存储非结构化数据&#xff0c;如图片&#xff0c;音频&#xff0c;视频&#xff0c;日志等。对象文件最大可以达到5TB。 优点有高性能&#xff0c;可扩展&#xff0c;操作简单&a…

招标网站信息爬取

目标网站 某采购与招标网  代码链接code-repo 准备工作 参考博客[1]&#xff0c;使用谷歌浏览器的开发者工具&#xff0c;提取http的表单信息。  http post 中的表单信息&#xff0c;需要含有_qt信息。网站使用_qt做反爬虫措施。_qt由服务器返回&#xff0c;在不同的会话中…