Closed11

やってたこと 2024/06

sogaohsogaoh

6/1(土)-2(日)

MySQL の RDS を Aurora に置き換えて B/G でアップグレードしておく

  • production の RDS が、3.03 がもう少しで廃止になるから上げておけ、っていう PHD へのメッセージに対応する準備として検証しておいた

    • 収穫は、B/G 後の tfstate 調整がそんなにめんどくなさそうなのを確認できたことかな
  • Secrets Manager 統合してると B/G 始められない

    • 一時的にバラすのと、B/G終わった後に再統合する方法を確認したい
      • API でシュッとやれないものかな
    • マネコンで再投合すると、SecretManager 変わっちゃってる(それはそう、と思う)
    • RDSクラスターが restart しちゃってるんだがサービス影響が心配
      • インスタンスは「利用可能」のまま

https://x.com/sogaoh/status/1796890067610562888

MS Office 365 の領収書取得

  • 個人向け(実際に個人向け。仕事ではほんとに使ってない。家族しか使ってない)のって、Microsoft アカウントにサインインしてないと領収書取得できない。他のサービスみたいにメール添付でちゃっ、って感じで飛んでこない。日曜は 10:00 - 17:30 くらいの間に(平日・土曜は 9:00 - みたい)チャットサポートか電話かしないとならなくで、そのセッション中でかつログインされてるブラウザでないとPDF取得に至れない。

https://x.com/sogaoh/status/1797085646072475980

Lamdba で VPC内の RDS にアクセスする TypeScript の Spike

  • 接続情報は SSM にあるのを使う
    • vpce が必要、と予想してる

GPT4o先生、AWS SDK v2 のコードを差し出してくる。最初から v3 の出してくれ。
VPC内の RDS にアクセスする が本丸なので、いいんだけど。

sogaohsogaoh

Lamdba で VPC内の RDS にアクセスする できた。
なお、リソースは IaC で管理できてない。
まずは実現できることの確認、と思って、雑にマネコンで「こんな感じかな」でリソース組んだらいけた。一番苦戦したのはデプロイ。

TSのライブラリの使い方によっては、ちゃんとDB切断ステートメントを finally ブロックに書いておくとかして接続状況を確認しないと、ゾンビプロセスみたいに残って積み重なると課金に響くらしい。お気をつけを。

sogaohsogaoh

Secrets Manager 統合してると B/G 始められない バッチリ制限にあったわ・・・

https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/blue-green-deployments-overview.html#blue-green-deployments-limitations

AWSサポートの回答:

  • 再統合やったら password 変わるの避けられない
  • 回避策として提示されたのは、"手動で作成した SecretManager で接続情報を管理"
    • それって、 SecretManager統合じゃないの?
    • ということで、感想

https://x.com/sogaoh/status/1798674770197938508

↓で切り返そうと思っている

  1. SSMパラメータストアに現在と同じ username と password を新規作成
  2. 1.の username と password を参照するようにアプリケーションをデプロイ
  3. SecretManager 統合を解除:terraform で manage_master_user_password を false にして master_usernamemaster_password を設定(SSMパラメータストアに保管してる username と password )

これでどうよ?と。
-> 翌日に返信あり。いいんじゃない、と。来月、検証していく。

sogaohsogaoh

6/3(月)-7(金)

Lambda の環境変数が多くなりすぎたので sqlite で持つ、という調整をリリース

https://repost.aws/ja/knowledge-center/lambda-environment-variable-size

  • ↑だそうなので、もうこれはデータでしょう、って思って、sqlite に key, value っていう雑なテーブルに突っ込んでおいてそれを見るようにしましょう、っていうのをやってて、それを初回リリースした。
  • ひと工夫したのは内容が軽くパスワード的なものなので、sqlite は難読化してリポジトリに置く、ということをした。このへんのひと通り(難読化されたCSVファイルを平文にして編集可能にしてsqliteに突っ込んで、それを難読化する、難読化されたsqliteを読んで使う)は Deno でChatGPT4にシュッと組んでもらった。ちょいちょい嘘つかれたけど。

