検索
ホームページバックエンド開発Python チュートリアルDocker から Lambda へ: AWS 管理者の Python アプリケーションへの取り組み

Python スクリプトからサーバーレス AWS へ: 私の投資ポートフォリオの旅

AWS 自動化用の単純な Python スクリプトから始めて、徐々により複雑なプロジェクトに進化しました。 3 か月前、私はメタクラスをほとんど理解していませんでした。これで、本格的な投資ポートフォリオ マネージャーを構築できました。

私の旅

私は AWS 自動化 (あの悪名高い「すべてを行う」スクリプトを含む) に Python を長年使用してきた結果、適切なアプリケーションを構築することができました。 過去のスクリプト、スタック オーバーフロー、クロードの AI 支援を活用して、ついにソフトウェア開発の原則を理解しました。

From Docker to Lambda: An AWS Admin

アプリのスクリーンショット (実際の投資ではなく、シード データ)。

投資ポートフォリオの Excel スプレッドシートを手動で更新することにうんざりし、プロセスを自動化しました。 この Python アプリケーションは、ポートフォリオを管理し、取引を追跡し、配当を処理し、さらには価格を自動的に更新します。 当初、ホームサーバー (Flask バックエンド、React フロントエンド、SQLite データベース) 上の Docker で美しく動作しました。

「趣味が仕事になる」という難問

これを自宅サーバーで実行するのは非効率だと感じました。 AWS のプロフェッショナルとして、ハードウェア上でコンテナを管理するのは直感に反するように思えました。解決策は明白だと思われました: ECS です。 docker-compose ファイルは既にありました:

<code>services:
  backend:
    build: ./backend
    container_name: investment-portfolio-backend
    environment:
      - DB_DIR=/data/db
      - LOG_DIR=/data/logs
      - DOMAIN=${DOMAIN:-localhost}
    volumes:
      - /path/to/your/data:/data
    networks:
      - app-network

  frontend:
    build:
      context: ./frontend
      args:
        - DOMAIN=${DOMAIN:-localhost}
        - USE_HTTPS=${USE_HTTPS:-false}
    container_name: investment-portfolio-frontend
    environment:
      - DOMAIN=${DOMAIN:-localhost}
      - USE_HTTPS=${USE_HTTPS:-false}
    ports:
      - "80:80"
    depends_on:
      - backend
    networks:
      - app-network</code>

しかし、AWS アーキテクトの観点 (および料金計算ツール) は、サーバーレス アプローチを提案しました。

From Docker to Lambda: An AWS Admin

  • 価格は毎日更新され、アクセス頻度は低いため、24 時間年中無休のコンテナを避けることが推奨されます。
  • 静的フロントエンド ファイルは S3 Web サイトのホスティングに最適でした。
  • API Gateway と Lambda は API 呼び出しを処理します。
  • Aurora Serverless はリレーショナル データに適していました。
  • DynamoDB は価格履歴を保存できます (ただし、この段階には達していません)。

これにより、私はサーバーレスのウサギの穴に落ちました。 私にはこれまでにサーバーレスの経験がありました。つまり、妻と一緒に温度追跡プロジェクトを行い、KNMI データを使用して、クラフト プロジェクト用に色分けされたテーブルを生成しました。

<code>| Date       | Min.Temp | Min.Kleur   | Max.Temp | Max.Kleur   |
----------------------------------------------------------------
| 2023-03-01 |   -4.1°C | darkblue   |    7.1°C | lightblue  |
| 2023-03-02 |    1.3°C | blue       |    6.8°C | lightblue  |
...</code>

このプロジェクトは、日付パラメータを受け取り、ローカルまたは Lambda/API ゲートウェイ経由で実行されました。 これを SQLAlchemy、バックグラウンド ジョブ、複雑な関係を使用して完全な Flask アプリケーションに拡張することは、困難であることが判明しました。

サーバーレスの魅力

コンテナ化されたアプリケーションはうまく機能しましたが、サーバーレス サービスの魅力は強力でした。 自動スケーリングの可能性とコンテナ管理の排除は魅力的でした。

そこで、サーバーレス環境用にアプリケーションを再設計しました。 元のプロジェクトには 2 か月かかりました。これなら簡単だろう...そう私は思いました。

データベースの決定

Lambda での SQLite の制限により、SQLAlchemy の知識との互換性を維持しながら PostgreSQL Aurora Serverless を検討するようになりました。 デュアルハンドラーを作成しました:

<code>services:
  backend:
    build: ./backend
    container_name: investment-portfolio-backend
    environment:
      - DB_DIR=/data/db
      - LOG_DIR=/data/logs
      - DOMAIN=${DOMAIN:-localhost}
    volumes:
      - /path/to/your/data:/data
    networks:
      - app-network

  frontend:
    build:
      context: ./frontend
      args:
        - DOMAIN=${DOMAIN:-localhost}
        - USE_HTTPS=${USE_HTTPS:-false}
    container_name: investment-portfolio-frontend
    environment:
      - DOMAIN=${DOMAIN:-localhost}
      - USE_HTTPS=${USE_HTTPS:-false}
    ports:
      - "80:80"
    depends_on:
      - backend
    networks:
      - app-network</code>

ラムダ学習曲線

Flask アプリケーションを Lambda 関数に変換することは、予想よりも複雑でした。 私の最初の試みは不器用でした:

<code>| Date       | Min.Temp | Min.Kleur   | Max.Temp | Max.Kleur   |
----------------------------------------------------------------
| 2023-03-01 |   -4.1°C | darkblue   |    7.1°C | lightblue  |
| 2023-03-02 |    1.3°C | blue       |    6.8°C | lightblue  |
...</code>

