Python

CORSで困ったときのリンク

先日CORSのエラーに散々悩んだので、解決のための参考になったリンクを記載。 ちなみに構成はFront(Next.js) + Back(AWS API Gateway + Lambda(Python)) 。 リンク たとえば リンク CORSの切り分け方法を載せてくれている。神。 https://future-architect.gi…

宗教論争 例外処理はどこで行うべきなのか?

『自走プログラマー ~Pythonの先輩が教えるプロジェクト開発のベストプラクティス120』を読んでいて、ふと昔同僚とやった例外処理の議論を思い出したので書いてみる。 議題: 例外処理は一番上で行うべきなのか、それともできるだけ下で行うべきなのか 結論…

GitHub Actionsで自動テストし、AWS Lambdaに自動デプロイする。

AWS Lambda関数の本番デプロイについて検討したCI/CDをGitHub Actionsで実現する。 実現したいフロー 通知は何で行う? 関数のアップロードにTerraformは使わない? Lambda関数の関数バージョンはなぜ設定している? GitHub Actions 事前準備: Slack 参考 …

AWS Lambdaの開発・運用手順に関する課題のメモ書き

GitHub Flow / Git Flow LambdaのImmutableデプロイは可能か? SAMどうよ TerraformとAPI GatewayとSwaggerの兼ね合いどうしよう 参考 GitHub Flow / Git Flow 日常的にゴリゴリ更新していけるプロジェクトであればGitHub Flow、モバイルアプリのバックエン…

AWS Lambdaをローカルで開発・テストするには?

Pythonを使ったAWS LambdaはAWSのマネジメントコンソールから直接コーディングとテスト(とデバッグ)ができる。 が、コーディング時にVSCodeや周辺ツールが使えないのは辛い。それにローカル環境で行える作業とテスト/デバッグはローカルで行いたい。 先に…

API Gatewayを通さず直接Lambdaにアクセスする機能を試してみた(Lambda 関数URL)

Lambda 関数URLを使ってAPI Gatewayを通さず直接Lambdaにアクセスする機能を試してみた。 結論、どうなのか? Terraformを使ったコードの例 参考 結論、どうなのか? 便利なのだが簡易版といった趣で、不便な点もある。"やったぞAPI Gatewayがいらなくなった…

ローカルでPython製のLambda関数をJSON渡しで起動するには

課題 テストのため、AWS Lambda Function URLを持ったLambda関数の起動をローカルでも行いたい。最終的にAWS Lambda本体で行うわけだが、その前の段階ではローカルを使えたほうがよい。しかしにJSONを渡す必要があるが、どのようにすればよいか。 解決 pytho…

VSCode+AWS Toolkit+SAMでAWS Lambda関数を作成・デバッグ(開発環境用、NOT 本番環境用)

AWS Lambda関数の開発にあたり、Localでできる作業はLocalで行うにしても、やはりAWS上で動かさないと仕方ない部分が残る。 といって、いくら開発環境用だとしても、マネジメントコンソール上で編集するのはVSCodeの開発ツールが使えないので嬉しくないし、…

Windows+Python+Lambda+Dockerで開発環境づくり

過去にWindows直でPythonをインストールして開発環境を作成した。用途はAWS Lambdaの関数作成である。 おおむね問題なかったのだが、ローカルの環境変数を読み込ませるいい方法がなく、結局コンテナ上でdirenvを使うことにした。どの道AWS LambdaはLinux上で…

pytestで指定した例外を投げられるかのテストを行うために綺麗な書き方

課題 pytestでユニットテストを行うにあたり、例外を投げるタイプの関数をテストしたい。どのようにすればよいか。 解決 下記のようにpytest.raisesを使うと綺麗に書ける。公式参照。 def test_valid(): with pytest.raises(TypeError, match=r".*max length…

pytest

Pythonスクリプトのユニットテストをpytestで行ってみる。 pythonには最初からユニットテストを行う機能が付属しているのだが、2021 年 Python 開発者アンケートの結果によると一番人気はpytestであるため、普及率に合わせて――普及率は正義である。大抵こな…

AWS Lambda Pythonで外部ライブラリを利用する

AWS Lambda(Python利用)でcerberusを使いたいが、Lambdaにはこちらの欲しいライブラリがインストールされていないため当然ながらエラーになる。 そこでLayerを使って先に外部ライブラリを用意しておく。 準備 作成とアップロードの例 備考 参考 準備 WSLで…

Cerberusでメールアドレスのバリデーションを行う

PythonスクリプトのバリデーションをCerberusで行うことにしたのはよいが、デフォルトでメールアドレスのチェックがない。 そこでCerberusに用意されている拡張方法を利用し、メールアドレスのチェックも行えるようにした。 Sample 参考 Sample 結論、こうす…

Pythonで作るスクリプトのバリデーションについて

どこで値のチェックを行うか? バリデーション用のライブラリは何を使う? どこで値のチェックを行うか? 値のチェックにあたり、バリデーションをユーザー入力受付時に行うだけでなく、Entityの値入力時に行うと堅牢である。公式の例ではEntityでバリデーシ…

CerberusでValidationを行う

PythonスクリプトのバリデーションをCerberusで行ってみる。 Cerberus Install Example 使用感 参考 Cerberus Install pip install cerberus Example schema = { "name": { "type": "string", "required": True, }, } request_body = { "name": "me", } v = …

PythonとVisualStudio Codeで開発環境づくり

Pythonの開発をVisualStudio Codeで行うにあたり、Formatter/Linterも使ってなるべく楽がしたい。コードの標準化を人力で行うのは避けたい。 という動機により、VSCodeと以下を連携させて開発環境を構築した。 Formatterとして black(設定楽なので) black…

はてなブログにカスタムURL付きで新規投稿する

先だっての記事ではてなブログからの記事リスト取得と記事編集ができるようになった。 ところが記事の編集のたびにファイル名が変わってしまう(おそらくURLも変わっている)謎の現象が起きた。 また、ディレクトリ構成が日付ごとの上にmark-downのファイ…