海外送金の検討

  • とあるカンファレンスに海外からスピーカーを呼ぶ。その方への送金方法の模索。
  • WISE っていうのを初めて知りました。登記簿謄本必要らしいので特急で請求したり、本人確認 eKYC に3回目のチャレンジして reject されなさそうにようやくなった後に、この形態の法人では使えなさそうと気がついてひとりで爆笑した。
  • PayPal も手段としてあるっぽいんだけど、ChatGPT4o 先生によると手数料だけで5万くらいかかるっぽくて、窓口で手続きしようかなあと思い始めた。自分知る限り、それだったら数千円程度?のような気がしているので(そうなのかは後日わかる)。

Waroom Meetup #1

https://x.com/sogaoh/status/1798049811591225749

#o11y_mackerel

オンライン視聴予定だったが急に打ち合わせ入って見れてない。今週中には見ておきたい。
https://mackerelio.connpass.com/event/316449/

「Amazon Linux 2023 に ansible-playbook で nginx インストール」の修正

こんなに変えることになった...
vars/main.yml.diff
---
-nginx_version: "1.24.0"
+nginx_version: "1.26.1"
+nginx_repo_url: "http://nginx.org/packages/amzn/2023/$basearch/"
+nginx_gpg_key: "https://nginx.org/keys/nginx_signing.key"
+nginx_fingerprint: "573B FD6B 3D8F BC64 1079 A6AB ABF5 BD82 7BD9 BF62"
tasks/main.yml.diff
---
+# refs https://nginx.org/en/linux_packages.html#Amazon-Linux
+- name: Create Nginx repository file
+  ansible.builtin.copy:
+    dest: /etc/yum.repos.d/nginx.repo
+    content: |
+      [nginx-stable]
+      name=nginx stable repo
+      baseurl={{ nginx_repo_url }}
+      gpgcheck=1
+      enabled=1
+      gpgkey={{ nginx_gpg_key }}
+      module_hotfixes=true
+      priority=9
+      [nginx-mainline]
+      name=nginx mainline repo
+      baseurl=http://nginx.org/packages/mainline/amzn/2023/$basearch/
+      gpgcheck=1
+      enabled=0
+      gpgkey={{ nginx_gpg_key }}
+      module_hotfixes=true
+      priority=9
+- name: Install GPG key for Nginx
+  ansible.builtin.rpm_key:
+    state: present
+    key: "{{ nginx_gpg_key }}"
+
 - name: Install Nginx
   ansible.builtin.dnf:
-     name: nginx-{{ nginx_version }}
+     name: "nginx-{{ nginx_version }}"
     state: present

 - name: Enable and start Nginx service
   ansible.builtin.systemd:
     name: nginx
     enabled: yes
     state: started

sidekiq の増設に着手

とある RoR のバックエンドコードで sidekiq 動かすっていう話で、Fargate を追加していく。
手始めにローカルの docker compose を起動してみたんだが、設定不足なようでワーニングが出る。

つづく。。

Laravelの開発プロジェクトに、脳死でsail使うな高校校歌

ふと浮かんだので呟いた
https://x.com/sogaoh/status/1798895196287242727

自分が考える理由をシュッとかいつまんで内部共有した

  • 開発者がDockerfileに対して考えることを妨げる(サービスインフラに対して「脳死」になる)
  • セキュリティ面の考慮がされていない(ビルトインサーバーを使っている)

refs

実際に、調整に苦しんだ経験が、自分にはある。

AWS Compute Optimizer

さっそくいいレコメンドを聞いた
https://x.com/sogaoh/status/1798882879302238322

久々の (ECS) Jenkins 設定調整に難儀

やりたかったのは、Bitbucket の push 時に CI が走るのを止める、ということ。
ChatGPT4o先生に提案されたのは

  • groovy の pipelineJob 定義の 先頭に disabled(true) を入れて発動を無効化 -> 効かず(トリガー発動)
  • groovy の pipelineJob 定義の definition ブロック(?) cpsScm セクションにある triggers をコメントアウト -> 効かず(トリガー発動)
  • Configuration as Code プラグインの設定ファイル JCasC.yml に以下を追記してプラグインを無効化 -> 効かず(プラグイン無効化されてない)
