プログラマ行進曲第二章

主にソフトウェア関連の技術をネタにした記事を執筆するためのブログ

意外と思い出せないTerraformの書き方まとめ

業務でTerraformをずっと書いているのですが、moduleとかを書くような時に「あれ?こういう時にHCLではどう書くんだっけ?そもそも書けるんだっけ?」ということを思うことが何回かあったので、そういったときに必要になった書き方のメモを残しておきます。

変数の型がリストで、そのリストの各要素が満たす条件を記述する

can関数とfor式を組み合わせてcustom variable validation rulesに使うと実現できます。

例えばAWSのSubnet IDのリストを変数に持っているときに活用できます。Subnet IDは頭にsubnet-という文字列があると期待できるので、以下の様に書いて制約を付けられます。この条件から外れた変数を設定しているときはerror_messageに設定したエラーメッセージが出てくるので変数の設定ミスを防げます。

variable "subnet_ids" {
  type        = list(string)

  validation {
    condition     = can([for subnet_id in var.subnet_ids : regex("^subnet-", subnet_id)])
    error_message = "Subnet ID must start with \"subnet-\"."
  }
}

can関数が使えるところでは基本try関数を使った方がいいらしいですが、HashiCorpのドキュメントによるとこういったcustom variable validation rulesに使うのがcan関数の主な目的らしいです。

ある特定のパラメータが自作モジュールに与えられてないときは無視し、与えたときにはその値を設定する

nullが活用できます。

基本はdefaultにnullを設定すればいいけれど、既存のリソースの関係上こういう書き方をせざるを得ないときもありますね。

resource "aws_iam_role" "eks_node" {

  name = var.node_group_role_name != null ? var.node_group_role_name : "${var.name}
# 省略
}

この場合、node groupのIAM role の名前を与えた場合は名前をそれに設定し、そうで無ければデフォルト扱いのvar.nameという値にするという書き方です。

フラグが偽の場合はリソースを作らず、フラグが真の時のみリソースを作る

countを使って以下の様に書けます

resource "aws_s3_bucket" "example" {
  count  = var.enable_example ? 1 : 0
  bucket = "example_bucket"
}

${var.flag} ? 1 : 0 と三項演算子*1を使うところがポイント。

最初に書く条件はbool値を返せればいいので、以下の様にvar.parametersというリストの長さを基準にしてリストが空だったらリソースを作らない、なんてことも可能。

  count = length(var.parameters) > 0 ? 1 : 0

これの欠点は、作成されたリソースの指定の時にインデックスを明示しないといけないこと。

例えば上のS3バケットの例ではaws_s3_bucket.example[0]と指定しないといけないです。

また、この技法をdynamic blockと組み合わせて以下の様に応用できます。

