タグ

awsとpythonに関するsh19910711のブックマーク (34)

  • AWS Chalice で実装したアプリケーションのユニットテスト - Qiita

    AWS Chalice とは AWS SDK for Python を開発するチームによってメンテナンスされている、AWS Lambda に展開するアプリケーションを実装するための Python のマイクロフレームワークです。 ビルトインされている @api.route, @app.on_s3_event などのデコレータを用いて関数を実装し、CLI で簡単にそれらを実際に AWS 上に展開することが出来るようになります。 例えば、chalice CLI の中にある chalice new-project コマンドでプロジェクトの雛形を作成するとこのような実装が生成されます。 from chalice import Chalice app = Chalice(app_name='test') @app.route('/') def index(): return {'hello': 'wo

    AWS Chalice で実装したアプリケーションのユニットテスト - Qiita
    sh19910711
    sh19910711 2024/06/17
    "Chalice: AWS SDK for Python を開発するチームによってメンテナンスされている、AWS Lambda に展開するアプリケーションを実装するための Python のマイクロフレームワーク / デコレータを用いて関数を実装" 2019
  • PythonのFastAPIをLambdaで動かそうと思ったらSQLModelも使ってみたくなったので調べてみた(テストまあまあ盛り) - Qiita

    PythonFastAPILambdaで動かそうと思ったらSQLModelも使ってみたくなったので調べてみた(テストまあまあ盛り)PythonunittestpytestSQLModel はじめに Pythonデータ分析スクレイピングや画像認識などをやっているのですが、Webアプリのバックエンドとして仕事格的に利用したいと思い、いろいろ調べてみると、AWSLambdaFastAPIを動かすとの話題が多く目に留まり、ふむふむ、と進めていくと、SQLModelも一緒に利用したいと思い、半日ほど試行錯誤してみたのでまとめてみたいと思います。 ソースはgithubに登録しております。 SQLModelの概要 SQLModelは、直感的で使いやすく、互換性が高く、堅牢になるように設計されており、Pythonの型アノテーションに基づき、PydanticとSQLAlchemyを利用して

    PythonのFastAPIをLambdaで動かそうと思ったらSQLModelも使ってみたくなったので調べてみた(テストまあまあ盛り) - Qiita
    sh19910711
    sh19910711 2024/06/17
    "SQLModel: Pythonの型アノテーションに基づき、PydanticとSQLAlchemyを利用 + 直感的で使いやすく、互換性が高く、堅牢になるように設計 / async sessionにも対応しており、FastAPIと一緒に利用すると作業が捗りそう" 2022
  • Dynamo DB ベースのアプリケーションをmotoとfactory_boyを用いてユニットテストする - Qiita

    boto3 は AWS SDK の Python パッケージで、Dynamo DB などの AWS のサービスを呼び出すのに使います。 この boto3 には moto という mock パッケージがあります。 moto を使うと、テストを実行するとき Dynamo DB のスタブにテスト用のデータ(fixtures)を 返させることができるので、テーブルが存在していなくてもテストケースを通すことができます。 稿では、moto を使って Dynamo DB に依存せずにアプリケーションをテストする方法を紹介します。 さらに、factory_boy を使って fixtures の組み立てを共通化する方法も紹介します。 factory_boy は fixtures の組み立てを担う Factory クラスを備えたパッケージです。 なお、稿ではアプリケーションとして Flaskベースの AP

    Dynamo DB ベースのアプリケーションをmotoとfactory_boyを用いてユニットテストする - Qiita
    sh19910711
    sh19910711 2024/06/16
    "DynamoDB に依存せずにアプリケーションをテストする / moto を使うと、テストを実行するとき Dynamo DB のスタブにテスト用のデータ(fixtures)を 返させることができる" 2018
  • moto によって requests が意図せずモック化されてしまう問題を回避する - Qiita

    moto は、AWS SDK の mocking パッケージです。 moto を用いたユニットテストについては以前 エントリを書きました。 このなかで触れましたが、requests パッケージが意図せずモック化されてしまう問題があります。 この問題の回避策について自分なりのアプローチをまとめておきます 問題としては、moto でスタブをアクティブにすると その後の requests パッケージによるリクエストがすべてモック化されてしまうというものです: これにより、elasticsearch-py など requests に依存したパッケージにおいてHTTPリクエストのさいにエラーが起きることがあります。 回避策 回避策としては、moto の responses_mock にパススルーする URL を登録します:

    moto によって requests が意図せずモック化されてしまう問題を回避する - Qiita
    sh19910711
    sh19910711 2024/06/16
    "moto でスタブをアクティブにすると その後の requests パッケージによるリクエストがすべてモック化されてしまう / moto の responses_mock にパススルーする URL を登録 + スタブ化させたくない URL を事前に登録" 2018
  • サービステストをLambda+unittest用ライブラリで実装してみる - Qiita

    AWS LambdaとServerless Advent Calendar 2020 3日目の記事です。 あるサービスのテスト(外部サービスとの結合テスト)を、Lambda(python)+unittestで実装してみます。 やること 「特定の条件を満たすメールを受信した場合はBacklogに課題を起票する」というサービスをテストするエンジンをLambda+unittestで構築します。 unittestライブラリをunittestよりも上のレイヤーの試験に使います。案外使い心地がいいです。 テスト対象サービス 以下の条件を満たすメールを受信した場合に、Backlogに課題を起票します メールタイトルに特定の文字列を含む 送信元が許可された特定のメールアドレス テストエンジン Lambda(python)にunittestライブラリでテストシナリオを記述し実行 各テストケースは、概ね以下の

    サービステストをLambda+unittest用ライブラリで実装してみる - Qiita
    sh19910711
    sh19910711 2024/06/16
    "unittestライブラリをunittestよりも上のレイヤーの試験に使います / Lambda(python)にunittestライブラリでテストシナリオを記述 / すべてのテストが完了したら結果をSNSで通知" 2020
  • pythonでS3をモック化できるStubberを使って単体テスト - Qiita

    記事について pythonでS3をモック化する際に、以前はpython標準のMockを使っていたけど、boto3に標準のStubberという便利なモジュールが用意されているので、使用してみた。 なお、コードは、実際に動かしたものを公開用に修正したもので、動作確認はしておりません。ご了承ください。 環境 python3系 boto3 テストコードを書いてみる S3からオブジェクトをGETする 対象コード import boto3 func_get(): s3 = boto3.resource('s3') bucket = 'bucket' key = '/key/object.json' obj = s3.Object(bucket, key) res = obj.get() return res from botocore.stub import Stubber from botocore

    pythonでS3をモック化できるStubberを使って単体テスト - Qiita
    sh19910711
    sh19910711 2024/06/16
    "S3をモック化する際に、以前はpython標準のMockを使っていたけど、boto3に標準のStubberという便利なモジュールが用意されている / 複数回の呼び出しのレスポンスを定義 + ファーストインファーストアウトで定義できる" 2021
  • motoのmock_dynamodbを使ってみました - Qiita

    やりたいこと LambdaでDynamoDBからデータを取得するプログラムの単体テストをやるため、DynamoDB関連の処理をモック化したい 前提 ・Pythonインストール済み ・pipenvインストール済み (今回は便宜上pipenv内でtoxでテストをやるのですが、ローカルで諸々ライブラリを入れてテストをやっても大丈夫です) ディレクトリ構成 root ┣━ functions ┗━ api ┗━ app.py ┣━ tests ┣━ conftest.py ┗━ test_app.py ┣━ Pipfile ┗━ tox.ini import boto3 import os # DynamoDB関連情報はLambdaの環境変数から取る DYNAMO_TABLE_NAME = os.environ.get('DYNAMO_TABLE_NAME') DYNAMO_REGION = os

    motoのmock_dynamodbを使ってみました - Qiita
    sh19910711
    sh19910711 2024/06/16
    "単体テストをやるため、DynamoDB関連の処理をモック化したい / 便宜上pipenv内でtoxでテストをやる / テストの前準備として、motoでmock化したDynamoDBテーブルを作りDummyのデータをputする関数を用意" 2023
  • motoのバージョン5.x以降のimportエラーについて - Qiita

    motoとは? motoは、AWSの各種サービスをモックするためのPythonライブラリです。 DynamoDBやS3などのマネージドサービスをモックにすることで、実際のAWS環境を用意せずともローカル環境でpytestなどができます。 moto v5系でのDecoratorの変更 そして、いつの間にかmotoのバージョンが5.xに上がりました。 https://docs.getmoto.org/en/5.0.0/docs/releases.html 今回のメジャーアップデートでの注意すべき点は以下です。 All decorators have been replaced with mock_aws 今までは、@mock_s3や@mock_dynamodbのようにAWSサービス名でDecoratorを記載していましたが、今後は全て@mock_awsに統一されるとのことです。 これにより今ま

    motoのバージョン5.x以降のimportエラーについて - Qiita
    sh19910711
    sh19910711 2024/06/16
    "moto: AWSの各種サービスをモックするためのPythonライブラリ / いつの間にかmotoのバージョンが5.xに上がり + AWSサービス名でDecoratorを記載していましたが、今後は全て@mock_awsに統一"
  • AWS Lambda 上で Jinja2 を使う場合の実行時間を削減する方法 - Qiita

    はじめに DMMグループ Advent Calendar 2020 3日目の記事です。 AWS Lambda 上で HTML を生成するアプリケーションを動かす場合に、 Python ランタイムを選択し Jinja2 を利用することが考えられます。 AWS Lambda では コードの実行時間に対して課金される ため、Jinja2 による HTML 生成にかかる時間が小さい方がコスト的に嬉しいです。 そこでこの記事では、AWS Lambda 上で Jinja2 により HTML を生成する際に実行時間を小さくするための方法を検討します。 前提 下記の環境を前提とします。 AWS Lambda ランタイム: Python 3.8 AWS Lambda メモリ割り当て: 128MB Jinja2: 2.11.2 結論 Jinja2 での HTML 生成にかかる時間を小さくするには、下記の方法が

    AWS Lambda 上で Jinja2 を使う場合の実行時間を削減する方法 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Lambda では コードの実行時間に対して課金される ため、Jinja2 による HTML 生成にかかる時間が小さい方がコスト的に嬉しい / Jinja2 の Environment のインスタンスを使い回す + テンプレートを事前にコンパイルしておく" 2020
  • Selenium3をAWS lambda python3.8以上で動かす[AWS SAM] - Qiita

    AWS LambdaでSelenium webスクレイピングで便利なseleniumですが、サーバーレスと組み合わせると、APIやFTPが無くてもデータ連携させたりできるので、重宝しています。 ただLambdaでseleniumを動かすにはheadlessブラウザのchromiumと対応するchromedriverが必要で、バージョンによってはうまく(ほとんど)動かなかったりします。 とくにpython3.8以上ではLambdaのOSがAmazon Linux2で稼働するようになったため、seleniumがモジュール不足で動かなくなってしまい、従来のようにコード一式zipであげてといった方法が使えなくなりました。 私も業務で運用フローに組み込んでしまっているので、死活問題。python3.8だっていつまで使えるのか。(EOLを見よう) python3.8廃止は2024年10月14日、うん、

    Selenium3をAWS lambda python3.8以上で動かす[AWS SAM] - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Lambdaでseleniumを動かすにはheadlessブラウザのchromiumと対応するchromedriverが必要 / バージョンによってはうまく(ほとんど)動かなかったりします / seleniumはversionが4になっていて、ブラウザとドライバの管理も刷新"
  • Amazon Bedrock Converse API と Tool use を知識ゼロから学び,発展的なチャットアプリを実装する - Qiita

    Amazon Bedrock Converse API と Tool use を知識ゼロから学び,発展的なチャットアプリを実装するPythonAWSbedrock生成AIclaude はじめに 株式会社 NTT データ デザイン&テクノロジーコンサルティング事業部の @ren8k です. 先日,Amazon Bedrock の Converse API と Tool use (function calling) を利用した Streamlit チャットアプリ(デモ)を作成し,以下のリポジトリに公開しました.記事では,チャットアプリ開発の過程で得た知見を基に,初学者から上級者までを対象として,Tool use の仕組みやその利用方法,発展的な活用方法を共有いたします. Converse API とは Converse API とは,統一的なインターフェースで Amazon Bedrock

    Amazon Bedrock Converse API と Tool use を知識ゼロから学び,発展的なチャットアプリを実装する - Qiita
    sh19910711
    sh19910711 2024/06/13
    "Converse API: Tool use (function calling) が可能 / toolConfigを指定した場合,Claude3 は回答生成にツールが必要かどうかを判断 + ツールが必要な場合はレスポンスにツール実行のためのリクエスト"
  • X-RayはpytestとFlameGraphを組み合わせると便利 - Qiita

    この記事を3行で AWS X-Rayをpytestで使うと便利 関数の通過や例外の発生をassertでテストできる X-Rayの可視化にFlameGraphを使えば、各関数の実行時間が分かりやすい この記事を書く理由 AWS X-Rayが便利なので、AWS環境へのデプロイの前でも使える使い方を紹介したい。 完成後の挙動 この記事で作成する単体テストを、Pytestで実行すると、 単体テストが吐き出したX-Rayのデータをもとに、下のようなグラフがローカルのPC上に作成されます。 FlameGraphと呼ばれているグラフです。炎のように下から上に伸びていくことが特徴です。 グラフの縦の方向は関数の呼び出しを表しています。 たとえばこのグラフなら、下から上に読んで、lambda_handler関数がnetwork_process関数を呼び出して、そこからgoogle.co.jpへのリクエストを

    X-RayはpytestとFlameGraphを組み合わせると便利 - Qiita
    sh19910711
    sh19910711 2024/05/16
    "AWS X-Rayをpytestで使うと便利 / 実行された関数が想定通りか、例外の内容が想定通りか、といった試験が書きやすく、分かりやすい / 実装を変えながらパフォーマンスを比較 + 異常系のパフォーマンスを計測"
  • AWS Step Functionsの単体テスト実施手順 | takemikami's note

    AWS Step Functionsの単体テストをローカル環境で実施したい場合、 AWSのドキュメントに「AWS Step Functions Local」を使った方法が記載されており、 AWS Step Functionsから呼び出す処理(Lamda,SQSなど)をモックする方法もあります。 ステートマシンのローカルテスト | docs.aws.amazon.com https://docs.aws.amazon.com/ja_jp/step-functions/latest/dg/sfn-local.html モックサービス統合の使用 | ステートマシンのローカルテスト | docs.aws.amazon.com https://docs.aws.amazon.com/ja_jp/step-functions/latest/dg/sfn-local-test-sm-exec.html

    AWS Step Functionsの単体テスト実施手順 | takemikami's note
    sh19910711
    sh19910711 2024/05/09
    "Step Functionsの単体テスト: ドキュメントに「AWS Step Functions Local」を使った方法が記載 + 呼び出す処理(Lamda,SQSなど)をモックする方法もあり / 繰り返しの実施をしやすいようにpytestに組み込む"
  • 構成図を『描く』から『書く』へ:DiagramsでAWS構成図かいてみる - Qiita

    やること "Diagram as Code"ことDiagramsで、AWS構成図をコードでかいてみる Diagramsとは Diagramsは、Pythonモジュール Diagrams使うにはGraphvizも必要 Pythonのコードでクラウドシステムアーキテクチャを描画できる サイトはここ https://diagrams.mingrammer.com/ サイトにあるDiagramsの説明は、英語だけど分量が少ないので一読すべし!(自動翻訳で十分理解できる) このように、構成図をPythonのコードで書ける。このコードを、Pythonスクリプトとして実行すると、構成図が画像として出力される。 良いところ 構成図をコード化できる コード編集で作図編集できるので、画像修正より楽 コードなので、CloudFormationのコードとまとめてGitで管理できる AWS以外のアイコンも用意されて

    構成図を『描く』から『書く』へ:DiagramsでAWS構成図かいてみる - Qiita
    sh19910711
    sh19910711 2024/05/09
    "Diagrams: 構成図をコード化できる + コードなのでCloudFormationのコードとまとめてGitで管理できる + AWS以外のアイコンも用意されている / 代用アイコンを決めておけばチーム内で共有する構成図として十分に使えそう" 2020
  • LangChainをAPI化するLangServeをLambda上で動作させるのはめちゃ簡単デス - Qiita

    少し前にLangChain開発元から新しいツールとしてLangServeというものがリリースされています。 LangServe is the easiest and best way to deploy any any LangChain chain/agent/runnable. 生成系AIを使ったAPIを簡単に作成し利用できる仕組みで、プロダクション環境でどんどんLangChainを使ってねというメッセージと捉えました。 イメージとしてはこんな仕組みです。 FastAPI上で動作し、API仕様が定められている感じです。 Invoke API 単一の入力で処理を実行する Batch API 複数の入力で処理を実行する Stream API 単一の入力で処理を行い、結果をストリームで返却する Stream_log API 単一の入力で処理を行い、結果だけでなく途中の経過もストリームで返却す

    LangChainをAPI化するLangServeをLambda上で動作させるのはめちゃ簡単デス - Qiita
    sh19910711
    sh19910711 2024/02/19
    "LangServe: 生成系AIを使ったAPIを簡単に作成し利用できる仕組み + FastAPI上で動作 / Lambda Web Adapter: AWS製 + FastAPIのLambda化を行う便利なライブラリー / Lambda: Python 3.12ランタイムはBoto3のバージョンが1.28.72のため、Bedrockに対応"
  • PythonでLambda Functionを書く時にデコレータでイベントソース毎の共通処理をすると便利という話

    この記事はServerless2 Advent Calendar 2018の21日目の記事です。 qiita.com 先日 AWS Lambda Custom Runtimes芸人 Advent Calendar 2018 の方はちょっとはっちゃけすぎた感もありつつ実戦にすぐに役に立つような内容ではなかったですが、今回はマジメにより実戦的な内容で行きたいと思いますw marcy.hatenablog.com はじめに 私は普段は主にPythonLambda Functionを書いているのですが、イベントの処理方法を予め決めてデコレータで共通処理を行うようにしています。それによってServerlessな開発でよく話題になるトレーサビリティの問題やエラーハンドリングの煩雑さなどをある程度上手く解決できているので紹介したいと思います。 なお、出てくるコードは実際に使用しているものに近いですが、

    PythonでLambda Functionを書く時にデコレータでイベントソース毎の共通処理をすると便利という話
  • S3に直接アップロード可能なPre-Signed URLをLambdaで作ってみる | DevelopersIO

    S3にはPre-Signed URLという機能があり、S3のオブジェクトへの限定的なアクセスを提供することが可能です。 一時的に認証なしで直接S3へファイルをアップロードすることができるところが便利そうです。 このPre-Signed URLをLambdaで作ってみたのでご紹介いたします。 S3にはPre-Signed URLという機能があり、S3のオブジェクトへの限定的なアクセスを提供することが可能です。 弊社ブログでもいくつか紹介されています。 Amazon S3 の署名付き URL を利用して Android から画像をアップロードする | DevelopersIO Boto3でS3のpre-signed URLを生成する | DevelopersIO あらかじめ限定的なアクセスに絞っておくことで、一時的に認証なしで直接S3へファイルをアップロードすることができるところが便利そうです

    S3に直接アップロード可能なPre-Signed URLをLambdaで作ってみる | DevelopersIO
    sh19910711
    sh19910711 2020/05/31
    generate_presigned_url
  • Fargateで起動するPythonの定期バッチをAWS-CDKで構築する - Qiita

    Fargateで起動するPythonの定期バッチをAWS-CDK(Python)で構築する Lambdaの15分制限を突破するために、Fargateを使用することにした。 CDKのPythonで書かれたサンプルコードをあまり見ないので、備忘録がわりに投稿してみる。 AWS-CDKを触ったことがない方はこちらのワークショップを一通り終わらせるとイメージが付きやすいと思います。 この記事のソースはGitHubのこちらのリポジトリにあります。 これを作るよー 開発環境構築 今回はCloud9で構築したが、CDKとPythonDockerを入れればMacでもWindowsでも動く、はず。 AWS CDK Cloud9には現時点で最初からCDKが入っていないので、事前にインストールすること。

    Fargateで起動するPythonの定期バッチをAWS-CDKで構築する - Qiita
  • AWS Lambda で Python 3.8 ランタイム がサポートされました | DevelopersIO

    AWS チームのすずきです。 Python 3.8 をサポートした AWS Lambda、試す機会がありましたので紹介させていただきます。 AWS Lambda now supports Python 3.8 マネジメントコンソール 「Python 3.8」を、Lambda関数のランタイムとして選択可能になりました。 関数コード Python 3.8 でサポートされた「セイウチ演算子」(:=) を含むコード、テスト実行してみました。 実行コード import sys def lambda_handler(event, context): if (a := sys.version_info): print(a) 結果 Python の マイナーバージョン「8」である事を確認できました。 sys.version_info(major=3, minor=8, micro=0, releasele

    AWS Lambda で Python 3.8 ランタイム がサポートされました | DevelopersIO
    sh19910711
    sh19910711 2019/11/24
    Lambdaでセイウチできるようになった
  • AWS Data Wranglerを触ってみた - アメリカ的間投詞

    つい先々週Amazon Web Services ブログで紹介されていたAWS Data Wranglerを触ってみたので、その感想などを書きます。 AWS Data WranglerはAWSの各サービス上にあるデータを操作するためのPythonライブラリです(つまりサービスではない)。Python環境においてメモリ上にあるpandasのDataFrameや、PySparkのセッションで捕捉しているデータをAWSの各種リソース(S3, Redshiftなど)へとアップロードすること、またその逆の作業が行えます。 元来このような操作は各チームでライブラリを用意するか、個々のデベロッパーが都度開発することで実現されることが多かったでしょう。今回AWS Data Wranglerが提供されたことにより、そのような手間を省くのに加え、データのやり取りを行う際のベストプラクティスに沿った実装を利用で

    AWS Data Wranglerを触ってみた - アメリカ的間投詞
    sh19910711
    sh19910711 2019/10/13
    "DataFrameをアップロードする際に、パーティションのキーとしたい列をDataFrameに予め用意してやることで、Hive式の配置でデータを格納することができます"