目次
はじめに
こんにちは、ディーネットの牛山です。
Terraformを利用し構築をする際に便利だと思ったTerraform組み込み関数について紹介します。
今回、紹介する組み込み関数は次の通りです。
組み込み関数名 | 概要 |
---|---|
split | 指定された文字列を区切り文字に従ってすべての出現箇所で分割してリストを生成します。 |
element | 配列のリストから指定された添字(インデックス)番号を指定し、要素を取り出します。 |
replace | 指定された文字列内で別の指定された部分文字列を検索し、各出現箇所を指定された置換文字列に置き換えます。 |
文字面だけだと想像しづらいので実際のユースケースとともに紹介します。
ユースケース
ユースケース:CloudWatchアラームにアプリケーションロードバランサーのHealthyHostCount監視(正常と見なされるターゲットの数)を監視したい。
監視する場合、メトリクスディメンションとして次の形式で指定する必要があります。
ディメンション | 説明 |
---|---|
LoadBalancer | ロードバランサーでメトリックデータをフィルター処理します。 app/load-balancer-name/1234567890123456 (ロードバランサーARNの最後の部分) のように指定します。 |
TargetGroup | ターゲットグループ別にメトリックデータをフィルタリングします。 ターゲットグループを次のように指定します。 targetgroup/target-group-name/1234567890123456 (ターゲットグループARNの最後の部分) 。 |
Terraformにて、ロードバランサーおよびターゲットグループのid属性で参照すると次のような「ARN (Amazon Resource Name)」形式で取得できますが、ディメンションとして渡す形式になっていないため、整形する必要があります。
LoadBalancer: arn:aws:elasticloadbalancing:ap-northeast-1:AWSアカウントID12桁:loadbalancer/app/ロードバランサー名/1234567890123456
TargetGroup: arn:aws:elasticloadbalancing:ap-northeast-1:AWSアカウントID12桁:targetgroup/ターゲットグループ名/1234567890123456
ここで役立つのが今回、紹介する組み込み関数でこちらを使用して整形することによって動的に監視設定することが可能となります。
Terraformコード
ディメンションに渡す部分を抜粋して解説します。
dimensions = {
TargetGroup = element(split(":", aws_lb_target_group.ターゲットグループ.id), 5)
LoadBalancer = replace(element(split(":", aws_lb.ロードバランサー.id), 5), "loadbalancer/", "")
}
LoadBalancerはTargetGroupの応用なのでLoadBalancer部分の解説となります。
ステップⅠ split関数
split関数の区切り文字として「:」を指定し配列要素として分割します。
分割されると次のようになります。
添字(インデックス) | 要素(値) |
---|---|
0 | arn |
1 | aws |
2 | elasticloadbalancing |
3 | ap-northeast-1 |
4 | AWSアカウントID12桁 |
5 | loadbalancer/app/ロードバランサー名/1234567890123456 |
5番目の添字に今回、ディメンションとして渡したい値が入っていますが、 app 以降の値を渡す必要がありますので置き替えにて対応します。
ステップⅡ element関数
split関数で分割された配列の 添字(インデックス) 番号 を 指定 し 要素(値) を取得します。
5番目の添字(インデックス)に目的の値が入っているのこの添字番号を指定して取得できるのがelement関数の機能になります。
ステップⅢ replace関数
element関数で取得した値をもとに、 loadbalancer/
に合致する文字列を、 ""(空文字列)に置換すると次のようになります。
app/ロードバランサー名/1234567890123456
これで、動的にロードバランサーを監視でき、長いARNの中から渡す引数を探す必要がなくなります。
おわりに
いかがでしたでしょうか。
とても便利です。
また、便利な組み込み関数があれば、紹介します。
プロフィール
AWSの設計・構築をメインにおこなっています。
運用・保守をおこなう部署におりましたが、最近、アーキテクト課に異動しました。
日々精進しております。
LINK
クラウドベリージャム:プロフィールページ