resource "aws_eks_node_group" "varanus" {
  for_each = var.node_groups
  # 省略
  dynamic "remote_access" {
    for_each = length(each.value.config.security_group_ids) > 0 ? [each.value.config] : []

こういうのはあらかじめこういう書き方ができると知っておかないとできないタイプのやつですね。

オライリーの学習プラットフォームのサブスクに加入していてその関係で『詳解Terraform 第3版』を読めるので、他にも何か便利な書き方が無いかどうか、読んでみて調べようかなって思ってます。

www.oreilly.co.jp

Amazonはこちら。

*1:terraform的にはConditional Expressionsというらしい

2024年の抱負

2024年になって既に2週間が過ぎてしまって書くのに最適なタイミングを逸してしまった感がありますが、今年の抱負を考えてみようと思います。

今まで書いてきた抱負

意外と書いているものですね。書いた本人は何を書いたかほぼ忘れてますが。

2024年の抱負

IT系技能関連の目標

競技プログラミング系のコンテストに一度出場する

実は最近、競技プログラミングコンテストの過去問を少しずつ解いていく、なんてことをしています。

諸々思うところがあり、自分の実力アップのために最近ちょこちょこC++を学びつつ過去問を解いています。

過去問と言っても、atcoderのABCコンテストのA, Bを少しずつ解いているという感じなので、他の人に比べたらまだまだひよっこレベルのところでゼーハー言っているところです。

以下書籍を使って勉強しているのですが、自分にはちょうどいいレベル感の問題をリストアップしてくれているので助かっています。

ITはあまり関係ない目標

1年で3冊は本を読み、感想ブログを書く

パッと思いつかなかったので、前年の抱負からハードルを下げ、1年間に3冊本を読んで、それの感想をブログ記事にするというのを目標にしてみます。

…さて、ちゃんとできることやら…

達成度は計測しないが、やっていきたいこと

英語・中国語・ウクライナ語・スペイン語・アラビア語の学習を続けていく

実は去年からこれだけの言語の学習を続けています。

学ぶリソースは主に以下3つのリソースです。

なんだかんだで続けることができているので、このまま続けていこうと思います。

ウクライナ語が他の言語に比べて身についていないなー、と感じているので、何かしらテコ入れしたいところですね。

『AWS IAMのマニアックな話』を読んでIAMの運用・管理の肝を学ぶ

以前から電子版だけは買っていた『AWS IAMのマニアックな話』をこの度通読しました。

booth.pm

仕事でAWSは使っていて、今ではそれなりに習熟しているとは思うものの、今の職場に入ってはじめてAWSを本格的に使い始めたので、以外と基本的な所が抜けたまま作業しているなということが割とありました。

最近、EKSでちゃんとIAM roles for service accountsだったりEKS Pod Identityを使わないといけない場面が増えており、しっかりとしたIAM周りの知識が足りないなと痛感しているので、これを機に学ぼうと当該書籍を読み直した次第です。

最近眼精疲労に悩んでいることもあり、電子書籍だけだと読み通せなかった気がしますが、ちょうどタイミングよく(?)、物理書籍を技術書典15のオフライン会場で購入していて紙で読めて目の負担を軽減できたので、それもよかったのだと思います。

IAMポリシーのデザインパターンが書いてあるのがよい

この本を読む前、以下の4要素の内ではIAMポリシーが一番理解できてなくて、ふんいきと雑な権限では書けますが、ちゃんとした権限管理をしようとしたときの書き方に自信が無い状態でした。

  • IAMユーザー
  • IAMグループ
  • IAMポリシー
  • IAMロール

書き方に自信が無い状態は読んだ後でもたいして違いは無いかもしれませんが、基本的な所とベストプラクティスに沿いつつ管理しやすいようにIAMポリシーの書き方のパターンが書いてあるのがよかったです。

ホワイトリスト・パターン、ブラックリスト・パターン、それらを組み合わせたハイブリッド・パターンという切り口は、AWSのIAM運用・管理の経験を長く積んだ人なら当然の話なのかもしれませんが、これを自力で破綻無くひねり出すのは結構難しそうなので、この本で紹介してもらえてよかったと思います。おかげで整理しながら理解できるようになった気がします。

IAMのテンプレート集をダウンロードできるのもよい

数が多いわけではないですが、書籍内で紹介されていたIAMポリシーの書き方を実際にCloudFormationの形にしてテンプレートをダウンロードできるところもいいですね。

個人的にも仕事でもCfnは使っていなく、だいたいTerraformの方を使っていますが、このテンプレートはそんなに長大とか複雑ではないので、自分用にTerraformに変換するのも多分そこまで辛くは無いはず。

実際にテンプレートを落としてVSCodeで眺めてみて「こういう感じで書けばいいのか」という感触が掴めるのがよかったです。

とはいえIAM難しい

実際問題、破綻なくセキュアなIAM環境をゼロから作れ!と言われたときにすぐ実践できる気はあまりしませんが、やれ!と言われたときに全く動けないということはおそらく無くなったので、ここから学んだことをベースにして、実戦的な管理・運用をできるようにやっていきたいと思います。

必要なサイトのみVPN経由でアクセスするOpenVPNの設定ファイルを生成する

VPN経由で作業をしないといけないケースがあります。

この時のクライアントソフトとしてよく使われているのがOpenVPN、またはOpenVPNベースのVPNクライアントです。AWS Client VPNとかそうですね。

こういうVPNを使うケースとしては、ある特定のサイトを不特定多数に公開しないようにすることがメインの目的として使われることが多いでしょう。

こういった場合、その特定のサイト以外は別にVPN経由でアクセスする必要は無いわけです。全ての通信をVPN経由にすると、よく分からない理由でネット接続の速度が落ちたりするといった経験もあり、必要なサイトにのみVPN経由でのアクセスをしたいと思っていました。

そんなことをしようと思って色々調べてやったことをまとめようと思います。

盛大に間違っているところもありそう*1なので、そんな箇所があったら誰か優しく指摘してください。

*1:特にOpenVPNやネットワークの理解が間違っているのが容易に想像できる

続きを読む

去年からやっていた掃除が終わった

せっかく2024年という新しい年を迎えたのに、元旦から世間では大変な事態が立て続けに起こっていますね。なんと言っていいのやら...

前回の記事は初日の出に関するものでした。

takuan-osho.hatenablog.com

三が日も終わり、今年の抱負も決めて打ち出せればいいのですが、あいにくちょっとまだ考える余裕がなくて今すぐには出せない状態です。

というのも、去年末からずっと自室の掃除をしていて、それに時間を取られていたからです。

普段の掃除をさぼり気味なことに加え、ものが溢れかえっていて動かさなかった箇所が大抵埃まみれになっており、それらの掃除を徹底的にやっていたら、先日まで掃除にかなりの時間を取られることになってしまいました。

普段から少しずつやっていればよかったのですが、まあ、何というか後の祭りという感じです。

しかしその甲斐あってか、少なくともここ数年では一番部屋が綺麗になったので、今年はその状態をなるべく維持できるようにしたいと今は思っています。

厳密に言うとまだ最後の掃除タスクが終わっていないのですが、汚れを取る系のやたらと時間がかかる作業は終わり、最後は袋の整理のみというところなので、一通り終わったと言っていい状態です。

ようやくこれで年始の大きなタスクが終わったので、新しいこと*1に取りかかろうかと思います。

*1:競技プログラミングなど

2018年以降、毎年初日の出への旅

2024年の初日の出を見に行ったので記録として記事にします。

今まで初日の出に関して記事にしたのは以下の通りです。

takuan-osho.hatenablog.com

takuan-osho.hatenablog.com

takuan-osho.hatenablog.com

ブログでは毎回書いてなかったようですが、手元の写真の日付を見直すと、私は2018年以降毎年初日の出を見に行っているようです。

今年の初日の出はこんな感じでした。

Untitled

PXL_20231231_215702160

PXL_20231231_215625614

PXL_20231231_214914487

PXL_20231231_214903405

Untitled

Untitled

Untitled

こう、毎年初日の出を見に行っていると、だいたいどれくらい前に現地に着いていればいい感じに見ることができる場所を確保できるとか、いい感じで見ることができる場所をそもそも知っているとか、そういったコツを掴んでいるので、今年も風情を感じながら楽しく見ることができました。

来年は30分より前に現地に着くようにして、道中も暗くて静かな中を堪能できるようにしようかなと思います。

来年も五体満足で無事初日の出を拝めるよう、健康で楽しく生きていきたいものですね。

2023年の振り返り

2019年から後、一年の振り返りというものをしてなかったみたいなので、たまには振り返りをしたいと思います。

...2019年から後やってないの、明らかに新型コロナの流行の影響受けてますね。

以前のものはこちら。

takuan-osho.hatenablog.com

takuan-osho.hatenablog.com

takuan-osho.hatenablog.com

takuan-osho.hatenablog.com

takuan-osho.hatenablog.com

takuan-osho.hatenablog.com

...といってももう22時になろうかとしているときにまとまったことは書けないので、書き殴りでやります。久し振りのブログ更新なので勝手も分からなくなってきました。

今年の頭の記事を読み返してみます。

takuan-osho.hatenablog.com

以下の様な目標が立てられていたようです。

成果確認

IT系技能関連の目標

2ヶ月に一度は技術系のネタでブログを更新するという目標を立てていたようですが、全く無理でした!

ITはあまり関係ない目標

これは1年で4冊は本を読み、感想ブログを書くというものでしたが、これも同様に全く達成できていません!ダメですね!

4冊分読み通したかも不明です。ちょっと反省します。

達成度は計測しないが、やっていきたいこと

これは英語・中国語・アラビア語の学習を継続していくというものでした。

これに関しては達成したと言ってもいいと思います。

英語に関しては毎朝起きたらシャドーイングをして、余裕があればスピークという、ChatGPTのAPIを利用した英会話アプリで英語表現の訓練をしていて、最低半年は続いています。

中国語に関しては外語大のオープンアカデミーの授業を取り、来年一月まできっちりこなしていくのでやっていますし、それ以前に4月からNHKラジオ講座の「毎日中国語」、10月からは「ステップアップ中国語」をやっていて、大分中国語学習にも慣れてきました。

アラビア語に関してもNHKラジオ講座を聴いて復習しています。

他にも、外語大のオープンアカデミーでウクライナ語の授業を取り、何とか学習を続けていたり、10月からはそれまで全く経験の無かったスペイン語をNHKラジオ講座を通して学習して今現在まで継続できています。

こういった地道な取り組みは割とやれる方なのかな、という気分になりました。

これも他に悪影響が出ない限りは引き続き続けていくつもりです。

2024年に向けて

取りあえず一年の計で書いたことを最初から継続的に続けてアウトプットを続けられるように出来たらいいなと思ってます。

また年明けにブログを書いて一年の抱負を考えます。

皆様、良いお年を!