资讯中心

基础设施即代码:erlcloud CloudFormation 部署 AWS 资源的实战教程

📅 2026/8/20 18:18:20
基础设施即代码:erlcloud CloudFormation 部署 AWS 资源的实战教程
基础设施即代码erlcloud CloudFormation 部署 AWS 资源的实战教程【免费下载链接】erlcloudAWS APIs library for Erlang (Amazon EC2, S3, SQS, DDB, ELB and etc)项目地址: https://gitcode.com/gh_mirrors/er/erlcloud还在为手工点击 AWS 控制台创建 EC2、S3、VPC 而头疼吗本文带来一份面向新手的erlcloud CloudFormation 实战教程教你用 Erlang 语言以代码方式定义并部署 AWS 资源。erlcloud 是 Erlang 生态中最成熟的 AWS API 客户端库覆盖 EC2、S3、SQS、DDB、ELB、CloudFormation 等数十项服务而CloudFormation 部署 AWS 资源正是实现基础设施即代码Infrastructure as Code的最佳入口。跟着本文的完整步骤从环境搭建到创建堆栈、更新与删除一次跑通全流程。erlcloud CloudFormation 是什么为什么值得学CloudFormation 是 AWS 官方提供的基础设施即代码服务你只需写一份描述资源如实例、存储桶、网络的模板AWS 就会按模板自动创建、更新和删除整套资源形成可重复、可版本化的资源堆栈。erlcloud 则把它封装成了简洁的 Erlang 函数。相比在控制台点点点用 erlcloud 管理 CloudFormation 有以下优势痛点erlcloud CloudFormation 的解法手工配置易出错模板即代码一次编写、多次复用环境不统一同一套模板可部署到不同账号/区域难以回滚堆栈级管理支持删除和回滚策略无法自动化Erlang 程序可直接驱动创建、查询、更新核心实现位于src/erlcloud_cloudformation.erlAPI 版本 2010-05-15数据结构定义在include/erlcloud_cloudformation.hrl配套的单元测试在test/erlcloud_cloudformation_tests.erl阅读源码时按这三处对照效率最高。快速安装 erlcloud环境搭建与编译步骤开始前请确认本机已安装 Erlang/OTP19.3 及以上版本均可和 rebar3 构建工具。第一步获取源码使用 git clone 拉取项目git clone https://gitcode.com/gh_mirrors/er/erlcloud cd erlcloud第二步编译项目在项目根目录执行make编译成功后就可以在 Erlang shell 中启动它application:ensure_all_started(erlcloud). 小提示如果只想在自己的 rebar3 项目中引用 erlcloud可以在rebar.config的 deps 中声明依赖它会自动拉取编译。配置 AWS 凭证三种最简方法调用任何 AWS API 前都需要凭证。erlcloud 提供了多种配置方式新手推荐按需选用方法一环境变量最省事export AWS_ACCESS_KEY_ID你的 Access Key export AWS_SECRET_ACCESS_KEY你的 Secret Key export AWS_DEFAULT_REGIONus-east-1方法二进程级配置适合简单脚本erlcloud_cloudformation:configure(AccessKeyId, SecretAccessKey).方法三配置对象适合多账号场景Config erlcloud_cloudformation:new(AccessKeyId, SecretAccessKey).方法三返回的#aws_config{}记录可以传给每个 API 调用实现跨账号访问是生产环境的推荐做法。详细字段可参考include/erlcloud_aws.hrl。创建 CloudFormation 堆栈的完整流程第一步准备 CloudFormation 模板先准备一份描述资源的模板文件比如创建一个 S3 存储桶Resources: MyBucket: Type: AWS::S3::Bucket Properties: BucketName: my-erlcloud-demo-bucket第二步在 Erlang 中构造创建请求erlcloud 使用 record 描述创建参数字段都定义在include/erlcloud_cloudformation.hrl中。构造#cloudformation_create_stack_input{}时只需关心常用字段stack_name堆栈名、template_body模板内容、parameters模板参数和tags标签。Spec #cloudformation_create_stack_input{ stack_name demo-stack, template_body TemplateBody, on_failure ROLLBACK, %% 失败时自动回滚 timeout_in_minutes 30 }, erlcloud_cloudformation:create_stack(Spec).第三步调用 create_stack 并验证结果case erlcloud_cloudformation:create_stack(Spec) of {ok, StackId} - io:format(堆栈创建成功: ~s~n, [StackId]); {error, Reason} - io:format(创建失败: ~p~n, [Reason]) end.成功后返回的StackId是堆栈在 AWS 中的唯一标识后续查询、更新都要用到。整个创建请求会通过aws_request_xml4发往cloudformation_host请求参数自动带上了Action和Version无需手工处理签名细节。查询与更新堆栈的实用技巧查看堆栈列表%% 分页拉取全部堆栈_all 后缀自动处理分页 erlcloud_cloudformation:list_stacks_all([]). %% 只看指定状态的堆栈 erlcloud_cloudformation:list_stacks([{stack_status_filter, 1, CREATE_COMPLETE}]).查看堆栈详情erlcloud_cloudformation:describe_stacks_all([{stack_name, demo-stack}]). %% 查看某堆栈的资源清单 erlcloud_cloudformation:list_stack_resources_all([], demo-stack).更新堆栈基础设施会演进更新资源同样简单UpdateSpec #cloudformation_update_stack_input{ stack_name demo-stack, use_previous_template true %% 沿用旧模板只改参数 }, erlcloud_cloudformation:update_stack(UpdateSpec). 日常巡检建议组合使用describe_stack_events_all查看事件流、get_template_summary预览模板摘要做到先看清、再操作。删除堆栈清理 AWS 资源的正确姿势测试完成后记得清理避免产生费用erlcloud_cloudformation:delete_stack( #cloudformation_delete_stack_input{stack_name demo-stack}).删除是堆栈级操作CloudFormation 会级联删除堆栈内的所有资源。如果某些资源需要保留比如要归档的 S3 数据可以在retain_resources字段中指定#cloudformation_delete_stack_input{ stack_name demo-stack, retain_resources [MyBucket] }.常见问题与避坑指南 Q1创建时提示 CAPABILITY 相关错误模板若涉及 IAM 资源需要在capabilities中加入CAPABILITY_IAM或CAPABILITY_NAMED_IAM。Q2如何避免大模板请求超时模板超过限制时把模板上传到 S3改用template_url字段代替template_body。Q3凭证泄露风险不要把密钥写死在代码里优先使用环境变量或 IAM 角色如 EC2 实例角色配合erlcloud_aws:profile()读取本地配置。Q4报错信息看不懂怎么办善用describe_stack_events查看堆栈事件StatusReason字段会给出具体失败原因是排错的第一手资料。总结通过本文的 erlcloud CloudFormation 实战教程你已经掌握了从环境搭建、凭证配置到创建、查询、更新、删除堆栈的完整闭环。基础设施即代码不再是运维专属Erlang 开发者同样可以用代码优雅地管理 AWS 资源。下一步可以试着把多资源模板、嵌套堆栈、跨账号部署纳入你的自动化脚本让基础设施管理真正一键完成。【免费下载链接】erlcloudAWS APIs library for Erlang (Amazon EC2, S3, SQS, DDB, ELB and etc)项目地址: https://gitcode.com/gh_mirrors/er/erlcloud创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考