Terraform 进阶 - 部署 Lambda 并创建相关资源

昨日刚刚体验了 Terraform 是一个什么鬼东西 Terraform 使用 - 从最简单例子开始,今天再进一步。将来尝试的是使用 Terraform 来部署一个 Lambda 应用,并创建相关的资源。

本例中的 Lambda 要由 Kinesis 来触发,并写数据到 S3 Bucket 中去,所以需要做的事情大致如下:

  1. 创建 IAM Role, 该 Role 要能访问 S3, Kinesis 和 CloudWatch
  2. 创建一个 Kinesis Stream (指定 Shard 数目)
  3. 创建一个 S3 Bucket
  4. 部署 Lambda (要指定能访问 S3 Bucket 的 Role, 并其他参数,如环境变量)
  5. 设置 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 将会做以下事情

  1. 创建 Bucket yanbin-test-bucket, 访问规则是 private, 设定 Tag Environment = "test"
  2. 创建 Kinesis Stream yanbin-test-stream, Shard 数目是 2,设定 Tag Environment = "test"
  3. 创建 IAM Role yanbin-lambda_role, 并赋予 S3, Kinesis, CloudWatch 的完全访问权限
  4. 上传程序包部署 Lambda yanbin-test-lambda, 并设置 role 为上一步创建的 role, 设置其他属性,及环境变量 BUCKET. 以后运行 terraform plan 只有发现 hello-1.0.jar 包的哈稀值变了才会更新 Lambda 程序包
  5. 为上面的 Lambda 创建一个 Kinesis Trigger, batchSize 为 3, 监听第 2 步创建的 Kinesis Stream

现在一切准备就绪,可以登陆到 AWS 的控制台看下 Terraform 是不是为我们创建好了应有的东西。一切正常的就可以发送 Kinesis 消息到我们新创建的 Kinesis Stream 了,看看在 Bucket 里是不是有了 Lambda 生成的文件。

上面创建的东西不想要了,想统统干掉,那就更简单了 terraform destroy 就行了,简值是键删除。

本文链接 https://yanbin.blog/terraform-deploy-lambda-create-resources/, 来自 隔叶黄莺 Yanbin Blog

[版权声明] Creative Commons License 本文采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。

Subscribe
Notify of
guest

0 Comments
Inline Feedbacks
View all comments