JCasC.yml jenkins: 配下に追記
  pluginManager:
    disable:
      - "bitbucket-push-and-pull-request"
  • ECS デプロイして起動するときに流れる自動化スクリプト(/usr/share/jenkins/ref/init.groovy.d に groovy を配置することで作用させることができる)にプラグイン無効化を指定 -> 成功
008_disable_plugin.groovy
import jenkins.model.Jenkins
import hudson.PluginWrapper

def disablePlugins = ["bitbucket-push-and-pull-request"]

Jenkins jenkins = Jenkins.getInstance()
disablePlugins.each { pluginName ->
    PluginWrapper plugin = jenkins.getPluginManager().getPlugin(pluginName)
    if (plugin != null && plugin.isActive()) {
        plugin.disable()
        println("Plugin ${pluginName} has been disabled.")
    } else {
        println("Plugin ${pluginName} is either not installed or already disabled.")
    }
}

jenkins.save()

#yurusre

XのTLが気になったので資料だけ収集した
https://yuru-sre.connpass.com/event/317749/

#dena_lint_night

19:30 から予定が入ったので最初のと、予定の後に最後のセッションをちょっとだけの参加になった。
https://lintnight.connpass.com/event/319202/

lintnet と dockle は使っていきたいな、と思いました。

sogaohsogaoh

海外送金の検討 の話、窓口に行く前に電話で聞いてみたら、今法人口座からの海外送金受け付けてないと!!!
もう1つの、最初からのメインバンクからの送金に舵を切り換え、提携機関へのサインアップを進めていけばいけそうなので着手した。
自分、代表者じゃないので、委任状が必要で、日付と署名の部分以外を埋めてPASSするところまでやった。

余談:こういうシーンもあった

英数字のみのペットの名前はないだろう ww

sogaohsogaoh

sidekiq の増設に着手 day 2 (?)
だいぶハマったが、解決できた。ポイントは2つ。

1つ目は、"あとから bundle install" をやる方法を知った。

  • docker compose run --rm sidekiq bundle install
    • redis への接続確認例は docker compose run --rm sidekiq redis-cli -u redis://redis:6379/0 ping => PONG が返ってくればOK
      • 末尾の /0 とか /1 ってなんだろう、っていうのはあとで確認しよう

2つ目は、"REDIS_HOST" の指定のしかた。
https://x.com/sogaoh/status/1799073621811540077

sogaohsogaoh

6/8(土)-16(日)

ECS構築: Nuxt.js + Laravel(10)

フロント:Nuxt.js、バックエンドAPI:Laravel 10 という構成のアプリケーションを ECS 化する、という取り組みをやっている。
準備として、ビルドした docker image ベースでローカルにて compose.yml から一式を起動して動かす、というところまでできていたので、AWS インフラの構築を進めた。

  • ecr push まで実施済み

  • vpc・igw・route_table の import

  • subnet・sg・vpce は新規作成

  • ecs cluster -> alb -> ssm の順に「器」を構築

  • ecspresso でデプロイする一式を整備

という流れでデプロイしてみた。凡ミスとしきたり守ってなかったのがあって、一発では疎通しなかった。修正点は以下2つ。

  • sg の設定ミスっててバックエンドのヘルスチェックが永遠に通らなかった
    • フロントがヘルスチェック通ってたのがかなり謎
  • Nuxt.js はビルド時点で環境変数「食わせて」おかないと効かない
    • 以前、Next.js で経験してた

これやった結果、見かけは動くようになったっぽい。
来週はバックエンドの裏(?)で稼働するワーカーの整備に挑む。これはわりと初めて。

ECS構築:sidekiq

ローカルの docker compose 環境で動いたので、いよいよECSへもっていくのをやった。
サービス分けてみたが動かなかった、等あったものの、最終的には期待動作となった。
参考とした情報は↓

https://qiita.com/hatsu/items/013271e93f9138594420#編集後のtask-definitionjson

自身が「これはやったことなかったな」と感じたポイントは

  • タスク定義に essential: true を複数持った
  • 1つのサービス・タスク定義で2つのコンテナを動かす
    • API のコンテナそのまま
    • sidekiq のコンテナを単純に追加

