在 Terraform 支持更简洁的 ALB 高级监听规则之前的讨论
这篇文章是关于2019年Nifty集团Advent Calendar第21篇的文章。
昨天我在@shin27的「使用MySQL外部复制在最短时间内将数据库迁移到AWS RDS」的文章中看到了。实际上,我现在和@shin27在同一个部门工作,每天都在看着他努力克服困难,但却十分快乐的样子。
首先
本文将涉及与我在2019年12月14日发布的文章「关于如何更简洁地编写ALB高级监听规则,使用Terraform进行操作的故事」相关的内容,具体将介绍在AWS提供商的v2.41.0之前的世界中,对于管理的方式是如何处理的。
自我介绍
初次见面,我是七。
日常生活中,我会运营现有系统,编写Go程序和Terraform代码,并为了激发工程师们的活力而着手对该系统进行现代化改造。
另外,回顾2019年,最令人难忘的回忆是在第二天参加了「AWS Summit Tokyo 2019」并发表演讲。关于详细情况,您可以在这篇文章中找到,如果您有兴趣,请去看看。
在进入正题之前,让我们复习一下2019年12月14日发布的文章是什么。
「Terraform中ALB高级监听规则的简化书写能力提升的讨论」主要记录了AWS提供商v2.42.0版本中于2019年12月14日(日本时间)发布的有关ALB高级监听规则的更新。
我們試試看在 Terraform 中實際撰寫 ALB 的高級監聽規則。
前置环境
-
- Terraform v0.12
- AWSプロバイダー v2.41.0以前(なおv2.42.0以降でも動きます)
设定内容 (shè
本次将实现一个用于检测Chrome和Safari浏览器的监听规则。
以下是从elb.tf中提取的部分设置。
resource "aws_cloudformation_stack" "http_header_based_routing" {
name = "http-header-based-routing-stack"
template_body = <<STACK
{
"Resources": {
"ListenerRuleBasedOnHTTPHeader": {
"Type": "AWS::ElasticLoadBalancingV2::ListenerRule",
"Properties": {
"Actions": [{
"Type": "forward",
"TargetGroupArn": "${aws_lb_target_group.tg.arn}"
}],
"Conditions": [{
"Field": "http-header",
"HttpHeaderConfig": {
"HttpHeaderName": "User-Agent",
"Values": [
"*Chrome*",
"*Safari*"
]
}
}],
"ListenerArn": "${aws_lb_listener.front_end.arn}",
"Priority": 10
}
}
}
}
STACK
}
使用以下命令进行部署后,请在AWS管理控制台上确认。
$ terraform init
$ terraform plan
$ terraform apply
顺便提一下,与以前在Terraform中编写ALB的高级监听规则相比,代码的长度增加了近2倍。乍一看维护起来似乎很麻烦。
不过,由于可以利用现有的CloudFormation代码,所以在遇到CloudFormation写法问题时可以享受到AWS官方支持,并能充分利用官方文档,这样挺好的。同时,对于那些基本上只想用Terraform来写的人来说,这也是一种合适的方法。
总结
這次,我寫了一個比較,作為2019年12月14日所寫文章的對象,在 Terraform 中,講述了在能夠更簡潔地撰寫ALB進階聽取規則之前的情況。在基礎設施運營方面,讓我們一同充分利用現有的代碼並不斷優化。
谢谢你的帮助。明天由@hamakou108负责!请多多关照。
闲谈之一
在我写这篇文章的时候,偶然发现了一篇关于试图将Terraform和AWS云开发工具包(AWS CDK)进行协作的文章。我感到在CDK领域也有人持有同样的想法。
闲聊第二部分
请参考下面网站
-
- 【まいうー】TerraformからCloudFormationをおいしくいただく | Developers.IO
-
- AWS::ElasticLoadBalancingV2::ListenerRule – AWS CloudFormation
- AWS: aws_cloudformation_stack – Terraform by HashiCorp