Node.jsでApp Engine Flexible環境の料金を500ドル削減! 経験から学んだ教訓

2024-06-24

プログラミング: Google App Engine Flexible 環境の料金体系:500 ドルで学んだ教訓

前提条件

このチュートリアルを理解するには、以下の知識が必要です。

  • Node.js: JavaScript ランタイム環境
  • Google Cloud Platform (GCP): クラウド コンピューティング プラットフォーム
  • Google App Engine: GCP 上でアプリケーションをデプロイするためのプラットフォーム

状況

私は、Node.js で構築された Web アプリケーションApp Engine Flexible 環境 にデプロイしました。当初、無料枠 を利用していましたが、アプリケーションのトラフィックが増加するにつれて、料金が急増 しました。最終的に、500 ドル の請求書を受け取りました。

問題点

請求書を分析すると、以下の問題点が浮き彫りになりました。

  • インスタンス料金: アプリケーションのトラフィックが増加するにつれて、インスタンス の数が自動的にスケールアップされました。その結果、未使用のインスタンス に対しても料金が発生しました。
  • ネットワーク帯域幅: アプリケーションが大量のデータを送受信するため、ネットワーク帯域幅 の料金が高額になりました。
  • データベース: アプリケーションは Cloud SQL を使用しており、データベース使用量 に対しても料金が発生しました。

解決策

これらの問題を解決するために、以下の対策を講じました。

  • 自動スケーリング: アプリケーションのトラフィックに応じて インスタンス の数を自動的にスケーリングするように設定しました。これにより、未使用のインスタンスに支払う料金を削減できました。
  • 静的コンテンツのキャッシュ: アプリケーションで頻繁にアクセスされる静的コンテンツを キャッシュ するように設定しました。これにより、ネットワーク帯域幅の使用量と料金を削減できました。
  • データベースの最適化: データベースクエリを最適化し、インデックス を追加することで、データベース使用量と料金を削減できました。

教訓

この経験から、以下の教訓を学びました。

  • App Engine Flexible 環境 の料金体系を理解することが重要です。
  • 自動スケーリング を活用して、コストを削減 することができます。
  • 静的コンテンツデータベース を最適化することで、パフォーマンスコスト を向上させることができます。

まとめ




手順

  1. プロジェクトを作成する
gcloud projects create my-project
  1. App Engine サービスを作成する
gcloud app create my-app --runtime nodejs
  1. コードをデプロイする
cd my-app
npm install express

Create a file named app.js and add the following code:

const express = require('express');
const app = express();

app.get('/', (req, res) => {
  res.send('Hello, world!');
});

app.listen(3000, () => {
  console.log('Server listening on port 3000');
});
gcloud app deploy
  1. アプリケーションにアクセスする
gcloud app browse my-app

このコマンドを実行すると、ブラウザでアプリケーションが開きます。

コードの説明

このコードは、Express フレームワークを使用してシンプルな Web アプリケーション を作成します。アプリケーションは、ルートパス (/) に対する GET リクエストを処理し、"Hello, world!" というメッセージを返します。

App Engine Flexible 環境へのデプロイ

gcloud app deploy コマンドを使用して、アプリケーションを App Engine Flexible 環境 にデプロイします。このコマンドは、アプリケーションコードを App Engine サーバーにアップロードし、アプリケーションを起動します。

gcloud app browse my-app コマンドを使用して、デプロイされたアプリケーションにアクセスできます。このコマンドは、ブラウザでアプリケーションの URL を開きます。

このサンプルコードは、App Engine Flexible 環境Node.js アプリケーションをデプロイする方法を理解するための出発点として役立ちます。




  1. インスタンスの自動スケーリングを使用する

App Engine Flexible 環境は、自動スケーリング をサポートしています。これにより、トラフィック量に応じてアプリケーションインスタンスの数を自動的に増減できます。これにより、未使用のインスタンスに料金を支払うのを回避できます。

自動スケーリングを設定するには、App Engine コンソールまたは gcloud コマンドライン ツールを使用できます。

  1. 静的コンテンツのキャッシュを使用する

静的コンテンツ (画像、CSS ファイル、JavaScript ファイルなど) は、キャッシュ することで、ネットワーク帯域幅の使用量と料金を削減できます。

App Engine Flexible 環境では、Memcache または Cloud CDN を使用して静的コンテンツをキャッシュできます。

  1. データベースを最適化する

データベースの使用量を減らすことで、データベース料金を削減できます。

データベースを最適化するには、次のことができます。

  • インデックス を使用する
  • クエリ を最適化する
  • 不要なデータ を削除する

    App Engine Flexible 環境には、無料枠 が用意されています。この無料枠では、毎月一定量のインスタンス時間、ネットワーク帯域幅、およびストレージを使用できます。

    1. Cloud Run を検討する

    Cloud Run は、サーバーレスのコンテナー実行プラットフォームです。App Engine Flexible 環境よりも安価 な場合があり、スケーラビリティ に優れています。


    node.js google-cloud-platform app-engine-flexible


    ExpressJS アプリケーションを構造化するベストプラクティス

    ここでは、ExpressJS アプリケーションを構造化するいくつかの方法について説明します。MVC パターンは、Model、View、Controller という 3 つの主要なコンポーネントで構成されます。Model: データとビジネスロジックを格納します。...


    Node.js 開発:package.json にカスタム設定を追加して、プロジェクトをさらに柔軟に

    Node. js の package. json ファイルには、プロジェクトに関する基本情報 (名前、バージョン、依存関係など) が格納されています。しかし、scripts や keywords などの標準フィールドに加えて、プロジェクト固有の情報や設定を保存するために、カスタムメタデータまたは設定を追加することもできます。...


    tsconfig.json ファイルを使って Node.js + TypeScript で環境変数を使う

    env. d.ts という名前のファイルを作成し、以下のコードを追加します。この例では、PORT、DB_HOST、API_KEY という環境変数を定義しています。それぞれの変数の型は、number、string、string としています。...


    node-sassとnode-gypを使わずにNode.jsでSassファイルをコンパイルする方法

    この問題は以下の原因によって発生します。Pythonがインストールされていないnode-gypがPythonを見つけられないnode-sassまたはnode-gypのバージョンが古い環境変数PATHの設定が間違っているこの問題を解決するには、以下の方法を試してください。...


    Macでnodeをbrewでインストール後、php実行時に「dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.62.dylib error」が発生する原因と解決策

    このエラーは、Macでnodeをbrewでインストールした後、phpを実行すると発生することがあります。原因は、nodeとphpが異なるバージョンのicu4cライブラリを依存関係として使用しているためです。解決策このエラーを解決するには、以下の方法を試してください。...