見出し画像

スタートアップのエンジニアってマジでなんでもできるんだなと思った ~2023ふり返り~

こんにちは、すずきです。
M-1とSASUKEが終わるといよいよ年の瀬なんだなぁって感じっすね。

ここ一年、月イチペースでnoteの更新をやってきたんですが、技術まわりやAWS認定資格の投稿ばかりで、開発業務の内容、チーム運用、働き方など、弊社の組織に関する内容を全く投稿できていませんでした。

個人的な話なんですが、2023年はこれまで主にやっていたフロントエンドやAIまわりだけでなく、インフラ(AWS)や新しい言語(Golang)などのいろんな領域に挑戦できました。この段階(シリーズA)の組織に所属していなかったら、未経験技術にここまで触れられることはなかったと思います。

アーリーステージのスタートアップに興味があるエンジニアにとって、領域問わずにいろんなことに挑戦できるのは大きな魅力だと思います。今年一年をふり返りながら、その魅力を伝えられればと思います。


業務でできたこと

AWSをメインで触ったり、TerraformやGolangを導入したりして、バックエンド・インフラ領域の知見を深めることができました。

インフラまわり(AWS)を初めて本格的に触った

2023はありがたいことに大手のお客さまからの引き合いとともに、セキュリティチェックシートの記載を求められることが増えました。今だから言えるのですが、とてもチェックの基準を満たしているとは言えず、手始めに外部の脆弱性診断に向けた対応を1~2ヶ月かけて行いました。

まず、インフラを構築したメンバーが既に不在、かつインフラに詳しい人が社内に誰もいないという状態だったので、インフラ構成の調査、セキュリティ周りの問題の洗い出しから行いました。特にコード化されていたわけでもなかったので、この調査の段階が本当に苦痛でした。基本的にGitHubでコード管理しているはずなのに、なぜかCodeCommitにも謎のリポジトリがあったときはビビりましたね。

