tag:crieit.net,2005:https://crieit.net/tags/CloudRun/feed 「CloudRun」の記事 - Crieit Crieitでタグ「CloudRun」に投稿された最近の記事 2023-08-24T22:27:40+09:00 https://crieit.net/tags/CloudRun/feed tag:crieit.net,2005:PublicArticle/18557 2023-08-24T22:27:40+09:00 2023-08-24T22:27:40+09:00 https://crieit.net/posts/Next-js-Cloud-Run-The-request-failed-because-either-the-HTTP-response-was-malformed-or-connection-to-the-instance-had-an-error Next.js+Cloud RunでThe request failed because either the HTTP response was malformed or connection to the instance had an errorがでる <p>Next.jsを使って構築したサービスをCloud Runで動かしていると、ある時から503エラーが出るようになった。エラーメッセージは <code>The request failed because either the HTTP response was malformed or connection to the instance had an error</code></p> <p>利用者さんによるととにかくエラーが頻発するらしい。</p> <p>OpenAIのAPIを使っていたのでもしかしたらそれかも…と思ったが、どうもそうでない場合もエラーが出たり、色んなところが重くなったりと、変な感じだった。</p> <p>一応Cloud Runのエラーログにドキュメントへの誘導があるので見てみたが分からなかった。</p> <p>どうしてもわからないのでとにかく解決したい一心でひたすらログを追ってみることにした。するとなんとなく原因がわかってきた。</p> だら@Crieit開発者 tag:crieit.net,2005:PublicArticle/18166 2022-04-11T23:43:19+09:00 2022-04-15T16:49:25+09:00 https://crieit.net/posts/Flutter-62543e877f391 Flutter用問い合わせフォームウィジェット&サービスを作った <p>Flutter用の問い合わせフォームのウィジェットを簡単に設置できるパッケージ及び連携サービス Contact Nite を作りました。</p> <p><a href="https://crieit.now.sh/upload_images/8c23e18a7a344fca6bd592674e642b446252e63476ec0.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/8c23e18a7a344fca6bd592674e642b446252e63476ec0.png?mw=700" alt="card.png" /></a></p> <p>上記画像のように簡単なコードを設置するだけで、サービス上で設定した項目通りの問い合わせフォームウィジェットを表示することができます。また、<br /> 送信された問い合わせはサービス上で確認することができるようになっています。</p> <p><a href="https://crieit.now.sh/upload_images/6e2af66c610d88bc766649f72032893a6252ee397f453.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/6e2af66c610d88bc766649f72032893a6252ee397f453.png?mw=700" alt="image.png" /></a></p> <p>サービス<br /> <a target="_blank" rel="nofollow noopener" href="https://contact-nite.com/ja">https://contact-nite.com/ja</a><br /> パッケージ<br /> <a target="_blank" rel="nofollow noopener" href="https://pub.dev/packages/contact_form">https://pub.dev/packages/contact_form</a></p> <p>無料プランもありますので気になる方は是非試してみてください。僕も自分のアプリに入れて試してみています。</p> <p>問い合わせが来るとメール及びSlack通知を行うことができます。そのうちサービス内で直接問い合わせ下ユーザーとやり取りができるようにしてみようと思っています。</p> <h2 id="技術的な話"><a href="#%E6%8A%80%E8%A1%93%E7%9A%84%E3%81%AA%E8%A9%B1">技術的な話</a></h2> <p>パッケージ自体は純粋なFlutterパッケージです。サービス側は今回 Next.js, PlanetScale, Cloud Run を利用しました。</p> <h3 id="PlanetScale"><a href="#PlanetScale">PlanetScale</a></h3> <p>丁度開発している途中で知った、MySQLサービスです。最近記事も書いたので良ければ見てみてください。</p> <p><a href="https://crieit.net/posts/MySQL-PlanetScale-Next-js-Prisma">サーバーレスMySQLのPlanetScaleをNext.js+Prismaで使ってみた</a><br /> <a href="https://crieit.net/posts/Prisma-PlanetScale">PrismaでPlanetScaleを使う時のエラーあれこれ</a></p> <p>ここ最近はずっとFirestoreを使ってサービスを作っていました。安くて容量が大きいとなるとこれくらいしかなかったためです。ところがPlanetScaleを知りそちらに乗り換えてみることにしました。とにかく容量が大きいというのが決め手です。本当はMySQLの方が好きなので僕にとっては嬉しいサービスです。</p> <p>まだリリースしたサービスで利用した経験が無いのでどうなるかわかりませんが、これから見ていこうと思っています。問題なければこれからの僕の定番になりそうです。</p> <h3 id="Next.js"><a href="#Next.js">Next.js</a></h3> <p>Next.jsで作っています。サーバー側もNext.jsのAPI Routesです。もうとにかく楽ちんですね、サーバーサイドとフロント側の連携とか、何も考えなくて良いというのは。仕事だと色々問題が出てくるのかもしれませんがとにかく個人で開発するものだと今はこれが楽すぎて他を考えられません。</p> <p>特に日本専用サービスとする必要もないためInternationalized Routingを使って日本語と英語の対応を行っています。</p> <h3 id="デプロイ"><a href="#%E3%83%87%E3%83%97%E3%83%AD%E3%82%A4">デプロイ</a></h3> <p>Cloud Runを利用しています。最近こればかり使っているので元々持っている資産的に楽になってきたため他を考えられません。といいつつPlanetScaleを使っているのでDBまわりで悩まなくてもいいしHerokuとかで良かったかもしれません。</p> <p>push時に連動もできるのですが、自動テストはGitHub Actionsでやったほうが超簡単なため、push→GitHub Actionsでテスト→Cloud Buildでビルド&Runにデプロイという流れをとっています。DBのマイグレーションもCloud Buildでビルドしたイメージを利用して自動化しています。</p> <p>テストはJestによるシンプルなAPIのテストと、Cypressを使ったE2Eテストを行っています。Cypressはあまり使ってないですがCypress Dashboardと連携して動画も見れたりするの面白いですね。</p> <h3 id="メール"><a href="#%E3%83%A1%E3%83%BC%E3%83%AB">メール</a></h3> <p>SendGridです。Dynamic Templatesむっちゃ楽ちんですね。SendGrid上でメールの本文を調整して簡単に送信できます。ごちゃごちゃプログラムやDB上にテンプレートを定義しなくていいので良いです。</p> <p>あとはメール受信のhookを利用して、メールも見ずにサービス上だけでやり取りできるようにもしたいなと思っています。なんかできるっぽいので。</p> <h2 id="Flutter側"><a href="#Flutter%E5%81%B4">Flutter側</a></h2> <h3 id="多言語化"><a href="#%E5%A4%9A%E8%A8%80%E8%AA%9E%E5%8C%96">多言語化</a></h3> <p>ハマりどころとして、多言語化が結構複雑でした。パッケージを作成する場合一緒に作成されたサンプルプロジェクトと連携して動作させるのですが、そのプロジェクト内だとうまくいくのに、別途他のアプリに組み込んでみたらちゃんと言語が反映されないという問題が発生したりして手こずりました。</p> <p>ちなみにFlutterはVS Code拡張Flutter Intlを使うことで簡単にローカライズできるのですが、それも使えたようです。</p> <h3 id="Freezed"><a href="#Freezed">Freezed</a></h3> <p>Freezed普通に使えたので使っています。</p> <h3 id="テスト"><a href="#%E3%83%86%E3%82%B9%E3%83%88">テスト</a></h3> <p>パッケージは公開ということもありGitHub Actionsでのテストが無料で放題なので、せっかくなので自動テストをいれてあります。</p> <h2 id="まとめ"><a href="#%E3%81%BE%E3%81%A8%E3%82%81">まとめ</a></h2> <p>小ネタですがサービスサイトの問い合わせフォームもWebではありますがContact Niteに送信して実現しています。</p> だら@Crieit開発者 tag:crieit.net,2005:PublicArticle/17836 2021-12-08T08:54:05+09:00 2021-12-08T08:55:11+09:00 https://crieit.net/posts/Cloud-Run-Next-js-NEXT-PUBLIC Cloud RunでNext.jsのNEXT_PUBLIC_の環境変数が有効にならない場合の対処 <p>Cloud RunはGitHub連携もできるため、Next.jsのアプリケーションもDockerfileを準備すれば簡単にデプロイを自動化できる。しかし、連携設定どおりにちゃちゃっと設定していっても、NEXT_PUBLIC_で始まるクライアント用の環境変数がうまく設定できない。Cloud Runの設定を行う際に環境変数を指定することができるのだが、それを設定していてもNEXT_PUBLIC_がついている環境変数だけが動かない。しかもAPIなどで使っている環境変数は問題なく動いている。</p> <h2 id="原因"><a href="#%E5%8E%9F%E5%9B%A0">原因</a></h2> <p>そもそもNEXT_PUBLIC_系の環境変数というのは、実行したタイミングで利用されるものではない。サーバー側で直接利用される場合はそのまま動くが、クライアント側はビルドした時に埋め込まれる仕様となっている。そのためCloud Runで実行した場合ではなく、Cloud Buildでビルドされるタイミングで環境変数が利用されるようにしておかなければならない。つまり、Cloud Build側に環境変数の設定が必要ということ。</p> <h2 id="Cloud Buildでの設定方法"><a href="#Cloud+Build%E3%81%A7%E3%81%AE%E8%A8%AD%E5%AE%9A%E6%96%B9%E6%B3%95">Cloud Buildでの設定方法</a></h2> だら@Crieit開発者