基础设施即代码:erlcloud CloudFormation 部署 AWS 资源的实战教程
2026/8/20 18:17:43 网站建设 项目流程

基础设施即代码: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.erl(API 版本 2010-05-15),数据结构定义在include/erlcloud_cloudformation.hrl,配套的单元测试在test/erlcloud_cloudformation_tests.erl,阅读源码时按这三处对照效率最高。

快速安装 erlcloud:环境搭建与编译步骤

开始前请确认本机已安装 Erlang/OTP(19.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_REGION=us-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,请求参数自动带上了ActionVersion,无需手工处理签名细节。

查询与更新堆栈的实用技巧

查看堆栈列表

%% 分页拉取全部堆栈,_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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询