ふり返る暇なんて無いね

日々のメモ書きをつらつらと。メインブログに書くほどでもないことを流してます

Google Cloud認定 Professional Cloud Architect合格してた

10/27の午前中にGoogle CloudのProfessional Cloud Architectを受けてきました。

Professional Cloud Architect • 勝史 鈴木 • Google Cloud

スッと試験終了後の画面に合格と表示されてたのでホントに受かってるのか不安でしたが、メールでの通知もあったし、Accredibleにも登録されてるので、これは間違いなく合格してるでしょう。

時間の関係上、実質5日間しか勉強してなく、詰め込みでやったのであんまり達成感ないです。AWSと違ってスコアでないのもどれくらい理解度が進んでたのかが分からないのが難点ですね。

Professional Cloud Developerを今年中に受ける予定なので、こっちはちゃんと身になるように勉強していきたいです。

t3系インスタンスのスペックについて

特にオチはないメモです。

インスタンスタイプ - Amazon EC2 | AWS

基本的にはメモリとCPUクレジットが1サイズ上げると倍になっていく。vCPU数はt3.largeまでは2でそれ以降倍になっていく。

ちょっとした作業スペースとして使うならメモリ0.5GiBのt3.nanoで十分。簡単なwebアプリとか動かすならメモリ2GiBのt3.smallで余裕。

そもそも2vCPUしかないのでCPUを使ったバリバリとして並列処理には向かない

build-in commandのmanが引けなくて困った

zshの話です。

historyコマンドのmanpageを引きたくて以下のようにコマンドを打ったところ、

man history

builtinのmanpageが表示されて、そうじゃないんだよなあ。。。ってなってました。 See the built-in command description in the appropriate shell manual page. 言われても。。。。

BUILTIN(1)                  General Commands Manual                 BUILTIN(1)

