Posts for: #2022/05

他社のお仕事半分、自社のお仕事半分

なんか22時ぐらいから寝たり起きたりを繰り返して7時に起きた。午前中はお手伝い先のドキュメント作成やレビューを行い、午後から自社の事務手続きなどをしていた。

法人決算の手続き

決算そのものはすでに完了しているのだけど、申告手続きをまだ終えていない。本気を出せば1日で終わるのがわかっているのでだらだら先延ばししていた。今回は地方自治体への納税手続きを eltax でやってみることに決めていた。先延ばしにしていた理由の1つとして eltax が土日祝は運用していない。平日は24時まで運用しているので、平日にお仕事を終えてからやればいいのだけど、なんか気乗りしなくて先送りしていた。神戸市に対して法人市民税を、兵庫県に対して法人県民税、法人事業税、特別法人事業税の申告を行う。eltax の画面は実際の書類様式とまったく同じ画面で入力するため、書類作成を知っている人には何も難しくない。前回の書類をみながら必要な入力欄に今回の値を入力していくだけの作業。作成後にプリンターで印刷すれば書類も手に入る。今回の納税手続きは eltax で初めて触る画面を操作したのだけど、2時間もあれば2つの申告手続きを終えられた。1度誤った内容で申告したので再申告もした。後優先になってくれることを願う。言うても簡単ではある。昨年まではこれらの申告のために電車で3駅離れた庁舎へ出向いていたが、今後はそうする必要はなさそうだ。一方で申告手続きを含めてもオフィスからの庁舎の往復に2時間もかからないのも事実ではあるが。

jjug の発表資料作り

Ševarika™ というデザイナーさんに スライドマスターの作成 を4月30日に依頼して5月19日に納品された。納期は1ヶ月程度を見込んでいたのに早く仕上げてくれた。こちらから急かしたわけではない。ちょうど JJUG CCC 2022 Spring の発表ビデオの提出期限が5月19日で間に合えばいいなぁぐらいの感覚で静観していて、ちょうど同じ時期に納品できそうだったので、jjug のスタッフさんに発表ビデオの提出期限を週末まで待ってもらうようにお願いしていた。私は自社のロゴをめちゃくちゃ気に入っているんだけど、同じデザイナーさんに作ってもらったスライドマスターのデザインもやはりめちゃくちゃ気に入っている。今後うちの会社が儲かってお金に余裕ができたら Ševarika™ さんにもっと色んなものをデザインしてもらおうと思うようになった。いつになるかはわからんが。

発表のコンテンツのアウトラインは八割ほどは事前に作っていた。新しいスライドデザインに配置したり、レイアウトを調整したり、デザインとのバランスを考えたりすることに主に時間を費やした。20時ぐらいから始めて2時ぐらいまでやっていた。ここ1-2週間、19時以降にオフィスで居残り作業みたいなことをやってなくて、なんかだらだらしていた。コンテキストスイッチを切り替えてやるぞとなったら集中して6時間ほど作業できた。それで気付いたんだけど、私は毎日大量のお仕事をすることがあまり得意ではない。平均ぐらいに毎日コツコツ積み重ねるのはできるけど、それ以上のパフォーマンスを出す爆発力にはメリハリがいる。いまは構想1ヶ月、実装2日みたいな作業のやり方になる。そのうちの2日は18時間/日ぐらい没頭しているみたいな。昔からそうだったのか、加齢で体力が落ちたせいかわからないけど、メリハリのある働き方が自分には向いていることを再認識した。

ドキュメントをちゃんと書く

20時に寝て22時に起きて、それから作業して3時に寝て6時に起きた。

インフラのドキュメント作成

