# プロジェクト概要
## 目的
社内で使うためのAPIの開発と保守運用
## 使用した技術や開発環境
AWS・Terraform・BigQuery・Datadog・Docker・Python
# やったこと
- APIGWやLambdaなどを使ったサーバレスなAPIや、AWS ECSを使ったAPIの作成。
- 設計からLambdaのTerraformの開発、locustを使った性能テスト、運用保守までを担当。
# 苦労したこと
- WAFの設定でIPを制限しなければいけない部分を全員許可にしたことがあり、世界中のいたるところからアクセスがあった時は本当に焦ったことがあります、、、。
その時は開発環境でしたので事なきを得ましたが、それ以降は本当に気を付けるようにしています。
- Terraformで複数リソースを作る際に最初はcountを使って実装をしていましたが、後々特定のリソースだけを削除しようとした際に意図していない部分が更新されてしまうことがありました。for_eachを使って実装をしていれば特定のリソースだけを削除しても大丈夫だったのですが、countを使っていたことが良くありませんでした。その時はmoved blockを使ってリファクタリングを進めましたが、以降はベストプラクティスをちゃんと確認してから進めています。
- locustの性能テストはリクエストを送って意図したレスポンスが返ってくることを確認するものでしたが、HTTPリクエスト時にchunkedを使ってリクエストする必要があり、ただヘッダーに指定するだけではうまく動作しませんでした。locustでchunkedを送る方法を調べても事例が出てこないので、自分で実装する必要がありました。そもそもchunkedについてよく知らなかったのでmozillaのHTTPリクエストのページを見て理解をして少しずつ試して、最終的にはchunkedを使ったHTTPリクエストを実装することができました。
- 性能テストをする際に、どのライブラリを使うか調査してくださいというタスクを振られました。
候補としてはJavaのKarateかPythonのlocustが挙げられていて、基準は自分で考えてくださいというタスクでしたので、gitのstar数やライブラリのdownload数、coverage reportは出力できるか、実際に書いた感じはどうかなど様々な基準で調査をした結果、locustに決めました。