google cloudのラベルとAWSのタグに関する制約

Google Cloudにおいてリソースへのメタデータとして利用できるラベルという機能がある。 ラベルを使用してリソースを整理する | Compute Engine Documentation | Google Cloud これはAWSのタグ機能とほぼ同等の機能を提供する。 docs.aws.amazon.com Google …

permadiff: 何度applyしても消えない差分

terraformを使っていたら誰もが意図しない差分と格闘したことがあるはず。 その中でも特に何度applyしても差分が消えず残り続けるものがある。このようなdiffのことを permadiff と呼ぶ。 googlecloudplatform.github.io permadiffについての解説はMagic Mod…

pdfファイルのサムネイルが表示されない

Ubuntu 24.04のファイルマネージャーNautilusにてpdfファイルのサムネイルとして、1枚目の内容ではなく汎用のpdfアイコンが表示されて困った。 特に電子書籍を大量に所有しているのでサムネイルとして表紙を描画して欲しい。 サムネイル描画のためだけに追加…

CloudflareのAPIトークンにおいて複数ゾーンリソースを管理する

TerraformにてCloudflareのゾーンリソースを管理したい。 特に単一のゾーンではなく複数のゾーンを扱いたい。 Terraformのcloudflare providerには cloudflare_zoneリソースがあるのでこれを利用すればよい。 Cloudflareとの認証にはAPI_TOKENを利用すればよ…

kubernetesクラスタにおけるetcdコンポーネントの動作検証

Kubernetesクラスタにおけるデータストアとしてetcdがある。 Kubernets The Hard Wayでetcdのセットアップを行ったので、その設定詳細について確認する。 また、Kubernetesにおける etcdクラスタについては以下のドキュメントが参考になる。 kubernetes.io …

envsubstで環境変数をテンプレートに展開する

Kubernetes The Hard Way を進めていたら、見知らぬ envsubstコマンドに遭遇した。 $ export ENCRYPTION_KEY=$(head -c 32 /dev/urandom | base64) $ envsubst < configs/encryption-config.yaml \ > encryption-config.yaml これは環境変数を展開して埋め込…

LinuxのWeb管理コンソール: Cockpit

前回記事の検証のため、Fedoraにsshしたところ見慣れないメッセージとしてwebコンソールの案内が表示された。 $ ssh 192.168.10.124 Web console: https://localhost:9090/ or https://192.168.10.124:9090/ ... 実際にこのURLにアクセスしたところ、該当サ…

Debianにおける127.0.1.1の取り扱い

Kubernetes The Hard Wayを進めていたら、クラスタノードのホスト名の設定において /etc/hosts 書き換えるというものがあった。 この中で、 127.0.1.1 のエントリを書き換えるという操作があった。 while read IP FQDN HOST SUBNET; do CMD="sed -i 's/^127.…

kindでは構築するクラスタノードのリソースは制御できない

ローカル環境においてKubernetesクラスタの動作検証するときの手段の1つとしてkindがある。 kindはdocker in dockerの仕組みを利用して簡単にkubernetesクラスタを構築・利用することができる。 クラスタノードを制御する kindはマルチノードクラスタにも対…

Krewでkubectlのプラグインを管理する

kubectlはプラグイン機構を備えている。プラグインの仕組みを利用することで、kubectlにサブコマンドを追加して公式cliにはない機能を実現できる。 kubernetes.io Krewによるプラグイン管理 プラグインはファイル名が kubectl-から始まる実行可能なファイル…

bunのlockfileの内容を確認する

bunにおけるlockファイルの bun.lockbから、インストールしているパッケージバージョンを確認したい。 bun.lockはバイナリファイルなのでその内容を直接確認することはできない。 bun.sh bunのコマンドを指定しないで bun.lockbファイルを引数として指定すれ…

Terraformのjsonencode関数が特殊文字をエスケーする問題と回避策

Terraformのjsonencode関数でjson文字列を生成するとき、 < > & U+2028 U+2029 はエスケープされる。 developer.hashicorp.com このため、例えば aws_cloudwatch_event_target の input_transformerを用いて送信メッセージをカスタマイズしたい場合に < > を…

SourceOrgIDとPrincipalOrgIDでOrganiations環境下のアクセス制御を実現する

AWS

導入: リソースベースポリシーとプリンシパル AWSにおいてアクセス元を識別するための仕組みとしてプリンシパルがある。 IAMポリシーにおいてリソースベースのポリシーを定義するとき、さまざまな種類のプリンシパルから指定することができる。 docs.aws.ama…

Principalsに指定したIAMユーザを削除するとS3バケットポリシーが変化する

AWS

まさにこれに遭遇した。 dev.classmethod.jp S3バケットポリシーにIAMユーザのアクセス許可を付与していた。 IAMユーザを削除したが、S3バケットポリシーの修正もれが生じていた。 S3バケットポリシーはterraformで管理していたが、IAMユーザの指定ではIAMユ…

GitHub Composite Actionsではboolean inputsがstringとして扱われる

Composite Actions概要 GitHub Actionsにて複数のworkflowから利用できるactionsとしてComposite Actions (日本語では複合アクション)を作成できる。 Composite Actionsを作成すれば、複数のworkflowから参照することもできるし、複数リポジトリで共有するこ…