今日からインフラのドキュメント作成に着手した。4月から1ヶ月以上に渡って インフラエンジニア のようなお仕事をしていた。具体的には新しい環境のインフラ構築、ならびに既存インフラのリファクタリングというよりは再構築といった作業をしていた。約1ヶ月で大きなインフラのタスクは完了して、その後もこれまで cdk 管理していなかったインフラリソースの管理なども含め、より再現可能な管理されたインフラとなるように改善してきた。それもだいたい終えてきたので、そろそろ他の開発者にも引き継げるようにドキュメントを書くことにした。私以外は若い開発者が多いせいか、cdk/cf の知識というよりもインフラそのもののやネットワークの知識が少ないメンバーが多い。そういった運用経験の浅い開発者にも適切な教育が行えるよう、ドキュメントやチュートリアルなどを書いていく。数日ぐらいかけてしっかり書いてから勉強会を開催する。それをもって引き継ぎしていくかなぁ。

私が前任者から引き継いだ README に helm の説明が次のように書かれてた。

まず helm がわかってない人はググってくること。

こんな README を私はみたことなくて書いている人が訳分からず作業しているんだなという印象を受けた。私が書くドキュメントには cdk とは何か?から説明している。もちろん aws のドキュメントをすべて読めばよいのだが、それはコストがかかる。私の経験と私が理解した cdk の概念を簡潔に、なるべく自分たちの業務にとって大事なことを要約して書くことに意義があると私は考えている。README にググれみたいなことを書いて誰もなにも言わない開発文化を改善していきたい。

cdk のビルドが難しい話し

0時に寝て6時半に起きた。暑くなってきたせいかバテ気味。水曜日は本番リリースの日。3つほど本場環境のインフラ移行作業があったので社員さんの実作業をリモートから指示しながらサポートしていた。私に本番環境の操作権限があれば、この工数はほぼ半分に削減できる。

cdk のパッチ検証

先日 cdk による eks クラスターの helm 管理の調査中断 について書いた。バグっているから適切な設定が反映されないという話しで一時中断していたんだけど、そのときにクラスメソッドの担当者さんとも相談していた。そしたら、その担当者さんが問題を修正して pr を送ってくれた。感謝。

そこまでやってくれると思ってなかったのですごいなぁと感心しながら、せっかくなのでパッチを当てた cdk で検証してみようと、Contributing to the AWS Cloud Development Kit をみながらローカルでのビルドを試みた。ビルド自体はできたんだけど、パッケージを作るのがうまくいかなくて、cdk はツール自体が大きいので実行時間がかかる。だいたいビルドやパッケージングのそれぞれに20-30分ぐらいかかる。エラーの原因がよく分からなくて面倒になって断念した。私が javascript のパッケージングに疎いせいもあると思うけど、ドキュメントに書いてある通りにうまくいかなかったので早々に諦めた。

datadog のログアーカイブ

1時に寝て5時半に起きた。

datadog のログアーカイブ

datadog には Log Archives という機能があって、datadog 経由でログをどこかのストレージに永続化できる。datadog プラットフォーム上では設定した期間内のログしか検索できず、おそらく料金の予算にあわせて期間を設定して、それが過ぎたら消えていくのだと思う。aws なら s3 に datadog に連携されたログをパイプライン処理してそのまま永続化できる。そのための s3 バケットの作成、s3 バケットへの datadog からのアクセス権限ロールの設定、datadog の aws インテグレーションの設定などをした。ドキュメントを読みながら1日あれば設定できたので難しくはない。もう cdk の設定にも慣れた感じで必要な権限を cdk の Stack としてコードで管理できるようにした。保守もばっちり。永続化されるログは gzip 圧縮されて時系列に s3 に永続化されるみたい。

helm 調査の一時中断

0時に寝て6時半に起きた。

eks クラスターの helm 管理の調査

