昨日刚刚体验了 Terraform 是一个什么鬼东西 Terraform 使用 - 从最简单例子开始,今天再进一步。将来尝试的是使用 Terraform 来部署一个 Lambda 应用,并创建相关的资源。
本例中的 Lambda 要由 Kinesis 来触发,并写数据到 S3 Bucket 中去,所以需要做的事情大致如下:
- 创建 IAM Role, 该 Role 要能访问 S3, Kinesis 和 CloudWatch
- 创建一个 Kinesis Stream (指定 Shard 数目)
- 创建一个 S3 Bucket
- 部署 Lambda (要指定能访问 S3 Bucket 的 Role, 并其他参数,如环境变量)
- 设置 Lambda 的 Kinesis 触发器 (指定源 Kinesis Stream 和 batchSize)
以下是 Lambda 的实现代码,从 Kinesis 读出字符串,逗号分割,第一部分作为 S3 Key, 第二部分作为文件内容写入到 S3 Bucket 中去。S3 Bucket 名称从环境变量中读取。
接下来的事情全部要交给 Terraform 来完成了,在于怎么写那个 tf 文件,为方便起见我们直接在这个 Java 项目根目录下创建一个 main.tf
文件。
由于贴代码有些问题,所以直接截的图。main.tf
文件创建好,照例要在当前目录中运行 terraform init
先初始,而后才能执行 terraform plan|apply
等命令。编写好的 mail.tf
文件可以用 terraform fmt
帮我们格式化,在运行 terraform apply
之前最好运行一下 terraform plan
, 好知道将要发生什么事。
terraform apply
执行上面的配置,Terraform 将会做以下事情
- 创建 Bucket
yanbin-test-bucket
, 访问规则是 private, 设定 TagEnvironment = "test"
- 创建 Kinesis Stream
yanbin-test-stream
, Shard 数目是 2,设定 TagEnvironment = "test"
- 创建 IAM Role
yanbin-lambda_role
, 并赋予 S3, Kinesis, CloudWatch 的完全访问权限 - 上传程序包部署 Lambda
yanbin-test-lambda
, 并设置 role 为上一步创建的 role, 设置其他属性,及环境变量BUCKET
. 以后运行terraform plan
只有发现hello-1.0.jar
包的哈稀值变了才会更新 Lambda 程序包 - 为上面的 Lambda 创建一个 Kinesis Trigger, batchSize 为 3, 监听第 2 步创建的 Kinesis Stream
现在一切准备就绪,可以登陆到 AWS 的控制台看下 Terraform 是不是为我们创建好了应有的东西。一切正常的就可以发送 Kinesis 消息到我们新创建的 Kinesis Stream 了,看看在 Bucket 里是不是有了 Lambda 生成的文件。
上面创建的东西不想要了,想统统干掉,那就更简单了 terraform destroy
就行了,简值是键删除。