論理属性をVueでバインディングする

<button type="button" disabled>送信</button> のように、disabled属性をVueで制御したい。 これを実現するには以下のようにv-bindを利用する <script setup lang="ts"> import {ref} from "vue"; const isButtonDisabled = ref(true); </script> <template> <button v-bind:disabled="isButtonDisabled">Button</button> </template> これにより、isButtonDisabled がt…

Nuxtにおけるルーティング設定とCatch-all Route

Nuxtのpagesやserverではfile-system routingを採用しており、URLの構造のソースコードのディレクトリ構造を一致させることができる。 nuxt.com nuxt.com serverのディレクトリなどにおいて、リクエストパスがいずれのルーティング設定とも一致しない場合の…

Nuxt/TypeScriptにおけるパスエイリアス

TypeScriptにおいて import { NuxtAuthHandler } from "#auth"; のようなインポート文を見かけることがある。この#authのような例をパスエイリアスと呼ぶ。 パスエイリアスを利用することで、相対パスでコンポーネントを指定する場合に比べてディレクトリ構…

GitHub Actionsでmatrixの実行結果(outputs)を取得する

GitHub ActionsにおいてMatrix Jobを実行した結果(outputs)を参照したい。 2024年1月の仕様では、最後に実行したジョブの結果で上書きされるので、ジョブによって結果が異なる場合にそれぞれの値を取得することができない。 これは以下のコミュニティディス…

GitHubでOrganization Environmentsが欲しい

GitHub Organization下の複数リポジトリにてクレデンシャルを共有したいケースがよくある。 このような場合にはOrganization SecretsやOrganization Variableが便利。 docs.github.com これはこれで良いのだけれど、GitHub Environmentsを利用するようになる…

AWS lambdaのNode.jsを18にアップデートする

AWS LambdaのNode.js 16ランタイムは 2024年6月に廃止がアナウンスされている。 (Node.js 16 LTS自体は公式には2023年11月にEOLを迎えている)。 できるだけ早めに Node.js 18 or 20にアプデートしたい。 docs.aws.amazon.com AWS Lambda固有の事情として、No…

エクスポートを利用するためにJavaScriptモジュールとして宣言する

JavaScriptには他のファイルで定義されたリソースを利用するための仕組みとして import/exportがある。 exportを利用するためには、ソースファイルがモジュールである必要がある。 ソースファイルで export 宣言を使用するためには、そのファイルはランタイ…

GitHub Environmentsで設定した変数を参照する。

GitHub Environmentsにはシークレットと変数が設定できて、それぞれ secretsおよびvarsコンテキストを用いて参照する。 例えばシークレットとしてTOKENを設定していれば ${{ secrets.TOKEN }} で、変数として RAILS_ENVを設定していれば ${{ vars.RAILS_ENV …

GitHub Actionsで条件に応じて値を設定する

GitHub Actionsで条件に応じて変数に値を設定したい。 例えばmainブランチを対象とする場合はenvironmentにproductionを、それ以外のブランチを対象とする場合はdevelopmentを設定したい。 このようなケースでは三項演算子が利用できる。 docs.github.com こ…

AWS LambdaのCloudTrailイベント名はAPI名と一致しない場合がある

AWS

AWS のCloudTrailログにおいてイベント名は基本的にAPI名と一致する。 例えば、S3に関するCloudTrailログであればイベント名は ListBucketsやGetBucketAclなど。 これはAWSドキュメントのAPI Referenceなどに記載の名前と一致する。 docs.aws.amazon.com 一…

AWS LambdaのGoランタイムを provided.al2023にアップデートする

AWS Lambdaの go1.xランタイムのサポートが切れるのでアップデートする。 aws.amazon.com provided.al2023の選択 ランタイムアップデートについてはAWS LambdaのGo言語向けドキュメントにまとまっている。 以下以外のドキュメントでは Amazon Linux 2023 (pr…

ansibleで繰り返し処理にはloopディレクティブを利用する

ansibleで繰り返し処理を実装する場合は with_XXX系ディレクティブをよく利用していた。 特によく利用するのが with_items で、単純な繰り返し処理には with_itemsで対応することが多かった。 ansible 2.5以降では新しく loopディレクティブが導入された。 l…

github actionsは必須入力を指定しなくてもエラーにならない

github actionsのinputにはrequiredというパラメータがある。 これにより、対象のinuptが必須なのかオプションなのかを区別することができる。 docs.github.com しかし、required: trueに指定したinputが指定されなかったからといってエラーになるわけではな…

fine-grained personal access tokenは単一のユーザor組織のリソースにしかアクセスできない

GitHubの Fine-grained personal access tokenは personal access token(classic)に比べて細かく権限を制御できるだけでなく、対象のResource ownerを1つ指定する必要がある。 所属する組織をResource ownerに指定するには、対象組織がpersonal access token…

Step Functionsでリドライブすると旧リビジョンで動作する

AWS

Step Functionsにはリビジョン・バージョン・エイリアスの概念がある。 単にStep Functionsを更新するとリビジョンが更新されるが、特定のリビジョンにバージョンやエイリアスを発行することもできる。 docs.aws.amazon.com (公式ドキュメントより) Step Fun…