先週から調査 していて、調査結果から kubectlRoleArn を生成してデプロイを実行してみた。以前発生していた権限エラーは解消したものの、lambda 内からの kubectl と k8s クラスターの認証に失敗する。もう1つ kubectlLambdaRole という設定もあるので、ここに system:masters 権限をもつ iam ロールを設定してみたものの、エラー結果は変わらない。お手上げかなと思ってたら aws-eks: Cluster.FromClusterAttributes ignores KubectlLambdaRole #20008 という issue があって、まさにいま起こっている現象と合致するのでこのせいかもしれない。cdk のバグならそれが解消しないと検証を進められないため、この調査は一旦打ち切って、cdk のバグが修正されて新しいバージョンがリリースされてから再試行することに決めた。

backlog のいろいろ

たまたまタイムラインでスライドをみかけて、backlog の開発をしている方の記事をみつけた。scala と play framework で実装されているらしい。もう10年以上開発しているプロダクトなのかな。それ自体はすごいなぁと感心しながらスライドを眺めてた。

オフラインのもくもく会

6時半に起きて漫画読んで8時に起きた。

ワーケーションの打ち合わせ

参加者で ワーケーションのリトライ の最終確認ならびに共有事項の打ち合わせをした。今回は3回目のワクチン接種をし終えたばかりだし、オミクロン株も一応は収束したみたいな雰囲気になっているので延期することはないはず。旅程の確認を一通りしつつ、少し雑談していた。今後の開発合宿のような取り組みをコミュニティでやるのか、会社でやるのかはまだわからないけど、そういう取り組みも非日常の刺激を受ける機会だったり、普段やらないことでなにか新しい価値を見い出す行動だったりにつなげられればと考えている。今回はそのためのリハーサルなのでたくさん失敗しつつノウハウを溜めていきたい。

もくもく会

【三宮.dev】もくもく会 に参加した。オフライン開催で参加者は6人。他者と雑談しながら作業するというのを、久しぶりにやった感じだった。私は jjug ccc 2022 spring の資料作りをしていた。骨子レベルの内容はだいたいできたので後はスライド資料を作り込むだけ。今回はビデオ撮影を事前しないといけないのが初めての試み。でも、当日は質疑応答だけでよいから楽になってこれはこれで有りだとは思う。終わってからワーケーションの参加者3人で軽く飲みに行ってきた。勉強会へ行って飲み会でわいわいやって帰るみたいな昔の勉強会の雰囲気に戻った感じがして懐かしかった。地域コミュニティはこういうつながりもあっていいと思う。バックエンド周りのバッチ処理の最適化で話題になったときに「私を雇え、値段は高いけど」と宣伝したりもしてた。自分の会社をやっていると、こういうノリでお仕事がきてもまぁいっかみたいな気持ちになれるからそれも含めて楽しい。

漫画ばかり読んでる

漫画を読みながら寝て5時半に起きて漫画読んで8時に起きた。今日はほとんど漫画読んでた。

ストレッチ

今週は漫画ばかり読んでいたせいか、体が硬くなってしまっていた。今日の開脚幅は開始前153cmで、ストレッチ後158cmだった。今週は雨降りの日が多くて徒歩通勤する機会が多かった。普段よりは運動したような気はしていたけど、ストレッチの数値はよくなかった。疲労度は腰がもっとも蓄積していて、肩甲骨周りも相変わらず硬い。ベッドで漫画ばかり読んでたから不健康になってしまったのかもしれない。

神之塔

先週ぐらいから 神之塔 を読み始めた。少し前 (と言っても2年前) に アニメ化 されていて、当時たまたまみたらおもしろかったので印象に残っていた。一言でこの作品を表すと「基本的に訳がわからないのだけど、おもしろい」といったところ。私は普段 LINE を使っていないので LINE と密接なアプリやプラットフォームも使っていない。神之塔は LINE マンガでしか読めないみたいなのでこの漫画を読むために仕方なくインストールした。通常は1日1話しか無料で読めないけど、なにかのキャンペーン期間中は100話ぐらい無料で読めたりする。数日前からキャンペーン期間になっているので読んでいて疲れたら寝て起きたら読むみたいな生活をしている。300話まで読んだ。50話から100話ぐらいで1つのエピソードが終わるのでテンポもいい。おもしろい。