保守性を向上させるために、デコレーターを作成しました。

<code>@contextmanager
def db_session():
    # ... (code for environment-aware database session management) ...</code>

これにより、Lambda 関数の構造が改善されました:

<code># ... (initial, inefficient Lambda handler code) ...</code>

しかし、これは元の Flask ルートを壊してしまいました。 新しいデコレーターにより、二重の機能が有効になりました:

<code>def lambda_response(func):
    # ... (decorator for cleaner Lambda responses) ...</code>

サポート機能により一貫した応答が保証されます:

<code>@lambda_response
def get_portfolios(event, context):
    # ... (simplified Lambda function) ...</code>

これにより、Flask と Lambda の両方で同じルートを使用できるようになりました:

<code>def dual_handler(route_path, methods=None):
    # ... (decorator for both Flask routes and Lambda handlers) ...</code>

フロントエンドのシンプルさ

フロントエンドは簡単でした。 S3 静的 Web サイト ホスティングと CloudFront により、簡単な導入が可能になりました。 単純なスクリプトでフロントエンドを S3 にアップロードし、CloudFront キャッシュを無効にしました。

<code>def create_lambda_response(flask_response):
    # ... (function to convert Flask response to Lambda response format) ...

def create_flask_request(event):
    # ... (function to convert Lambda event to Flask request) ...</code>

結果

数週間の作業の後、私のアプリケーションはサーバーレスになりました。 セキュリティ上の懸念があるため、オンラインには保存しませんが、貴重な教訓を学びました:

  1. Python の機能はスクリプト作成を超えて拡張されます。
  2. AWS 無料利用枠は開発にとって非常に貴重です。
  3. CloudWatch Logs はデバッグに不可欠です。
  4. 「適切な」方法が常に AWS の方法であるとは限りません。

これを繰り返しますか?おそらくそうではありません。 しかし、その旅は私に Python とデュアルスタック開発について教えてくれて、やりがいのあるものでした。 私の投資ポートフォリオ マネージャーはプライベート ネットワーク上で安全に動作するようになりました。

以上がDocker から Lambda へ: AWS 管理者の Python アプリケーションへの取り組みの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
Pythonのハイブリッドアプローチ:コンピレーションと解釈を組み合わせたPythonのハイブリッドアプローチ:コンピレーションと解釈を組み合わせたMay 08, 2025 am 12:16 AM

pythonusesahybridapproach、コンコイリティレーショントビテコードと解釈を組み合わせて、コードコンピレッドフォームと非依存性bytecode.2)

Pythonの「for」と「while」ループの違いを学びますPythonの「for」と「while」ループの違いを学びますMay 08, 2025 am 12:11 AM

keydifferencesは、「for」と「while "loopsare:1)" for "for" loopsareideal forterating overencesonownowiterations、while2) "for" for "for" for "for" for "for" for "for" for for for for "wide" loopsarebetterunuinguntinunuinguntinisisisisisisisisisisisisisisisisisisisisisisisisisisisations.un

重複したPython Concatenateリスト重複したPython ConcatenateリストMay 08, 2025 am 12:09 AM

Pythonでは、さまざまな方法でリストを接続して重複要素を管理できます。1)オペレーターを使用するか、すべての重複要素を保持します。 2)セットに変換してから、リストに戻ってすべての重複要素を削除しますが、元の順序は失われます。 3)ループを使用するか、包含をリストしてセットを組み合わせて重複要素を削除し、元の順序を維持します。

Pythonリスト連結パフォーマンス:速度比較Pythonリスト連結パフォーマンス:速度比較May 08, 2025 am 12:09 AM

fasteStMethodDodforListConcatenationinpythOndontsonistize:1)forsmallLists、operatorisefficient.2)forlargerlists、list.extend()orlistcomlethingisfaster、withextend()beingmorememory-efficient bymodifyigniviselistinistin-place。

Pythonリストに要素をどのように挿入しますか?Pythonリストに要素をどのように挿入しますか?May 08, 2025 am 12:07 AM

to insertelementsIntopeaseThonList、useappend()toaddtotheend、insert()foraspificposition、andextend()formultipleElements.1)useappend()foraddingsingleitemstotheend.2)useintert()toaddataspecificindex、cont'slowerforforgelists.3)

Pythonリストは、フードの下に動的な配列またはリンクリストですか?Pythonリストは、フードの下に動的な配列またはリンクリストですか?May 07, 2025 am 12:16 AM

PythonListsareimplementedasdynamicarrays、notlinkedlists.1)they restorediguourmemoryblocks、それはパフォーマンスに影響を与えることに影響を与えます

Pythonリストから要素をどのように削除しますか?Pythonリストから要素をどのように削除しますか?May 07, 2025 am 12:15 AM

pythonoffersfourmainmethodstoremoveelements fromalist:1)removesthefirstoccurrenceofavalue、2)pop(index(index(index)removes regvess returnsaspecifiedindex、3)delstatementremoveselementselementsbyindexorseLice、および4)clear()

スクリプトを実行しようとするときに「許可を拒否された」エラーを取得した場合、何を確認する必要がありますか?スクリプトを実行しようとするときに「許可を拒否された」エラーを取得した場合、何を確認する必要がありますか?May 07, 2025 am 12:12 AM

toresolvea "許可denided" errors whenrunningascript、sofflowthesesteps:1)checkandadaddadaddadadaddaddadadadaddadaddadaddadaddaddaddaddaddadaddadaddaddaddaddadaddaddaddadadaddadaddadaddadadisionsisingmod xmyscript.shtomakeitexexutable.2)

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)