2020-01-01から1年間の記事一覧
電化製品 有機 EL テレビ 家具 ゴミ箱 ソープディスペンサー 霧吹き Echo dot PC周り Macbook Air トラックボールマウス HHKB Professional HYBRID Type-S 4K ディスプレイ 電化製品 有機 EL テレビ 使ってきた液晶テレビに滲みが発生し、そろそろ買い替えね…
2020 年はとにかく多忙な年でした。 これまではプロジェクトに入ってリーディングやマネジメントを主として行なっていたのですが、4 月からは所属部署が変わり、全社へ様々な施策を仕掛け展開する役割を担うようになりました。 それに伴い、要求されることも…
久しぶりに会社で Perl の話をしました。何の話かというと B::Deparseです。 最近 Perl を使うのは One-Liner くらいなのですが、一般に One-Liner は可読性が犠牲になります。 一体この One-Liner は何をしているのか、というのを説明するときには B::Depar…
GitLab CI/CD から ECR へ PUSH するところを作りました。つらみがあって大変に時間を溶かしました。 alpine ベースの Docker Image に AWS CLI v2 をインストールするのがつらい Docker のバグを引いてしまって GitLab CI/CD 上での DinD がうまく動かなか…
ディレクトリごとに環境変数を切り替えたいというユースケースはよくありますが、それを実現してくれるのが direnv です。 ぼくもこの direnv を利用して、AWS アカウントごとのアクセスキーを切り替えたりしています。 direnv は通常、各シェルの cd の実行…
リソース効率は、ほとんどの業界で重視されているのではないでしょうか。雇っている人にはできるだけ仕事をさせるのは、wikipedia:機会費用 の考え方からしても当たり前ですよね。一人のエンジニアには一人月の仕事を割り振るというのも、ある種リソース効率…
Terraform 0.12 系から重い腰をあげて 0.13 系にあげる作業を進めていましたが、いくつかエラーが発生したので、その対応の顛末について。 terraform の version constraint でエラーになる terraform init で Failed to decode current backend config エラ…
新型コロナの影響で、基本的に仕事は家で行うことになりました。 これまで平日は家で過ごす時間が少なかったため自宅での PC 環境をかなり蔑ろにしていたのですが、もはやそんなことは言っていられない。 ようやく重い腰をあげて、自宅の PC 環境を整えるこ…
Bash において、変数が特定の文字列で終わるかを確認したいケースがあります。 これ Bash のみで実現が可能です。 [[ ${user_arn} == *Terraformer ]] Bash における [ と [[ シェルスクリプトで使用される [ がコマンドである事実はよく知られていますが、[…
最近"アジャイル"について人に教えることが要求されていて、人に教える以上はきちんと学ばないといけないということで、改めていくつかの内容を振り返っています。 その中で、どうしてもきちんとした理解をしておく必要がある、と思ったのが「リソース効率」…
一般にシェルスクリプトでは set -eu しておけということを言われます。 -e はコマンド実行でエラーが発生した場合にそこでスクリプトの実行を終了する。 -u は誤って未定義変数を使用しようとしたときにエラーとする、という振る舞いになります。 shebang …
最近は研修用の資料をチームでいろいろ作っています。 研修はある程度の部分をスライドで伝える形になるのですが、チームでどのようなスライドを作るのかを考えるにあたり、自分の「スライドを作り方」を言語化する必要がありました。 自分がどういうことに…
本 Blog は Github 上で管理し、PUSH したら投稿されるようになっています。 ここで課題になっていたのは、はてな Blog 投稿用の API キーの管理でした。というのも、Blogsync は API キーを YAML に直書きする必要があったためです。 v0.12.0 の Release No…
様々なところで terraform init しまくっていたら、.terraform ディレクトリが散在するようになり、VS Code での検索に支障を来すようになりました。 このため、.terraform ディレクトリ配下を検索対象から除外したい。 VS Code では、search.exclude を設定…
Git を用いて、特定日時以降に更新されたファイルの一覧を取得したい要件がありました。 これを素直に取得する方法がなさそうだったので、以下のようにして代用しています。 $ git log --after 2020/07/01 --name-only --pretty=oneline --full-index | grep…
Terraform で State を分割すると、たくさんの root module ができます。 ある root module が別 module の remote state 参照を持つとき、module 間に依存関係が生じます。 僕たちはこの依存順に terraform を apply しなければなりませんし、その逆順に de…
カレントディレクト配下にある全ディレクトリで同じ操作をする時って多いのではないでしょうか。 例えば作っている terraform 群が要求する Provider のバージョンをあげて、全部 terraform init して回らないといけなくなったりとか。 find と xargs を組み…
CI/CD で以下のコマンドを実行したかっただけでした。 $ aws ecr get-login-password | docker login --username AWS --password-stdin [AWS Account ID].dkr.ecr.ap-northeast-1.amazonaws.com/my-repository このコマンドラインには 2 つの実行バイナリが…
Cointaner Image の CD 用に ECR へ PUSH するための最低限の IAM Policy がどうなるのかを検証してまいりました。おそらくは以下が最低限の IAM Policy になりそうです。 このうちのどの action を許可しない場合であっても、イメージの PUSH はエラーにな…
CodePipeline + CodeDeploy で ECS へのデプロイメントパイプラインを組んでいたんですが、このパイプラインが様々な理由で失敗します。 マネジメントコンソールで確認しても、Internal error 的な文言しか表示されず、とにかくデバッグがしんどいです。 つ…
CodePipeline から別アカウント上の ECR を Source Action から指定したい。 これはそれなりに存在するユースケースではないでしょうか。 この実現にマジで苦しんだので、葛藤の記録を残しておきます。 概観 バケットポリシー CodePipelie からクロスアカウ…
以下のエントリで記載したように、AWS 上においてはマルチアカウントで環境を構成することがベストプラクティスとされています。 このエントリでは、Custodian アカウントという概念が登場しました。これは結局 IAM ユーザやグループを 1 つのアカウントにの…
きちんとしたガイドを書く、そしてそのガイドを多人数で変更するというケースでは、文章の揺れ等をで きるだけ防ぎたい。 このため、GitLab CI/CD で textlint を導入したい。 textlint 用 Docker Image の作成 フィルタ ルール Docker Image の build、push…
様々なドキュメントが Markdown で表現される今日このごろです。 多数の人が関わりつつドキュメントを成長させるのであれば、 Markdown ドキュメントについてもフォーマットを統一させたいものですね。 Markdown についても当然のように linter があるので、…
GitLab CI/CD を使い、自作の AWS 用 terraform モジュールに対して terraform validate をかけようとすると、以下のエラーメッセージが出て失敗しました。 Error: Missing required argument The argument "region" is required, but was not set. 原因 対…
Terraform のスクリプトにも lint を自動で実行できるようにします。 lint ツール TFlint 設定の渡し方 GitLab CI/CD への組み込み 今後 lint ツール Terraform には terraform validate コマンドがあり、設定上のかなりの問題を検知してくれます。 一方で t…
AWS で環境を構築する際はマルチアカウントになることが多い、これは理解していたつもりでした。 stg 環境と prod 環境は AWS アカウントごと分ける。dev 環境も分ける。 しかし、世の中のベストプラクティスはもっと先を行っていました。 なぜアカウントを…
AWS においてはマルチアカウント戦略が重要とされています。 たとえば、開発環境/ステージング環境/本番環境といった各環境は、セキュリティ、ガバナンス面で分離すべきです。 メンバーの権限管理がすっきりする 特定の環境の作業が他環境に影響しない この…
前提 その前に state とは何か state の S3 管理 backend となる S3 を Terraform 管理のインフラと一緒に管理して良いのか backend の構築 backend の適用 (locking なし) backend の適用 (locking あり) 前提 Terraform によってインフラをチームで管理し…
Terraform の型 Primitive Types Complex Types Collection Types Structural Types null 興味深い機能 map の key に参照が使える パスの参照 Python の内包表記的な for splat expression String Template: if 文/for 文 Terraform の型 全部で 7 種類あり…