マーケティング施策の取り組み開始

23時に寝て1時に起きて漫画を読んで6時に起きて漫画読んでた。

隔週の雑談

顧問のはらさんと隔週の打ち合わせ。今日の議題は 先日作成した第4期の展望 について雑談した。あまり深く考えずに起業して初期の頃に作った10ヶ年計画に対してわりとその通りに推移している。来期ぐらいで業務委託のお仕事は終える予定。来期か再来期ぐらいからプロダクト開発の期間に入る。自社プロダクトを作る前から徐々にマーケティングもしていかないといけない。そのため、今期からマーケティング施策を少しずつ増やしていて、まずは会社の信頼度を上げるところからやっていく。売上を上げるためのマーケティングではなく信頼度を上げるためのマーケティングを行う。金森氏が言うようにどんなに優れたプロダクトを作ったとしても売れるかどうかは別問題だ。

eks クラスターの helm 管理の調査

昨日の続き。権限設定がなんもわからんみたいな様相になったので調査のやり方を変えることにした。検証用の eks クラスターを cdk から新規に作成して helm をインストールするときのリソースや権限設定がどうなるのかを調査した。lambda 関数が5個ぐらい、ロールは10個ぐらい作成された。lambda の生成に時間がかかるのか?新規作成するのに25分、削除するときは30分ぐらいかかった。rds もそうだけど、eks のような複雑なインフラを cdk で管理すると実行するのにけっこう時間がかかる。設定が難しくなければ別によいけど、eks のような権限やリソースの設定が複雑なインフラはトライ&エラーで何度も実行する必要があるから、こういうものは cdk で管理するのには向かないインフラだと言えると思う。一定の設定のプラクティスが溜まるまでは eks は cdk で管理しない方がよいかもしれない。

CreationRole というのが設定されて trust relationships に次のような設定が追加される。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::${accountId}:root"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

このロールに含まれるカスタムポリシーには次のような設定がある。たぶんこんな感じのロールを新規に作成して kubectlRoleArn として指定してやればいいんじゃないかと思う。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": "iam:PassRole",
            "Resource": "arn:aws:iam::${accountId}:role/${EksClusterIamRole}",
            "Effect": "Allow"
        },
        {
            "Action": [
                "eks:CreateCluster",
                "eks:DescribeCluster",
                "eks:DescribeUpdate",
                "eks:DeleteCluster",
                "eks:UpdateClusterVersion",
                "eks:UpdateClusterConfig",
                "eks:CreateFargateProfile",
                "eks:TagResource",
                "eks:UntagResource"
            ],
            "Resource": [
                "arn:aws:eks:ap-northeast-1:${accountId}:cluster/tmp-test-eks-cluster-by-morimoto",
                "arn:aws:eks:ap-northeast-1:${accountId}:cluster/tmp-test-eks-cluster-by-morimoto/*"
            ],
            "Effect": "Allow"
        },
        {
            "Action": [
                "eks:DescribeFargateProfile",
                "eks:DeleteFargateProfile"
            ],
            "Resource": "arn:aws:eks:ap-northeast-1:${accountId}:fargateprofile/tmp-test-eks-cluster-by-morimoto/*",
            "Effect": "Allow"
        },
        {
            "Action": [
                "iam:GetRole",
                "iam:listAttachedRolePolicies"
            ],
            "Resource": "*",
            "Effect": "Allow"
        },
        {
            "Action": "iam:CreateServiceLinkedRole",
            "Resource": "*",
            "Effect": "Allow"
        },
        {
            "Action": [
                "ec2:DescribeInstances",
                "ec2:DescribeNetworkInterfaces",
                "ec2:DescribeSecurityGroups",
                "ec2:DescribeSubnets",
                "ec2:DescribeRouteTables",
                "ec2:DescribeDhcpOptions",
                "ec2:DescribeVpcs"
            ],
            "Resource": "*",
            "Effect": "Allow"
        }
    ]
}

