TerraformのStateやModuleに関する設計

概要 名前付け 抽象度 インフラアーキテクチャ図 チーム 認証情報 変更(デプロイ)のライフサイクル DRYの誤用 コードの検索性 モジュール間の依存 アプリケーションレイヤーとの違い まとめ 概要 TerraformのStateやModuleに関する設計に関する考慮点をざっ…

プレビュー環境に必要な要件を整理する

概要 プレビュー環境、マルチステージング環境などと呼ばれる環境について要件を整理する。 要件 プルリクエスト(任意のブランチ)のコードをデプロイできる 他の開発者と分離された環境をデプロイできる プルリクエストにラベルを貼るとインフラが作成され…

最近の仕事まとめ2023冬

概要 新規プロジェクトインフラ基盤構築・レビュー ecspresso利用 Atlantis導入 AWSアカウント移行 ECS->EKS移行 勉強会 登壇系 プロジェクト管理 その他 まとめ 概要 今年もお疲れ様でした。 新規プロジェクトインフラ基盤構築・レビュー ecspresso利用 既…

Amazon ECRでイメージを保護する

概要 Amazon ECRでイメージを保護したいが保護のアクションがないので対応策 結論 保護したいイメージの削除期間やイメージの個数を大きな数にする 下のようなJSONにすると vから始まるタグ(v1.1.0など)は1年間削除されない sha-から始めるタグは1日で削除さ…

Terraformの改善活動まとめ

概要 課題点 リポジトリの分割粒度 stateの粒度 カスタムスクリプトによる開発体験の低下 Terraform, AWS providerのバージョンが古い やったこと リポジトリの統合 カスタムスクリプトの脱却 CIの拡張 静的解析の追加 Terraform, AWS providerのバージョン…

ベースブランチにマージされていないGitHub Actionを動作検証する

環境 gh --version gh version 2.25.1 (2023-03-21) https://github.com/cli/cli/releases/tag/v2.25.1 手順 1.action作成 .github/workflows/foo.yaml name: Foo on: pull_request: # pull_requestにすることでworkflow listに追加される jobs: foo: runs-o…

zxでTerraformのファイルにlifecycle prevent_destroyを一括で付与する

概要 環境 スクリプト 実行方法 参考 概要 Terraformの任意のリソースにprevent_destory = trueを付与したい。 zxでスクリプトを書いたので記録。 挙動 lifecycleブロックがなければ追記してprevent_destory = trueをセット。 lifecycleブロックがある場合は…

リリース作業を委譲するためにやったこと

概要 課題 手作業 作業依頼 やったこと 自動化 ドキュメンテーション コミュニケーション ほかに気をつけること まとめ 概要 現在SREとして働いているが、複数あるアプリケーションのリリース作業を依頼されることが多かった。 依頼者の職種はエンジニアやマ…

最近やっていること2022年夏

概要 直近1年くらいでやっていたことをまとめる 全体の方向性 持続可能な開発組織づくり 開発生産性の向上 各チームが自律的に開発できるように責任と権限を整備 開発チームのフィードバックサイクルの向上 SREチームのトイル削減 具体的にやったこと 課題の…

too many open filesエラーが出たときにlsofコマンドで確認する

概要 環境 用意するもの 検証 ファイルディスクリプタの確認 /proc/PID/fd lsofコマンド ulimitを変更する まとめ 参考情報 概要 too many open filesエラーが出たときにlsofコマンドで確認するときの手順を説明する機会があったのでまとめる。 環境 node -v…

マイクロサービス移行とモノレポを選択した理由について

概要 課題 改善方針 具体策 サービス分離 モノレポ なぜモノレポか? チームのコラボレーションのため 依存関係の解決のため 今後必要なこと まとめ 概要 仕事でマイクロサービス移行にともなってモノレポを採用した。 その理由をまとめる。 具体的な内容に…

npm workspaceとnpm installの挙動確認

環境 概要 構成 挙動の確認 npm installの実行順について まとめ 環境 % node -v v16.13.0 % npm -v 8.11.0 概要 npm workspaceでnpm installを実行すると 1. ワークスペースルート 2. (バージョンが異なるものは)各々のワークスペース の順にインストール…

.npm-init.jsを使用してmonorepoでpackage.jsonの初期値を設定する

概要 npm workspaceを利用するとき、package.jsonの初期値を設定することで構築の手間を減らす方法を示す。 これによりnpm initしたときに、npm scriptsやnpmパッケージが初期設定される。 環境 % node -v v16.13.2 % npm -v 8.10.0 実装 % tree -a -I '.git…

Node.jsでパッケージが参照しているnode_modulesのパスを取得する

結論 環境 動作確認 CommonJSの場合 ES Modulesの場合 参考ドキュメント まとめ 結論 require.resolveを使う Use the internal require() machinery to look up the location of a module, but rather than loading the module, just return the resolved fi…

ESLintのパフォーマンスを調査する

環境 ESLint v8.13.0 調査方法 ルールごとにかかっている時間の割合を計測する TIMINGオプションを付けると、実行時間が長い順のトップ10と、lint対象全体に対してのトップ10の割合が表示される $ TIMING=1 eslint lib Rule | Time (ms) | Relative :-------…

GitHub Actionsでdocker build時にエラーが出た

