Docker から Lambda へ: AWS 管理者の Python アプリケーションへの取り組み
Python スクリプトからサーバーレス AWS へ: 私の投資ポートフォリオの旅
AWS 自動化用の単純な Python スクリプトから始めて、徐々により複雑なプロジェクトに進化しました。 3 か月前、私はメタクラスをほとんど理解していませんでした。これで、本格的な投資ポートフォリオ マネージャーを構築できました。
私の旅
私は AWS 自動化 (あの悪名高い「すべてを行う」スクリプトを含む) に Python を長年使用してきた結果、適切なアプリケーションを構築することができました。 過去のスクリプト、スタック オーバーフロー、クロードの AI 支援を活用して、ついにソフトウェア開発の原則を理解しました。
アプリのスクリーンショット (実際の投資ではなく、シード データ)。
投資ポートフォリオの 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 アーキテクトの観点 (および料金計算ツール) は、サーバーレス アプローチを提案しました。
- 価格は毎日更新され、アクセス頻度は低いため、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>
結果
数週間の作業の後、私のアプリケーションはサーバーレスになりました。 セキュリティ上の懸念があるため、オンラインには保存しませんが、貴重な教訓を学びました:
- Python の機能はスクリプト作成を超えて拡張されます。
- AWS 無料利用枠は開発にとって非常に貴重です。
- CloudWatch Logs はデバッグに不可欠です。
- 「適切な」方法が常に AWS の方法であるとは限りません。
これを繰り返しますか?おそらくそうではありません。 しかし、その旅は私に Python とデュアルスタック開発について教えてくれて、やりがいのあるものでした。 私の投資ポートフォリオ マネージャーはプライベート ネットワーク上で安全に動作するようになりました。
以上がDocker から Lambda へ: AWS 管理者の Python アプリケーションへの取り組みの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック











Pythonは、データサイエンス、Web開発、自動化タスクに適していますが、Cはシステムプログラミング、ゲーム開発、組み込みシステムに適しています。 Pythonは、そのシンプルさと強力なエコシステムで知られていますが、Cは高性能および基礎となる制御機能で知られています。

PythonはゲームとGUI開発に優れています。 1)ゲーム開発は、2Dゲームの作成に適した図面、オーディオ、その他の機能を提供し、Pygameを使用します。 2)GUI開発は、TKINTERまたはPYQTを選択できます。 TKINTERはシンプルで使いやすく、PYQTは豊富な機能を備えており、専門能力開発に適しています。

2時間以内にPythonの基本的なプログラミングの概念とスキルを学ぶことができます。 1.変数とデータ型、2。マスターコントロールフロー(条件付きステートメントとループ)、3。機能の定義と使用を理解する4。

2時間以内にPythonの基本を学ぶことができます。 1。変数とデータ型を学習します。2。ステートメントやループの場合などのマスター制御構造、3。関数の定義と使用を理解します。これらは、簡単なPythonプログラムの作成を開始するのに役立ちます。

Pythonは学習と使用が簡単ですが、Cはより強力ですが複雑です。 1。Python構文は簡潔で初心者に適しています。動的なタイピングと自動メモリ管理により、使いやすくなりますが、ランタイムエラーを引き起こす可能性があります。 2.Cは、高性能アプリケーションに適した低レベルの制御と高度な機能を提供しますが、学習しきい値が高く、手動メモリとタイプの安全管理が必要です。

限られた時間でPythonの学習効率を最大化するには、PythonのDateTime、時間、およびスケジュールモジュールを使用できます。 1. DateTimeモジュールは、学習時間を記録および計画するために使用されます。 2。時間モジュールは、勉強と休息の時間を設定するのに役立ちます。 3.スケジュールモジュールは、毎週の学習タスクを自動的に配置します。

Pythonは、Web開発、データサイエンス、機械学習、自動化、スクリプトの分野で広く使用されています。 1)Web開発では、DjangoおよびFlask Frameworksが開発プロセスを簡素化します。 2)データサイエンスと機械学習の分野では、Numpy、Pandas、Scikit-Learn、Tensorflowライブラリが強力なサポートを提供します。 3)自動化とスクリプトの観点から、Pythonは自動テストやシステム管理などのタスクに適しています。

Pythonは、自動化、スクリプト、およびタスク管理に優れています。 1)自動化:OSやShutilなどの標準ライブラリを介してファイルバックアップが実現されます。 2)スクリプトの書き込み:Psutilライブラリを使用してシステムリソースを監視します。 3)タスク管理:スケジュールライブラリを使用してタスクをスケジュールします。 Pythonの使いやすさと豊富なライブラリサポートにより、これらの分野で優先ツールになります。
