最近ヘッドレスCMSやヘッドレスコマースの名をちょくちょく目にするようになってきた。 聞けばAPIだけ提供してフロントは自由に作るというものだそうである。発想自体は割合昔からあったと思う。自分も数年前に考えたことがある。負荷をS3(とCloudFront)に…
規模がわからないプロジェクト、というものが時折ある。やったことがないので試算の根拠がない、そもそも発注者がなにをしたいのか自分でもわかっていない(!)、そんなプロジェクトである。 だが、そんな曖昧な状態であっても、やるからにはプロジェクトを…
『自走プログラマー ~Pythonの先輩が教えるプロジェクト開発のベストプラクティス120』を読んでいて、ふと昔同僚とやった例外処理の議論を思い出したので書いてみる。 議題: 例外処理は一番上で行うべきなのか、それともできるだけ下で行うべきなのか 結論…
AWS Innovateの"クラウドネイティブ開発の今 ~ クラウドの特性をフルに活用した開発と運用 ~ (T1-1)"を見ていた時のメモ メモ クラウドネイティブ IaCでインフラ構築作業を自動化できる、反復できるのをポイントとしていた。これの前にあった課題は固定的…
AWS Innovateの"もはやアンチパターンではない、AWS Lambda からのリレーショナル・データベース利用 (T4-5)"を見ていた時のメモ メモ LambdaからDBをつなぐ際、Writeのスケーリングはどうすんの スケールアップ セッションの中では触れられなかったけどAuro…
課題 Lambda関数バージョンの細かいところが把握できていなかったため、確認。 解決 Lambda関数バージョンはいくつか貯まると古いものが消える。 10件が最大だった。しかしどこに記載しているかドキュメントを探したが見つからず。 自分で古いバージョンを消…
ふと昔の失敗を思い出したので書き留めておく。 何が起きたのか 目的をはき違えてはいけない 何が起きたのか 私がまだ駆け出しエンジニアであった20代前半の頃の話だ。当時、私は社内SEであった。 その日、私は販売の統括マネージャーにプレゼンテーションを…
AWS Lambda関数の本番デプロイについて検討したCI/CDをGitHub Actionsで実現する。 実現したいフロー 通知は何で行う? 関数のアップロードにTerraformは使わない? Lambda関数の関数バージョンはなぜ設定している? GitHub Actions 事前準備: Slack 参考 …
課題 Terraformは利用する変数を宣言しないとスクリプト内で利用することができない。 これは素晴らしい制約で、とんでもないところから謎の超スコープ変数が叩き込まれるのを防げて喜ばしいのだが、そうはいっても変数が大量に増えてくるととっちらかって管…
GitHub Flow / Git Flow LambdaのImmutableデプロイは可能か? SAMどうよ TerraformとAPI GatewayとSwaggerの兼ね合いどうしよう 参考 GitHub Flow / Git Flow 日常的にゴリゴリ更新していけるプロジェクトであればGitHub Flow、モバイルアプリのバックエン…
Pythonを使ったAWS LambdaはAWSのマネジメントコンソールから直接コーディングとテスト(とデバッグ)ができる。 が、コーディング時にVSCodeや周辺ツールが使えないのは辛い。それにローカル環境で行える作業とテスト/デバッグはローカルで行いたい。 先に…
Lambda 関数URLを使ってAPI Gatewayを通さず直接Lambdaにアクセスする機能を試してみた。 結論、どうなのか? Terraformを使ったコードの例 参考 結論、どうなのか? 便利なのだが簡易版といった趣で、不便な点もある。"やったぞAPI Gatewayがいらなくなった…
課題 Windows上でアクセスキーを使った作業をよく行っているのだが、GitHub上に作業内容を公開しているので、うっかりアクセスキーをアップしてしまわないとも限らない。 あってはならない事故ではあるが、やらかすときにはやらかすのが事故というものである…
課題 テストのため、AWS Lambda Function URLを持ったLambda関数の起動をローカルでも行いたい。最終的にAWS Lambda本体で行うわけだが、その前の段階ではローカルを使えたほうがよい。しかしにJSONを渡す必要があるが、どのようにすればよいか。 解決 pytho…
AWS Lambda関数の開発にあたり、Localでできる作業はLocalで行うにしても、やはりAWS上で動かさないと仕方ない部分が残る。 といって、いくら開発環境用だとしても、マネジメントコンソール上で編集するのはVSCodeの開発ツールが使えないので嬉しくないし、…
過去にWindows直でPythonをインストールして開発環境を作成した。用途はAWS Lambdaの関数作成である。 おおむね問題なかったのだが、ローカルの環境変数を読み込ませるいい方法がなく、結局コンテナ上でdirenvを使うことにした。どの道AWS LambdaはLinux上で…
課題 pytestでユニットテストを行うにあたり、例外を投げるタイプの関数をテストしたい。どのようにすればよいか。 解決 下記のようにpytest.raisesを使うと綺麗に書ける。公式参照。 def test_valid(): with pytest.raises(TypeError, match=r".*max length…
Pythonスクリプトのユニットテストをpytestで行ってみる。 pythonには最初からユニットテストを行う機能が付属しているのだが、2021 年 Python 開発者アンケートの結果によると一番人気はpytestであるため、普及率に合わせて――普及率は正義である。大抵こな…
AWS Lambda(Python利用)でcerberusを使いたいが、Lambdaにはこちらの欲しいライブラリがインストールされていないため当然ながらエラーになる。 そこでLayerを使って先に外部ライブラリを用意しておく。 準備 作成とアップロードの例 備考 参考 準備 WSLで…
課題 WSL上でUbuntuに様々なセッティングを試行錯誤しながら行ったのだが、おかげで大変中身が汚れてしまった。 そのまま使い続けると誤動作の元なのでリセットしたい。 解決 Windowsのプログラムと追加と削除 Ubuntu22を選んで詳細オプションを選択 "リセッ…
WindowsでLambda関数の開発を行うための開発環境を構築した件について記載する。 構成は以下の通り。 Windows 10 Home Edition Python3.9 Windows Terminal VisualStudio Code WSL2 + Ubuntu 22 Docker Desktop on Windows AWS CLI Python Windows Terminal,…
PythonスクリプトのバリデーションをCerberusで行うことにしたのはよいが、デフォルトでメールアドレスのチェックがない。 そこでCerberusに用意されている拡張方法を利用し、メールアドレスのチェックも行えるようにした。 Sample 参考 Sample 結論、こうす…
どこで値のチェックを行うか? バリデーション用のライブラリは何を使う? どこで値のチェックを行うか? 値のチェックにあたり、バリデーションをユーザー入力受付時に行うだけでなく、Entityの値入力時に行うと堅牢である。公式の例ではEntityでバリデーシ…
PythonスクリプトのバリデーションをCerberusで行ってみる。 Cerberus Install Example 使用感 参考 Cerberus Install pip install cerberus Example schema = { "name": { "type": "string", "required": True, }, } request_body = { "name": "me", } v = …
課題 AWS ToolkitとSAM CLIを入れて作業をしていたところ、F5キーでデバッグしようとしたら、その気はないのにLambdaが起動される問題が発生。 解決 ワークスペースの設定(.code-workspace)にデバッグ実行設定が追加されていたためだった。自分で追加した覚…
課題 Terraformのサンプルコード、それも断片的なものではなく、ある程度まとまったサンプルコードが欲しいが、Googleで検索してもみつからないことがある。 そのような場合はどこで探せばよいか。 解決 Terraform Registryを探してみる。 Discover Terrafor…
AWSリソースをTerraformで扱う際、もしも.tfstateファイルをS3に保存するなら事前にバケットを作成する必要がある。 その際の手順を記載する。 ただしDynamoDBを用いてのロックは行っていない。 S3 Bucketの用意 Bucketの作成コマンド その他 参考 S3 Bucket…
課題 下記のようなコードで、Terraformのモジュールのディレクトリからfile()を使ってファイルを読もうとすると、 resource "aws_iam_policy" "send_mail" { name = "${var.env}-lambda-send-mail" path = "/" description = "For IAM Role, ${var.env}-lamb…
Windows+VSCodeでTerraformを使うための開発環境を用意する方法について記載する。 VSCode、Terraformはインストール済という前提。 Linter(tflint) Install VSCodeとの連携 Formatter Install VSCodeとの連携 Linter(tflint) Install https://github.com/te…
自サイト用のインフラをTerraform管理に移行するにあたり、まず既存のリソースをコード化する必要があった。 そこでterraformerを利用し、既存リソースを元にScaffoldingを行うことにした。 Terraformer のInstall Usage Terraformer のInstall 公式の手順通…