概要 GitHub Actionsでdocker build時にエラーが出たのでメモ エラー docker build時に下記エラー error: failed to do request: Post "https://***.dkr.ecr.ap-northeast-1.amazonaws.com/v2/<REPOSITORY>/blobs/uploads/": EOF 原因 ログインするECRのアカウントIDを間</repository>…

転職にともないLTした話

概要 苦労したところとそれに対する取り組み 開発生産性改善 辛かったこと 対策 まとめ 負荷試験改善 辛かったこと 対策 自動化 モブプロ・モブ作業 段階的な負荷検証 まとめ 職能横断組織と機能別組織 辛かったこと まとめ まとめ ブログのまとめ 概要 年明…

いい手順書とは

概要 私が思ういいWebシステム開発における手順書についてまとめる 前提 Webシステム開発 複数人のチーム開発 結論 いい手順書とは下記のような特徴がある 手順に番号が振ってある 番号が振ってあることで下記のメリットがある 全体を見渡したときに手順がい…

GitHub ActionsからAWS CodeBuildをキックする

概要 GitHub ActionsからAWS CodeBuildをキックする方法を示す。 背景 すでにCodeBuildプロジェクトの資産がある GitHubと連携しており、CodeBuildの結果をAWSコンソールを開いて確認するのが手間 結論 下記のようにして実装した。 RoleとCodeBuildプロジェ…

workflow dispatchでnpm versionを更新する

概要 ある変更の塊に対してタグを付けたい ローカルでやると間違えるのでCIで統一したい tagとreleaseを分けたい コード .github/workflows/tagging.yml name: tagging on: workflow_dispatch: inputs: version: type: choice description: "patch | minor |…

Terraformでmodule利用時にデフォルト値と動的な値を設定する

概要 Terraformでmodule利用時にデフォルト値と動的な値を設定する。 例としてECSのタスク定義の環境変数を用いる。 バージョン terraform -version Terraform v0.14.3 コード モジュール側 modules/hoge/variable.tf variable "environments" { type = list…

GitHub Actionsでmilestoneが適用されていないPRを検知する

概要 PRオープン時にマイルストーンがついているか検知する ついていなかったらCIを落とす を実現したかったが方法に難があるのでメモを残す。 マイルストーンとは https://docs.github.com/ja/issues/using-labels-and-milestones-to-track-work/about-mile…

GitHub Actionsからリリースノートの自動生成機能を使う

概要 GitHubにはリリースノートの自動作成機能がある。 .github/release.ymlをおいておけばそのフォーマットどおりにラベルをグルーピングしてサマリを作ってくれる。 Automatically generated release notes - GitHub Docs yamlのサンプルは下記。 https://…

退職エントリ

概要 10月31日で現職を退職します。 2017/4~2019/7 合同会社DMM 2019/8~2021/10 合同会社EXNOA(DMM GAMES) プラットフォームチームでDevOpsやSRE領域の活動をしてきました。 (開発から運用までのワークフロー整備・改善など。) チームメンバーや会社に助け…

GitHub Actionsのservice containersでCI実行時にMySQLコンテナを動かす

概要 GitHub Actionsのservice containersという機能を使うと、CI上でコンテナを動かすことができる。 ユースケースとしては統合テストや、マイグレーションテストが想定される。 About service containers - GitHub Docs 例 .github/workflows/test.yaml na…

Dockerfileのヒアドキュメントを試す

概要 前提知識 環境 動作検証 syntaxについて syntaxとは docker/dockerfileとは xxx-labsとは 参考 まとめ 概要 docker/dockerfile:1.3.0-labsからDockerfileでヒアドキュメントがサポートされた。 https://github.com/moby/buildkit/blob/master/frontend/…

Locustで時間に応じて一定のRPSをかける

概要 Locustで時間に応じて一定のrpsを流す 結論 constant_pacingとLoadTestShapeを利用する。 バージョン Locust v1.6.0 例 120秒かけて0->100rpsまで上げる 120秒間100rpsをかける 120秒かけて100->1rpsまで下げる 1秒に1回タスクを実行するようにして、ユ…

Locustで複数パス・複数ホストへリクエストし、それぞれ個別にGrafanaでグラフ化する

概要 負荷試験ツールのLocustを使ってWebシステムに負荷をかける。 その時、リクエストのホスト、パス毎に負荷試験結果をグラフ化したい。 Locustで上記を実現するにはどうすればよいか記録する。 バージョン Locust v1.6.0 Grafana v8.0.x Prometheus v2.28…

負荷試験ツールの選定時に考慮することまとめ

概要 負荷試験ツールの選定を行うときに考慮することをまとめる 機能 ログインが必要なページへの対応 Cookie変更など 負荷分散機能 負荷試験クライアントマシンのリソース上限に達する場合は負荷分散を考慮する必要あり 複数ユーザ対応 ファイル読み込み等…

複業の契約が半年間継続したのでやっていることをまとめる

概要 案件獲得 勤務形態 勤務時間、勤務ペース 担当範囲 Tips タスクの認識合わせ 期待値の共有 稼働時間のズレ 業務の改善提案 ドキュメント整備 未経験の技術について 健康 その他感想 副業の目的を明確にする 開発規模の違い 依存先が分散する サイクルを…