Giter Club home page Giter Club logo

lgtm-cat-api's Introduction

nekochans

Repository for task management(Source code is not included in this)

lgtm-cat-api's People

Contributors

keitakn avatar kobayashi-m42 avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar

lgtm-cat-api's Issues

Docker上でテストを実行する

Doneの定義

  • 表題の通り

補足情報

#20 の対応で MySQL のコンテナを Docker ネットワーク上で起動するように変更したため、Mac上でテストを実行するとエラーとなってしまう。
テストも Docker で実行できるように対応する。

ECS タスクの定義の管理を Terraform から lgtm-cat-api に移動する

Doneの定義

  • ECS タスクの定義が lgtm-cat-api で管理される状態となっていること

補足情報

ECS タスクの定義を Terraform で管理しているが、以下の課題があるためアプリケーション側に寄せる方針とした

  • ECR イメージタグを変更不可にしたことで、Terraform によるタスクの変更(環境変数の追加など)のあとに、アプリケーションの変更をせずにデプロイするとエラーになってしまう(ECR へのプッシュでエラーになる)
  • ECS タクスの変更はアプリケーションの変更に合わせて頻繁に発生するから、lgtm-cat-api に定義されていた方が開発しやすい
  • Terraform でタスクの定義を更新してもアプリケーションのデプロイを行わない場合、古いリビジョンのタスクの定義が利用され続ける可能性がある

ECSに移行する

Doneの定義

Lambda から ECS への移行に必要な対応がされていること

  • ヘルスチェックエンドポイントの作成
  • Docker イメージの作成
  • ミドルウェア Nginx の追加

CDの設定を行う

Doneの定義

  • main ブランチへのマージ時にステージング環境にデプロイされるようになっている事
  • GitTagが追加されたタイミングで本番環境にデプロイされるようになっている事

Cognitoのアクセストークンを検証する

Doneの定義

表題の通り

補足情報

#74 の対応で API Gateway のオーサライザーを利用できなくなるため、アプリケーションでアクセストークンの検証を行う必要が発生した。

テストにgo-cmpを導入する

Doneの定義

  • テストでreflect.DeepEqual の代わりに google/go-cmp を利用して構造体の比較が行われるようになっていること

補足情報

現時点では複雑な構造体を比較するケースは存在しないが、go-cmp を利用することでテスト結果のDiffが見やすくなるだけでも生産性が上がると考えられるため導入する。

net/http 内部のロガーを独自のロガーに変更する

Doneの定義

net/httpパッケージ内部のロガーが独自のロガーに変更され、JSON形式のログが出力されるように変更されていること

補足情報

参考: 『O’Reilly 実用Go言語』(p.286 net/httpのエラーログをカスタマイズ)

net/http パッケージのHTTPサーバーはコネクションを受け付けやハンドラーで予 エラーが発生した場合、標準エラー出力にエラーログを出力するようになっています。デフォルトでは logパッケージのロガーを用いてエラーログを出力します。

CIの設定を行う

Doneの定義

  • PR作成時にLinterの実行が行われるようになっている事
  • PR作成時にテストコードが実行されるようになっている事

エラーに関する変数の名前を変更

Doneの定義

  • 慣例にならってエラーに関する変数の名前が変更されていること
    • Error インターフェースを満たす Error 型として振る舞う型の名前は接尾語にErrorをつける
    • エラーの変数は Err から始める

ねこ画像判定APIで正常な画像と判定されるが画像アップロードAPIではエラーになってしまう現象の原因調査と修正

Doneの定義

  • 補足情報に記載してある画像(3.7MB)がアップロード出来ない原因が判明し必要に応じて修正用のissueが作成されている事(このissueの見積もり内で解決しそうであればこのissueで解決してもOK)

補足情報

以下の画像を利用。

Doneの定義にも書いてあるが https://github.com/nekochans/lgtm-cat-image-recognition に定義されているねこ画像判定APIだと問題ないが画像アップロードAPIの場合は500エラーを返してしまう。

mop

echo '{"image" : "'"$( base64 ./mop.png)"'", "imageExtension": ".png"}' | \
curl -v -X POST -H "Content-Type: application/json" \
-H "Authorization: Bearer 発行したアクセストークン" \
-d @- https://image-recognition-api.lgtmeow.com/cat-images/validation-results | jq
{
  "isAcceptableCatImage": true
}

同じAPI GatewayV2を使っているのでpayloadサイズの限界とは違うと思うので原因を調査したほうが良さそう。

またこの現象が解消する事でユーザーがより大きなサイズの画像をアップロード出来るようになるのでその意味でも解決する価値はそれなりにあると考えている。

API Gateway のタイムアウト時間内にLambdaの処理が終わらなかった場合レスポンスが503 Service Unavailable となる

Doneの定義

  • S3やRDSの接続に失敗した場合、アプリケーションで定義したエラーがレスポンスとして返ること
    ( context でタイムアウトを30秒以内に設定することで回避する)

補足情報

S3へのアップロードやRDSへの接続に失敗した場合、API Gateway のタイムアウト時間内にLambdaの処理が終わらないのでエラー 503 { "message": "Service Unavailable" }となる。
Lambda自体のタイムアウトは15分となっている。

なお、LambdaのタイムアウトをAPI Gatewayyより短くしLambdaがタイムアウトになった場合、500 { "message": "Internal Server Error" }になる。

テストを Table Driven Test に変更する

Doneの定義

表題の通り

補足情報

#69 の対応で Table Driven Test に変更可能なテストケースになったため。
Table Driven Test の方が可読性、保守性が高いと考えられるため テストケースを Table Driven Test に変更する。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.