NAME
     builtin, !, %, ., :, @, [, {, }, alias, alloc, bg, bind, bindkey, break,
     breaksw, builtins, case, cd, chdir, command, complete, continue, default,
     dirs, do, done, echo, echotc, elif, else, end, endif, endsw, esac, eval,
     exec, exit, export, false, fc, fg, filetest, fi, for, foreach, getopts,
     glob, goto, hash, hashstat, history, hup, if, jobid, jobs, kill, limit,
     local, log, login, logout, ls-F, nice, nohup, notify, onintr, popd,
     printenv, printf, pushd, pwd, read, readonly, rehash, repeat, return,
     sched, set, setenv, settc, setty, setvar, shift, source, stop, suspend,
     switch, telltc, test, then, time, times, trap, true, type, ulimit, umask,
     unalias, uncomplete, unhash, unlimit, unset, unsetenv, until, wait,
     where, which, while – shell built-in commands

SYNOPSIS
     See the built-in command description in the appropriate shell manual
     page.

zshでbuilt-in commandsを調べたいときは以下のようにするのが正しいです。

man zshbuiltins

ちなみに fc -lhistory は同じだそうです。

       history
              Same as fc -l.

人生に疲れたので熱海で温泉入ってきた

人生に疲れたので温泉に入りに来ました。ネットで調べて、ここが良さそうなので前日にパッと決めて新幹線に乗って熱海まで行きました。

atamibayresort.com

朝一で行ったので、朝ご飯食べられそうなところがなかったのですが、到着する直前でやってる店を見つけました。第八富士丸食堂に入って、海鮮丼いただきました。おいしゅういただきました。

tabelog.com

腹ごしらえを終えて、いざ温泉。オーシャンビューの温泉、露天風呂、サウナ、休憩椅子。どれも最高でした。朝一というのもあって、すいててさらに最高でした。 ちなみに

atamibayresort.com

休憩スペースも広くて、電源もあるのでワーケーションがはかどりました。

夕方まで一通り仕事したあと、海岸を散歩してました。こういう景色良いですよね。熱海は駅まで坂が多くて、坂の町の雰囲気とかも好きです(写真なし)

当日まで知らなかったのですが、この日は熱海で花火大会があって、軒並みお店が満員でやっと入れたお店がこちらでした。自分が入った後にすぐ満員になってたのでタイミングが良かったです。 nbsz100.gorp.jp

何も事前情報なくふらっと入ったお店でしたが、これが当たりでした。魚に牡蠣に日本酒に大満足しました。また来る候補入りです。

花火見ようかと思ったんですが、人が多くてちょっとアレなので、混雑する前に新幹線で帰りました。良い旅でした!

今日もまたVSCodeのタイムラインに救われてしまった

VSCodeにはタイムラインという履歴管理機能?があってこれが便利。gitの履歴とは別にファイルの変更履歴を取っていて、うっかりcommit せずに消してしまった箇所を復活させたりするのに役立ちます。

デフォルトだと左下あたりにこっそりいるはず。

タイムラインの表示はこんな感じ。ここで変更を選択するとdiff形式でエディター画面に表示されます。

今日もタイムラインに救われました

terraformでCloudSQLのインスタンス作成に失敗した

こんなエラーが出てインスタンス作成に失敗した。

╷
│ Error: Error, failed to create instance because the network doesn't have at least 1 private services connection. Please see https://cloud.google.com/sql/docs/mysql/private-ip#network_requirements for how to create this connection.
│ 
│   with google_sql_database_instance.primary,
│   on database.tf line 1, in resource "google_sql_database_instance" "primary":
│    1: resource "google_sql_database_instance" "primary" {
│ 
╵

terraformのコードとしてはこれ。原因としては、private_networkの指定が間違っていた。

resource "google_sql_database_instance" "primary" {
  name             = var.database.primary.name
  project          = var.project_id
  region           = var.database.primary.location
  database_version = var.database.primary.version

  settings {
    tier              = var.database.primary.tier
    availability_type = var.database.primary.availability_type
    disk_size         = var.database.primary.disk_size
    ip_configuration {
      ipv4_enabled    = false
      private_network = var.database.private_network  # <= これ
    }
    backup_configuration {
      enabled            = true
      binary_log_enabled = true
    }
  }
  deletion_protection = "true"
}

エラーメッセージにネットワーク名が出てればすぐ原因にたどり着けたのに。。。無駄な時間をかけてしまった。

会社辞めました

近況報告です。

5/1から新しい会社に勤めることになります。職種は一応SREです。

奇特な方はいらっしゃらないとは思いますが、様式美なので置いておきます。

www.amazon.jp

有給休暇消化期間ですが、案外忙しいです。。。。。

確定申告でふるさと納税の記述が楽になるぽい

自分はfreeeで確定申告の作業をしているわけですが、ふるさと納税の箇所でこんな記述を見つけてしまった。

特定事業者のポータルサイトにてダウンロードした寄付金控除に関する証明書(XML形式)から寄付金の内容をまとめて取り込むことができます。

f:id:masasuz:20220226231900p:plain

なるほど、いちいち自分で転機しなくても、ポータルサイトで証明書を発行すればインポートできるみたいですね。

自分は楽天使ってるので早速発行申請してみた。3~6営業日かかるらしいので、早めにやっておかないと間に合わない可能性もありますね。来年は気をつけないと。

f:id:masasuz:20220226232300p:plain

アプリケーションをメンテナンスモードにする方法について考えるメモ

前提

AWS上に構築されたwebサービス

構成要素

  • ALB
  • ECS上でうごいているアプリケーション
  • CloudWatch Eventのcronで起動するECSスケジュールタスク
  • RDSなどのデータストア

現状

terrafromのmaintainance_mode変数を見てtrueであれば、ALBで503を返すようにして、スケジュールタスクを止めるように記述している。

問題

  • メンテナンス入れるたびにterrafrom applyをする必要がある
  • 管理リソースが多いためterraform applyに時間がかかり、時間通りにメンテナンスの開始終了ができない

インフラ側で制御する

LambdaでAWSリソースの設定変更を行う

  • 既存のやり方と同じ、設定方法がLambdaに変わっただけ
  • terrafromのstateに一時的に差分ができてしまう。
    • メンテナンス中にAWSリソースの変更がしにくい
  • 既存の方法と同じ

アプリケーション側で制御する

データベースの値を参照する

  • DB(もしくはRedis等)に入っている値を参照してメンテナンスモードを切り替える
  • DBの値を参照するので即時でメンテナンスに入れることができる
  • メンテナンス時にRDSやElastiCacheを変更する際バッティングしてしまう

設定ファイルの値を参照する

  • 設定ファイルにメンテナンス時間を記述しておき、アプリケーションはその値を参照してメンテナンスであるかを判断する
  • メンテナンス開始の明示的な設定変更が不要であらかじめ設定しておける。
  • モノリスなら問題がないが、複数サービス存在する場合は複数箇所に設定を入れる必要がある
    • 次善策としてS3に設定を置いておき、それを参照することで設定値は1つにできる。

メンテナンスサービスの値を参照する

  • 現在メンテナンス中なのかどうかを返すAPIサービスを作る
    • 設定は直書きでも、S3上のファイルでも良い
    • Parameter Storeでもいいか
  • メンテナンスサービスがキャッシュ、プロキシ的に動くので設定が書かれてるAWSリソースへのリクエスト回数を減らすことができる
  • アプリケーションはメンテナンスサービスが返す値をもとにメンテナンスかどうかを判断する。

直接S3やParameterStoreを参照すればいいのでは?

  • メンテナンスサービスを設置せずに、各アプリケーションが直接設定が書いてあるリソースにアクセスする
  • リクエスト回数が極端に多くなければこれでも

まとまらない

1つの方法が良いというわけではなく、メンテナンス箇所がインフラなのかアプリなのかによって方法を組み合わせなければいけないこともあると思います。ECS サービスの変更であれば、アプリケーションのECSタスクが死んでしまうのでアプリをメンテナンスモードにしても無駄だったりします。そういう場合はインフラ側でメンテに入れる必要があったりします。

適材適所でいいのではないでしょうか?

全然他社事例を調べずに書いてるので、他になにかいい方法があったら追記します。