CloudWatch Logs 見て、docker compose と同様のログの出方を見たときは「これでいいんだあ、へぇ〜」という気持ちになりました。

オンプレからのデプロイ移行にて

リポジトリ統合をやりつつ、という進め方のデプロイ移行(SSHでシェルを叩く -> CodePipeline で回す)がいよいよ大詰めに来て、スクリプトを rsync の -n + -i オプション付きで検証していた。

-i オプションによって完全に差分ないファイルは上書きされないはずなのだが、本番環境からリポジトリにファイルを反映しておいたはずが、空白だけの差分が出る。不思議。
本番環境からリポジトリに反映したタイミングでそうなるのか、git subtree で統合先のリポジトリに sync するときにそうなってしまうのか、よくわからない。
差分が空白だけなら挙動に変化は出ないはずなので、デプロイされる予定のファイルが空白だけの差分か?をチェックするスクリプトを先生(ChatGPT4o)に作ってもらうなど。
細かめに仕様を提示すると、わりときっちり一発で期待動作するスクリプトを作ってくれた。

#CNDS2024

やることが多すぎだったので、ちょっとだけな感じでオンライン参加。
https://x.com/search?q=%23CNDS2024 %40sogaoh&src=typed_query&f=live

年次のRI・SP購入

6月の恒例行事。それほど高額ではないこともあるが、そろそろ「怖い・・・」と思いながらやることがなくなっていた。とはいえ慎重に。
RDSのRIはあまり間違える要素なく見積を作り、作りながらコスト削減施策を思いつくなど。今年は All Upfront でいく。年一で使えるクレジットが、EC2 Saving Plans で消費し切るので。こちらは昨年同様の Partial Upfront にする、というスタイル。

RDS の RI を All Upfront でいくパターン1と Partial Upfront でいくパターン2とを案として提示した。

既存インフラ設定のIaC化 (import)

とあるインフラの IaC 化に取り掛かった。まずは network 周りを。
AWS なので vpc 、なのだが、難易度高くはないものの、徐々に「物量多いな・・・」と感じた。
vpc -> igw -> nat_gw・eip ここあたりまでは粛々と進んだが、
route_table と subnet が、正直、「めんどっ」となりました。複数ゾーン x 3層構造ってなってるので。。

これ、module で取り込みできないかなあ、と覚えしか。
次回、使う module を指定してもらったので、ちょっとやってみる予定。

その他

  • 技術書典で駆け込み購入

  • DevToys 入れた

  • 住民票入手にて

https://x.com/sogaoh/status/1800328357646889226

sogaohsogaoh

既存インフラ設定のIaC化 (import) で "module ベースの module" を import しようと Try したが諦めた。Go力不足...

sogaohsogaoh

6/17(月) - 23(日)

デプロイの移行

データセンターのサーバーを経由してたのを CodePipeline に切り替える、っていうやつの完遂

srest セットアップ

https://docs.srest.io/

リージョンに Serverless Application Repository が必要だった

ElastiCache for Redis に接続する

redis-cli のオプション --tls を入れてなくて、なんで繋がらない??をやってしまった
接続情報も rediss:// にしなきゃなんですね(sidekiq)

土曜、カンファレンス多すぎ

  • phpconfuk

  • kotlinfest

  • dbkan

  • scrumosaka

  • honoconf

  • AWSSummit のオンデマンド配信・資料をピックアップしながら

HAProxy + keepalived での冗長化

ECS で Laravel の worker を動かすファーストケース(of me)

sogaohsogaoh

6/24(月) - 30(日)

とあるサービスクローズの準備

地獄の始まりになるとは・・・
DNS をちゃっ、と切り替えて終わりだろうと思ってた CloudFront 切り替えを準備した。

Road to SRE NEXT @仙台

https://sre-lounge.connpass.com/event/320049/

実は波乱の幕開けだった

牛タンは昼に、ずんだシェイクは3回くらい drink した
https://www.instagram.com/p/C8yKVA2yFMX/

いい天気でした
https://www.instagram.com/p/C8yQCTTydUd/

このスクラップは5ヶ月前にクローズされました