速く、もっと速く!Docker Build Cloudでイメージビルド時間を短縮する

2024/1/23に Docker Build Cloudが発表されました www.docker.com 早速Docker Build Cloudを試してみました Docker Build Cloudとは サイト: https://www.docker.com/ja-jp/products/build-cloud/ ドキュメント: https://docs.docker.com/build/cloud/ イメ…

OpenSearchの手動スナップショットリポジトリ登録スクリプトをRubyで書く

OpenSearchで手動スナップショットを作成するためには、事前にスナップショットリポジトリの登録をしなければなりません。 docs.aws.amazon.com 公式ドキュメントのサンプルにはpythonのコードが掲載されています。 Using the sample Python client この登録…

OpenSearchでVPC内にあるドメイン同士でRemote Reindexをする

はじめに Amazon OpenSearch Serviceで、同一VPC内にあるドメイン同士でRemote Reindexをする方法を紹介します。 まず、公式ドキュメント docs.amazonaws.cn 前提条件 注意すべきは前提条件の部分です。 ・ドメインでデータ ノードに T2 または T3 インスタ…

ECRにリモートキャッシュ(--cache-to)のmode=maxでイメージプッシュする

2023/11/16 に BuildKit クライアント用の Amazon ECR でのリモートキャッシュサポートの発表 | Amazon Web Services ブログ という記事が発表されて、イメージビルド時のcache-toのオプションmode=maxが使えるようになった。 待望のアップデート。このissue…

EKS on FargateでのDatadog Cluster Agentの動かし方

概要 Fargate上でEKSのPodを動かしている場合に、Datadog Cluster Agentのマニフェストはどう定義すればいいか分かりづらかったのでメモとして残しておきます。 公式ドキュメント: https://docs.datadoghq.com/ja/integrations/eks_fargate/#cluster-agent-%…

`RUN --mount=type=cache`のキャッシュをGitHub Actionsのキャッシュとして保存しイメージビルドを速くする

背景 CI環境でのDockerイメージビルドの速度向上は、多くの開発者にとって切実な課題です。 簡単な対策は CircleCIでは Docker レイヤー キャッシュ (DLC)を有効にする。 GitHub Actionsでは docker/build-push-actionでcache-from: type=gha cache-to: type…

Github Actionsのdocker/build-push-actionのcache-toにECRを指定する

TL;DR - uses: docker/build-push-action@v3 with: context: . tags: ${{ steps.login-ecr.outputs.registry }}/${{ env.MY_REPOSITORY }}:${{ env.MY_TAG }},${{ steps.login-ecr.outputs.registry }}/${{ env.MY_REPOSITORY }}:${{ env.MY_CACHE_TAG }} pu…

Podに指定したserviceAccountNameを消したいけど消せない件

Podのservice accountを指定する場合、マニフェストファイルのspec.serviceAccountNameに書きますが、service accountを使わなくなったのでファイルから行ごと消してapplyしたけど反映されない事象に遭遇しました。 調べると、以下が理由。 github.com つま…

Kubernetesで動くSidekiqへのヘルスチェック方法

Kubernetesクラスタ上で動かすSidekiqに対してヘルスチェックを導入した話 | Money Forward Engineers' Blog を参考にさせていただきましたが、調べるとヘルスチェックスクリプトを自作しなくても済むことが分かりました。 TL;DR livenessProbe: exec: comma…

システムメンテナンスを事故なく終わらせるためのTips

システム運営をやっていると、システムメンテナンスをやらないといけない場面が出てきます。 ミドルウェアのバージョンアップ、データのマイグレーション、大きな機能リリースなどなど。 そこで事故なくメンテナンスを終わらせるためのTipsを書き残しておき…

【解決編】EKS Cluster Autoscalerとログ保存用Daemonsetの組み合わせでスケールイン時にログが失われる問題

shepherdmaster.hateblo.jp の続き&解決編です。 add DaemonSet eviction option for empty nodes by yaroslava-serdiuk · Pull Request #3824 · kubernetes/autoscaler · GitHub がリリースされたので、--daemonset-eviction-for-empty-nodes=trueオプショ…

KustomizeのComponent機能で環境に応じたmanifestファイルを生成する方法

KustomizeのComponent機能を使うと、特定の環境に対して一連のマニフェストを生成することができます。 github.com 今回はComponent内のmanifestファイルを環境に応じて変える方法を紹介します。 言葉では伝わりづらいかと思うのでファイルツリーを載せます…

EventBridgeを介してDatadogとIncident Managerを連携させてみる

背景 Datadogで発生したアラートをもとにオンコールしたい場合、PagerDutyを使うのが一番簡単ですが、Incident Managerを使うともっと安価にオンコールが実現できるのではということで、連携してみました。 連携の概要 Datadog → EventBridge → Incident Man…

Locustでリクエストfail時のログ(日時とか)を出力する方法

負荷試験ツールのLocustでリクエストがfailするとFailuresタブから情報が見れるのですが、いつfailしたかが分かりません。 locustにはevent hook機能があり、以下のように書けばどんなリクエストがいつfailしたか標準出力されます。 from locust import even…

EKS Cluster Autoscalerとログ保存用Daemonsetの組み合わせでスケールイン時にログが失われる問題

EKS Cluster Autoscalerとログ保存用Daemonsetの組み合わせでNodeスケールイン時にログが失われる問題に遭遇した。 前提 Cluster Autoscaler v1.17.4を使用 fluent/fluentd-kubernetes-daemonsetを使用して、毎分S3にログを保存 現象 Cluster AutoscalerがNo…