こちらが対応した内容の一部です。

  • IAM整理:操作権限の切り分けができていなかったので、IAMグループを作成して適切なポリシーの付加を行いました。不要なIAMユーザーを削除し(アプリケーションやワークフロー内でのクレデンシャルの使用を避け、IAMロールで一時的に権限を付加するような形にしました。

  • リソース整理:本来プライベートサブネットにあるべきリソースがパブリックサブネットにあったり、冗長化のためのリソースが同じサブネットにあったりしてめちゃくちゃな状態だったので、適切なマルチAZ構成になるようにリソースを整理しました。

  • セキュリティグループ(SG)整理:1リソースへの複数SGのアタッチ、インバウンドルールにおけるポートやIPの全開放が散見されたので、インフラ構成を把握した上で適切なSGを関連付けるようにしました。

  • セキュリティ強化:API Gateway前のWAF導入、不正ログイン検知用のGuardDuty導入、リソース変更検知用のAWS Config導入、VPCフローログ設定、DB暗号化、マイクロサービス接続のHTTPS化、セッションマネージャーの使用によるSSHポートの不使用化、OpenID ConnectによるワークフローからのAWS接続などを行いました。

かなりいろんなサービスを触ることができましたね。

EC2/IAM/VPC/VPC Endpoint/S3/ECS(Fargate)/ECR/Lambda/API Gateway/Route53/RDS/WAF/Config/GuardDuty/EventBridge/CloudTrail/CloudWatch/Amplify/Cognito/CodeCommit/CodeBuild/CodePipeline/Cost Explorer/Budgets/SNS/Systems Manager/SageMaker/Athena/Glue

TerraformでIaC化した

前述のセキュリティグループ(SG)の整理を行った際、ENIになぜがルールが重複するSGが複数アタッチされていたりするなど、既存構成を把握する段階がなかなか地獄でした。

コンソールからポチポチ手動で新しくSGを作り直しても、将来的にSGを整理することになったらまた同じ苦痛を味わうのが目に見えていたので、新規で作成するリソースについては思い切ってIaC化を行うことにしました。

CloudFormationかTerraformで迷ったのですが、GCPのリソース(Big Query)とかも今後導入する可能性がありそうだったので、クラウドサービスを問わないTerraformを選び、公式DocsとChatGPTで実装しました。

また、PR作成時にterraform planの結果がコメントに追加されるようにして、レビュワーのレビュー負荷を下げられるようにしました。

余談ですが、最近でたこちらの書籍がおすすめっす。

Golangで一部機能を完全リプレイスした

弊社のアプリケーションは一部マイクロサービス化されているのですが、以前はシェルスクリプト+ Express(Node.js)で書かれていました(開発エンジニアがすでにおらず技術選定の経緯は不明)。

利用ユーザーの増加とあわせて不具合が頻繁に発生するようになり、パフォーマンス、ECRコスト、保守コストなどの課題がでてきたためGolangですべてリプレイスしました。

Rustを使う案もあったのですが、採用広報的な観点も考えて、より多くのエンジニアが使用しているGolangの方を選びました。

リプレイスによって以下の改善ができました。

  • 高速実行:コンパイル型の言語を使用することで、シェルスクリプトのようなインタープリタ型の言語よりも高速に実行できるようになりました。また、今後、大量のデータ処理や高速な実行が求められることになったときに、対応しやすくなりました。

  • エラーハンドリング:シェルスクリプトよりもエラーハンドリングの実装が楽になりました。

  • AWS SDKの活用:AWS SDKを使用することで、シェルコマンドを実行するよりも高速で確実にAWSリソースの操作を行えるようになりました。

  • イメージサイズの削減:コンテナイメージにNode.jsランタイムを含める必要がなくなり、また、Golangを選択したことでマルチステージビルドの恩恵が得られるようになったので、約1.8 GBあったイメージサイズを約10 MBまで削減できました。これによって、ECSタスクの起動遅延を減らすことができました。

また、リポジトリ管理やCI/CD(イメージビルド、ECS Fargateへのデプロイ)についてもCode兄弟(CodeCommit, CodeBuild, CodePipeline)で行われていたのですが(こちらも採用経緯不明)、アプリケーションの主機能の方とあわせ、GitHubとGitHub Actionsに移行しました。

ワークフローからAWSへの認証でOpenID Connectをつかってアクセスキーを不使用化したり、前述のマルチステージビルドでDockerイメージを2.4 GBから10 MBに減らしたりするなど、DevOps的なところにも挑戦してみました。

個人的にやったこと

DDDやLangChainに個人的な関心があっていろいろ勉強していたんですが、その他にも新しい試みをしました。

海外技術ブログへの投稿

日本で働くことに不安しかないので、将来的な海外進出に向けてdev.toで発信を始めました。

Dockerの記事でTop 7 Posts of the Weekに選ばれたり、年間のTop Contributorにも選ばれて、ステッカーをいただきました。

使い道がわからん

AWSのキャッチアップ

AIまわりのサービスを知っておこうとMLSだけ取ろうと思っていたのですが、前述のインフラセキュリティ対応でAWSの各種サービスを触っていくうちに沼にハマり、結局全冠(12冠)取得しました。7ヶ月かかりました。

余談ですが、こちらの記事は「AWS 12冠」「AWS 全冠」などで調べると、ほぼ最初の方に表示されます。noteのSEOすごいね。

2023の反省と2024の目標

いろんな領域に手を広げすぎて、本業(AI研究)がおろそかになってしまったのが反省点っす..進捗自体はあるので、2024に形にしたいと思っています。

あと、2022に採用活動に力を入れすぎて結果が出なかった経験から、2023は燃え尽きてほぼ何もやらなかったも反省点すね。1日2~3通のスカウトとかはもうやりませんが(断言)、何かしらのコミュニティに参加していろんなエンジニアの話を聞いてみたいな〜と思っています。

おわりに

呪われてんのかな?ってレベルで私生活で災難が続いた中で(いいこともあったけど)、いろんな技術に触れて結果まで出せたのはスタートアップならではの自由さとChatGPTのおかげすね。

あと、2024こそはAWS re:Inventに参加してみたいすね。もちろん自腹参加なので、これから渡米費と参加費を溜めたいと思います。これもスタートアップならでは..


この記事が気に入ったらサポートをしてみませんか?