cdk と eks と lambda と iam がわからん

0時に寝て3時に起きて漫画読んで5時に寝て8時に起きた。

eks クラスターの helm 管理

昨日の続き。helm のよさはわかったので dapr を helm で管理しようとしている。その際になるべく cdk で管理できた方がよい。eks は cdk の外部で管理しているのだけど、既存の eks クラスターをインポートする機能も提供されていることに気付いた。

それなら既存の eks クラスターをインポートして cdk で helm だけ管理しようと思って始めたものの、これがとても難しくて丸1日作業してわからなかった。設定項目は少ないけど、権限の問題で動かない。1回あたりの実行に15分ぐらいかかるのでトライ&エラーするのもなかなか大変。

kubectlRoleArn - the ARN of an IAM role mapped to the system:masters RBAC role. If the cluster you are importing was created using the AWS CDK, the CloudFormation stack has an output that includes an IAM role that can be used. Otherwise, you can create an IAM role and map it to system:masters manually. The trust policy of this role should include the the arn:aws::iam::${accountId}:root principal in order to allow the execution role of the kubectl resource to assume it.

kubectlRoleArn の設定をどうするかだけなんだが、この説明でどう設定していいか理解できなかった。cdk で新規に eks クラスターを作成するなら自動で作ってくれるけど、既存の eks クラスターの場合は自分で設定しないといけない。ややこしいことに cdk は kubectl の実行を lambda 経由で実行するので eks と lambda と iam のロールやポリシーを適切に設定する必要がある。lambda にどういう権限を設定するのが適切なのかは本当に難しい。サーバーレスはよいアイディアだとは思うけど、lambda は難し過ぎて私はなるべく使いたくないサービスではある。結局わからなくて翌日に持ち越し。

helm を調べた

1時に寝て6時半に起きて8時に起きた。前日は資料づくりで遅くまでオフィスに残っていたせいか、なんか寝坊した。

helm 調査

k8s 上の datadog-agenthelm で管理されていて、あるバージョンから dapr も helm 管理できる ようになった。dapr は cli からもインストールできるけど、helm のことをよくわかってなかったので調べることにした。そんなたくさん記事をみたわけではないけど、いくつか記事を読んで quora のやり取りが一番よかった。

ざっくりまとめるとこうかな。

  • helm は oss 且つ cncf の公式プロジェクトだからまぁ安心
  • helm はサードパーティのパッケージのインストールや設定の利便性を高める
    • k8s はテンプレート機能が弱いので共通設定と特定環境向けの設定を管理するのがあまり得意ではない
    • セキュリティを考慮した k8s 設定は自分でやるよりコミュニティに任せた方がよい場合もある
    • パッケージなのでバージョン管理は得意
  • helm は k8s 向けのパッケージマネージャとレポジトリマネージャーとマーケットプレイスを組み合わせたみたいなもの

k8s 上でサードパーティのパッケージを自分で設定したい特別な理由がない限りは helm を使うのがよさそうという結論になった。

スライドデザインのレビュー

1時に寝て6時半に起きた。

スライドマスターのデザインレビュー

はらさんと一緒にレビューした。私とは全然視点が違うので参考になった。自分が得意ではない分野の相談相手がいると本当に助かる。いくつか取り上げる。あれこれ、私が気になったところもヒアリングしながら意見をもらった。あとでデザイナーさんにフィードバックする。

  • 外国人が作ると文字のレイアウトが日本語と異なることを考慮する必要がある
    • 日本語には y や q のような下にはみ出る文字がない
  • スライド全体の色使いで目立たせるときの注目色を作ってもらった方がよい
  • インジケーターのようなデザインがあると聴衆がいま発表のどの辺りかわかって嬉しい
  • 会社の自己主張が強過ぎない方がよさそう