定期的にPodを再作成する方法

背景 簡単に定期的にPodを再作成する方法を紹介します。 なんで定期的にPodを再作成したくなるかというと、例えば以下のような理由が思いつきます。 メモリリークしていてずっと稼働させるのはまずい DBを負荷に応じてオートスケールさせていて、スケールア…

KubernetesのNodeのディスク使用率がどんどん上がっていく件

背景 Kubernetes(EKS)のNodeのディスク使用率がどんどん上がっていっているので原因を調べた 調査 $ df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 1.9G 0 1.9G 0% /dev tmpfs 1.9G 0 1.9G 0% /dev/shm tmpfs 1.9G 1.3M 1.9G 1% /run tmpfs 1.…

EKSコンソールからnodeやworkload情報を見れるようにする

AWSコンソールのEKS画面で Your current user or role does not have access to Kubernetes objects on this EKS cluster This may be due to the current user or role not having Kubernetes RBAC permissions to describe cluster resources or not havin…

エンジニアキャリアラダーを作成する際に参考になるサイト

海外の公開されているキャリアラダー集 www.swyx.io これが参考になった。 まずゼロからキャリアラダーを作成するのは非常に難易度が高い。どの等級にどんな役割を期待するのかを定義しそれを言語化していく作業は並大抵のことではない。 そこですでに公開さ…

EKSのIAM roles for service accounts機能を使いたい場合の注意点

EKSのIAM roles for service accounts機能(サービスアカウントにIAM ロールを割り当てる機能)を使いたい場合の注意点です。 AWS SDKのバージョンを確認する IAM roles for service accounts機能を使いたい場合、サポートされているバージョンでないと機能し…

Terraformのaws_iam_openid_connect_providerリソースのthumbprint_listに自動で値を入れる方法

この記事はterraform Advent Calendar 2020の19日目です。 TL; DR tls_certificateリソースを使う Terraformのaws_iam_openid_connect_providerリソースのthumbprint_listに自動で値を入れたい EKSで IAM roles for service accounts機能(PodにIAMロールを割…

Athenaのパーティション項目の型とパーティションプロジェクションの奇妙な関係

Athenaのパーティションプロジェクションを試していたらちょっとハマったのでメモしておく 追記(2021/03/23) projection.columnName.digitsを設定すれば パターン1でもきちんと検索できる パターン1 S3には /app_log/year=2020/month=06/day=05/hour=04/ の…

kustomize 2.1.0の変更点

kustomize 2.1.0で機能追加、変更点があったのでまとめる kustomize/v2.1.0.md at master · kubernetes-sigs/kustomize · GitHub プラグイン機構の導入 kustomize の generator / transformer の振る舞いを変えてみる | TECHSCORE BLOG に詳しく書かれている…

1000/02/29をRubyでinvalidな日付として扱う方法、もしくはRubyで1582年以前の暦をユリウス暦ではなくグレゴリオ暦で扱う方法

結論 RubyのDateクラスには startを引数に指定できるメソッドがある。 docs.ruby-lang.org startはグレゴリオ暦をつかい始めた日をあらわすユリウス日を表す。 引数のstartにDate::GREGORIANを指定すると、常にグレゴリオ暦で処理してくれる。 Date.valid_da…

Amazon Kinesis Data Firehoseの料金が高かった

TL;DR ログ1行のサイズが5KB以下なら5KBとして料金計算される 経緯 仕事でAmazon Kinesis Data Firehoseを使う機会があり、本番導入してみたところ料金が高かった。一日数千円。。 改めてログ量、ログサイズから自分で計算してみた。 CloudWatchからFirehose…

monday.comのURLをSlackに貼ったら展開されるようにした

monday.comというとても便利なタスク管理ツールがあります。 以下でも紹介記事を書きました。 tech.studyplus.co.jp monday.comは(当たり前ですが)要ログインなので、monday.comのURLをSlackに貼っても展開されません。 それだととても不便なので、URLを展開…

Spinnakerについて調べたのでまとめる

Spinnakerについて簡単に調べたので自分用にまとめておく Spinnaker とは Spinnakerとは、マルチクラウドに対応した継続デリバリのプラットフォームです。 デプロイパイプラインの管理機能を備え、Red/Blackデプロイ(Blue/Greenデプロイ)やカナリアリリー…

Circle CIのcacheは先頭一致したkeyのcacheが使われる

たとえば以下の設定になっていたとします - restore_cache: keys: - gem-cache-v1-{{ arch }}-{{ .Branch }}-{{ checksum "Gemfile.lock" }} - gem-cache-v1-{{ arch }}-{{ .Branch }} - gem-cache-v1 https://circleci.com/docs/2.0/caching/#restoring-cac…

特定の例外をSentryに送らないようにする方法

Sentryに特定の例外を送りたくない場合、プログラムを修正すれば済みますがそれが深淵な理由でできないOR面倒な場合、プログラム側でSentryに送らない例外を指定できます。 もちろんSentry側でignoreにできますが、たくさんの箇所で発生したりアプリケーショ…

config gemを使って環境変数も読み込む

config gemには、ENVオブジェクトから値を読み込むためのuse_envオプションがあります。 しかし単にuse_envをtrueにしても、ちゃんと環境変数が読み込まれません(env_separatorがデフォルトだと.になっているため) なので以下のようにenv_separatorに_を指定…