后端云原生IaC【免费下载链接】serverless-application-modelThe AWS Serverless Application Model (AWS SAM) transform is a AWS CloudFormation macro that transforms SAM templates into CloudFormation templates.项目地址https://gitcode.com/gh_mirrors/se/serverless-application-model点击查看免费下载AWS SAMServerless Application Modeltransform 是 AWS CloudFormation 的一个宏macro它把简洁的 SAM 模板如AWS::Serverless::Function在部署前自动展开为完整的 CloudFormation 模板。本文以当前开源仓库serverless-application-model的 README.md 为核心带你从快速上手、转换原理、插件机制到源码级实现细节全面掌握 SAM transform 的使用方式与底层工作机制。什么是 AWS SAM transformSAM transform 本质上是一个AWS CloudFormation macro当 CloudFormation 在部署模板时遇到宏会先把模板交给宏处理再把宏产出的结果作为真正的 CloudFormation 模板执行。这个仓库就是该宏的开源实现——它将开发者编写的SAM 模板遵循 SAM 规范转换为等价的CloudFormation 模板。使用方式非常简单在 CloudFormation 模板的Transform部分声明宏名称即可Transform: AWS::Serverless-2016-10-31只要模板声明了这个 TransformCloudFormation 就会自动调用本仓库实现的宏逻辑把模板中所有AWS::Serverless::*资源逐一翻译成对应的原生 CloudFormation 资源AWS::Lambda::Function、AWS::IAM::Role、AWS::ApiGateway::*等。使用 SAM transform 的三个核心收益README 明确了使用 SAM transform 的三点价值内置最佳实践与合理默认值Built-in best practices and sane defaults例如为一个AWS::Serverless::Function声明函数时transform 会自动生成配套的 IAM 执行角色、标签、事件源权限等开发者无需手写这些样板资源。本地测试与调试Local testing and debugging with the AWS SAM CLISAM CLIaws-sam-cli在本地模拟 Lambda 与 API Gateway 环境基于同一套模板规范实现本地与云端行为一致。扩展 CloudFormation 模板语法Extension of the CloudFormation template syntaxSAM 提供Globals、Connectors、DeploymentPreference等 CloudFormation 原生不具备的高级抽象让模板更简短、更易维护。快速上手五分钟写出第一个 SAM 应用README 给出了一个可直接落地的入门示例。将下面的内容保存为template.yamlTransform: AWS::Serverless-2016-10-31 Resources: MyFunction: Type: AWS::Serverless::Function Properties: Runtime: nodejs24.x Handler: index.handler InlineCode: | exports.handler async (event) { console.log(event); }然后使用 SAM CLI 直接同步部署sam sync --stack-name sam-app这个模板声明了一个AWS::Serverless::Function资源transform 会把它展开为一个记录打印所收到事件的 AWS Lambda 函数。InlineCode直接内联函数源码适合快速验证生产场景更常用CodeUri指向 S3 或本地代码目录打包后上传。转换后长什么样README 特别给出了转换结果的 YAML 等价形式理解它有助于把握 transform 的魔法所在——一个简洁的函数声明被展开为一个 Lambda 函数外加一个 IAM 角色Resources: MyFunction: Type: AWS::Lambda::Function Properties: Code: ZipFile: | exports.handler async (event) { console.log(event); } Handler: index.handler Role: !GetAtt MyFunctionRole.Arn Runtime: nodejs24.x Tags: - Key: lambda:createdBy Value: SAM MyFunctionRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: 2012-10-17 Statement: - Action: - sts:AssumeRole Effect: Allow Principal: Service: - lambda.amazonaws.com ManagedPolicyArns: - arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole Tags: - Key: lambda:createdBy Value: SAM注意输出中的几个关键点它们正是内置最佳实践的体现角色自动生成MyFunctionRole是 transform 自动创建的 IAM 角色信任策略AssumeRolePolicyDocument仅允许lambda.amazonaws.com服务代入最小权限托管策略默认附加AWSLambdaBasicExecutionRoleCloudWatch Logs 写入权限而非AdministratorAccess之类的宽泛策略溯源标签自动给函数和角色打上lambda:createdBy: SAM标签便于在 AWS 控制台识别由 SAM 创建的资源。深入原理源码视角的转换全流程README 只描述了做了什么而转换如何发生需要深入源码。整个转换的入口位于 samtranslator/translator/transform.py 的transform()函数其调用链如下transform(input_fragment, parameter_values, managed_policy_loader, feature_toggle, passthrough_metadata)是唯一入口input_fragment是待转换的 SAM 模板字典parameter_values是用户提供的模板参数值可能为空字典。调用to_py27_compatible_template做 Python 2/3 哈希兼容处理samtranslator/utils/py27hash_fix.py保证新旧环境生成一致的逻辑 ID。构造Parser与Translator执行translator.translate(...)完成真正的转换最后用undo_mark_unicode_str_in_template还原输出。Translator.translate转换主流程核心逻辑在 samtranslator/translator/translator.py 的Translator.translate()方法中大致分四个阶段阶段一参数准备与插件安装。SamParameterValues负责补全模板参数先注入用户未提供的默认值再注入伪参数如AWS::Region、AWS::AccountId依赖可选的boto_session。随后prepare_plugins装配插件链见下文插件系统一节。阶段二模板校验。Parser 的validate_datatypes检查模板骨架Resources部分必须存在且为字典每个资源必须是对象YAML 缩进错误会在此暴露每个 SAM 资源的Properties必须是 map。阶段三逐资源翻译。这是核心循环translator.py 的 translate 主循环。ResourceTypeResolver根据资源Type找到对应的 SAM 宏类如SamFunction调用to_cloudformation()生成一个或多个原生 CloudFormation 资源随后从原模板删除 SAM 资源、写入翻译结果。翻译过程中还维护了changed_logical_ids逻辑 ID 变更追踪与supported_resource_refs资源引用收集用于最后统一修正跨资源引用。阶段四收尾处理。若启用了部署偏好DeploymentPreference生成 CodeDeploy 应用、IAM 角色与部署组执行after_transform_template生命周期钩子删除Transform声明通过ResolveDependsOn与IntrinsicsResolver修复DependsOn和资源引用最后汇总所有错误——只要存在任意InvalidResourceException等文档级错误整个转换就以InvalidDocumentException失败。资源处理顺序为什么 API 要排在函数后面转换循环并非按模板书写顺序进行。_get_resources_to_iterate规定了处理优先级AWS::Serverless::Function函数的事件可能修改对应 API 的 Swagger 定义AWS::Serverless::StateMachine原因同上AWS::Serverless::Api/HttpApi/WebSocketApi必须在所有 Swagger 修改完成后解析其他 SAM 资源AWS::Serverless::Connector连接器 profile 只作用于纯 CloudFormation 资源。这个顺序保证了函数事件先改写 API 定义、API 再据此生成的依赖关系成立。插件系统SAM 高级语法从何而来Globals、隐式 API、策略模板等 SAM 高级特性并非硬编码在翻译循环里而是由插件系统Plugin实现的。在 translator.py 的 prepare_plugins 中每次转换都会装配以下必需插件插件职责源码位置ServerlessAppPlugin处理AWS::Serverless::Application嵌套应用samtranslator/plugins/application/serverless_app_plugin.pyDefaultDefinitionBodyPlugin为 API 生成默认 OpenAPI/Swagger 定义体samtranslator/plugins/api/default_definition_body_plugin.pyImplicitRestApiPlugin为函数事件自动创建隐式 REST APIsamtranslator/plugins/api/implicit_rest_api_plugin.pyImplicitHttpApiPlugin为函数事件自动创建隐式 HTTP APIsamtranslator/plugins/api/implicit_http_api_plugin.pyGlobalsPlugin实现Globals节向所有资源合并全局默认值samtranslator/plugins/globals/globals_plugin.pyPolicyTemplatesForResourcePlugin展开 SAM 策略模板如SQSPollerPolicysamtranslator/plugins/policies/policy_templates_plugin.py插件沿before_transform_template→ 翻译循环 →after_transform_template生命周期事件参与转换用户自定义插件会先于内置插件执行顺序对ServerlessAppPlugin等依赖方至关重要。这也解释了 README 中扩展 CloudFormation 模板语法的能力来源。源码级细节SAM 函数是如何被翻译的AWS::Serverless::Function是使用率最高的 SAM 资源其定义位于 samtranslator/model/sam_resources.py 的SamFunction类。它声明了近 40 个属性property_types包括Handler、Runtime、CodeUri、InlineCode、Policies、Events、DeploymentPreference、AutoPublishAlias、SnapStart等。其中值得注意的几点1. IAM 角色按需扩权前文示例默认只附加AWSLambdaBasicExecutionRole。查看 SamFunction._construct_role 可知角色策略是按属性动态叠加的启用Tracing且非Disabled时追加 X-Ray 托管策略samtranslator/model/xray_utils.py配置了VpcConfig时追加AWSLambdaVPCAccessExecutionRole配置了DeadLetterQueue时生成对应的死信队列策略sqs:SendMessage等EventInvokeConfig指向 SQS/SNS/EventBridge 等目标时追加sqs:SendMessage、sns:Publish、events:PutEvents等最小权限策略Policies属性支持字符串、策略文档或托管策略 ARN 列表经ResourcePolicies统一解析。2. PackageType 的严格校验_validate_package_type[samtranslator/model/sam_resources.py#L927-L967)区分两种打包方式ZIP需RuntimeHandler且不得携带ImageUri/ImageConfig与IMAGE需ImageUri且不得携带Runtime/Handler/Layers。规则不满足时抛出InvalidResourceException这正是 README 示例必须同时给出Runtime与Handler的原因。3. 溯源标签的实现位置lambda:createdBy: SAM标签的键名常量定义在 samtranslator/model/init.py_SAM_KEY由标签生成工具 samtranslator/model/tags/resource_tagging.py 统一注入函数及自动生成的默认角色。4. 特性开关Feature Toggle转换行为还受 samtranslator/feature_toggle/feature_toggle.py 控制。FeatureToggle根据stage、account_id、region三级配置决定某个新特性是否启用支持toggle与account-percentile两种拨号策略用于生产环境的灰度发布本地默认实现FeatureToggleDefaultConfigProvider对所有查询返回 False保证开源环境行为确定。本地开发与测试从源码构建README 的 Contributing 部分给出了参与该仓库开发的标准流程也适用于想从源码运行 transform 的读者。前提是Python 3.8# 1. 创建并激活虚拟环境 python3 -m venv .venv source .venv/bin/activate # 2. 安装依赖等价于 pip install -e .[dev] make init # 3. 提交 PR 前的完整校验格式检查 lint 单测 覆盖率 make prmake pr实际串起了 Makefile 中的多项任务format-check含 schema 一致性校验、black 格式检查、JSON/YAML 规范检查、lintruff mypy 严格类型检查 cfn-lint 校验生成的 CloudFormation 是否合法、init与devpytest 单测要求samtranslator包覆盖率 ≥ 95%。此外还有make integ-test运行集成测试、make schema重新生成 samtranslator/schema/schema.json 等目标详见 Makefile 与 DEVELOPMENT_GUIDE.md。测试体系如何验证转换正确性这个仓库对转换正确性的验证投入非常大是理解 transform 行为边界的绝佳入口翻译单元测试tests/translator/input/存放数百个 SAM 输入模板覆盖 API、函数、状态机、连接器、策略模板、DeploymentPreference 等几乎全部特性tests/translator/output/存放对应的期望 CloudFormation JSON 输出由 tests/translator/test_translator.py 驱动逐一对拍错误用例tests/translator/input/error_*.yaml系列验证各类非法模板能抛出准确的错误信息插件与模型单测tests/plugins/、tests/model/分别覆盖插件与资源生成器的行为集成测试integration/目录下的用例会真实调用 AWS 服务验证端到端行为需要 companion stack见 INTEGRATION_TESTS.md。总结AWS SAM transform 是连接简洁的 SAM 模板与完整的 CloudFormation 模板之间的桥梁通过声明Transform: AWS::Serverless-2016-10-31开发者得以用几十行的模板描述函数、API、事件源与权限由宏在部署前自动补齐 IAM 角色、托管策略、溯源标签等最佳实践。本文既演示了 README 中的快速上手路径也从 transform.py、translator.py、sam_resources.py 等源码揭示了其翻译主流程、插件机制与校验细节帮助你既会用也懂理。如需深入可继续阅读仓库内的 docs/faq.rst、docs/policy_templates.rst 与 docs/safe_lambda_deployments.rst。赞分享后端云原生IaC【免费下载链接】serverless-application-modelThe AWS Serverless Application Model (AWS SAM) transform is a AWS CloudFormation macro that transforms SAM templates into CloudFormation templates.项目地址https://gitcode.com/gh_mirrors/se/serverless-application-model点击查看免费下载相关推荐Chalice 的 AWS CloudFormation 部署支持从 chalice package 到 SAM 模板合并与 AWS CLI 部署Chalice 的 AWS CloudFormation 部署支持从 chalice package 到 SAM 模板合并与 AWS CLI 部署 本文基于当后端云原生AWS SAM CLI模板验证确保CloudFormation模板正确性的终极指南AWS SAM CLI模板验证确保CloudFormation模板正确性的终极指南 AWS SAM CLI模板验证是Serverless应用开发中不可或缺的关开发工具云原生DevOpsAWS Serverless 新手第一课serverless-application-model 完全指南从 SAM 模板到 CloudFormationAWS Serverless 新手第一课serverless application model 完全指南从 SAM 模板到 CloudFormation后端云原生IaC创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
工业互联网智慧运维落地:从数据采集到预测性维护闭环 简介:本资源是一份面向工业互联网从业者、智能制造工程师及企业数字化转型决策者的《工业互联网智慧运维整体解决方案》PPT课件,聚焦破解传统设备维护响应慢、定位难、成本高、协同差等痛点,系统阐述基于云计算、物联网、AI与数字孪生的智能维… · 2026/9/25 5:17:32
Codex++安全模型详解:为什么它绝不自动安装Tweak更新?运行时边界与5层防护拆解 Codex安全模型详解:为什么它绝不自动安装Tweak更新?运行时边界与5层防护拆解 【免费下载链接】codex-plusplus Codex tweak system for the Codex desktop app 项目地址: https://gitcode.com/gh_mirrors/co/codex-plusplus
Codex 是面向 Codex 桌… · 2026/9/25 5:17:32
机器学习驱动的恶意代码检测:PE特征提取与模型调参实战 简介:基于机器学习检测恶意代码的完整源码项目,面向计算机相关专业学生与安全领域初学者,适用于课程设计、期末大作业及毕业设计等场景。项目以操作码 3-gram 特征为核心,分别采用 TF 与 TF-IDF 构建特征矩阵,并配套 R… · 2026/9/25 5:17:20
Queen 游戏深度解析:源自《Basic Computer Games》的皇后博弈及其多语言移植实现 示例工程 【免费下载链接】basic-computer-games An updated version of the classic "Basic Computer Games" book, with well-written examples in a variety of common MEMORY SAFE, SCRIPTING programming languages. See https://coding-horror.github.io/basic… · 2026/9/25 5:52:30
工业质检全流程评估指南:基于 QualityInspector 的过杀与漏检指标实战 人工智能计算机视觉预训练 【免费下载链接】PaddleSeg Easy-to-use image segmentation library with awesome pre-trained model zoo, supporting wide-range of practical tasks in Semantic Segmentation, Interactive Segmentation, Panoptic Segmentation, Image Matting,… · 2026/9/25 5:52:30
NextSuite v6.50.0在Delphi 12 Athens中的安装编译与实战避坑指南 简介:Bergsoft NextSuite (VCL) v6.50.0是一套面向Borland Delphi与C Builder 6至12版本的VCL组件完整源码包,覆盖用户界面、数据库访问、网络通信及系统级功能,主要服务于需要跨平台桌面应用开发、希望深入定制底层组件的开发者。包内共1355… · 2026/9/25 5:52:30
Humanizer Truncator 类全解析:从固定长度到保词截断的完整指南 开发工具 【免费下载链接】Humanizer Humanizer meets all your .NET needs for manipulating and displaying strings, enums, dates, times, timespans, numbers and quantities 项目地址: https://gitcode.com/gh_mirrors/hu/Humanizer 点击查看 免费下载 导读 … · 2026/9/25 5:52:30
Atlas 300V 24G部署YOLOv8推理:从PyTorch到OM的完整实践 上个月团队进了一批Atlas 300V 24G,我在上面折腾了整整两个礼拜,把YOLOv8从PyTorch权重一路搬到了昇腾NPU上跑推理。中间踩的坑,比过去一年用GPU踩的加起来都多。所以这篇东西我不打算写什么高大上的架构解析,就把"Atlas 300… · 2026/9/25 5:52:23
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37