2022-01-01から1年間の記事一覧

S3のバケットをどのように分けるか?

S3を利用するにあたっては、通常、いくつかのバケットに分けて利用することになる。一つのバケットに全部おさめるとバケットの中がカオスになるからだ。 だが思いつき次第にバケットを作っていくのも不味い。今度はS3自体がカオスになってしまう。そもそも1…

Next.jsで静的HTMLエクスポートをするとリンク先が変わる

課題 Next.jsで静的HTMLエクスポートをすると、各ページごとに*.htmlの拡張子が付いたHTMLファイルが作られる。 ところが、このためにhttps://www.example.com/contactではリンクが繋がらず、https://www.example.com/contact.htmlとしなければいけなくなっ…

MUIを使って個人サイトをリニューアル

Next.jsで個人サイトをリニューアルするにあたり、MUIのテンプレートがFreeかつ便利そうであったため、これを採用することにした。WEBデザインまでは手が回らない自分にとり、テンプレートはありがたい存在である。自前で一からデザインするより早いし高クオ…

API GatewayをTerraformで構築するのはあまり向かないかも

AWS Lambda + API Gatewayでサーバーレスのメール送信関数を用意することにした。 そして、そのインフラ構築にTerraformを利用してみたのだが、結論、API GatewayとTerraformはどうにも相性がよくないように思われる。 なにが困るのか ではどうするか なにが…

Error: Image Optimization using Next.js' default loader is not compatible with `next export`.

課題 Next.jsで作成したアプリケーションを静的ウェブサイトとしてExportしたい。そこでpackage.jsonのbuildの箇所を書き換えた上で "scripts": { "dev": "next dev", "build": "next build && next export", <----ここ "start": "next start", "lint": "nex…

はてなブログで画像を利用する

はてなブログに画像を投稿したいが、記事をすべてgit管理しているためブログ投稿画面から画像を投稿する通常の手順が使いづらい。 画像を大量にGitに保存するのもあまり好ましいことではない。というわけで少しばかりひねった解決策が必要となった。 やりた…

Next.jsをインストールして動かしてみる。(Windows)

やったこと やったこと 手順はこちらにある。 https://nodejs.org/en/ からNode.jsをDownloadしてインストール npx create-next-app@latest --typescriptと打ち、対話式でプロジェクト名を聞かれるため入力。今回はpersonal-website。 typescriptを使いたい…

AWS利用時のセキュリティについて考えた際のメモ(2022/10)

AWSのセキュリティ関連知識の復習のため、AWS認定 セキュリティ-専門知識を読んだときのメモ。 セキュリティ意識の高まり 数年前は影が薄かったセキュリティ用のサービスも、今や使って当然のものになりつつある。昔はCloudTrailとConfigさえも恐る恐るそっ…

.tfvarsをDRYに保つには?

課題 同じ設定であれば、設定ファイル(*.tfvars)をコピーして各ディレクトリに置くのではなく、共通の設定ファイルとして読み込むようにしたい。 だがTerraformに外部ファイルの読み込みらしき機能が見当たらない。どうすればよいか。 解決 実行時に-var-fil…

GitHub ActionsにAWS リソースへのアクセス権を渡すには?

課題 解決 その1 アクセスキーを払い出す その2 OpenID Connect + Role 参考 課題 GitHub ActionsでAWSのリソースを操作したい場合、当然に権限を持つ必要がある。 どうすればいいか。 解決 その1 アクセスキーを払い出す まず思いつくのは専用のIAMユー…

GitHub Actionsの手動起動ボタンが出ない場合のヒント

課題 解決 参考 課題 GitHub Actionsでも手動起動が可能なはずだが、あるはずのボタンがない。なぜか。 解決 workflow_dispatchをファイル内で指定する必要がある。 on: workflow_dispatch: inputs: env: description: "environment" required: true default…

雑感: ヘッドレスCMS、ヘッドレスコマース、マイクロサービス

最近ヘッドレスCMSやヘッドレスコマースの名をちょくちょく目にするようになってきた。 聞けばAPIだけ提供してフロントは自由に作るというものだそうである。発想自体は割合昔からあったと思う。自分も数年前に考えたことがある。負荷をS3(とCloudFront)に…

【考察】見積もりようがないプロジェクトをどう管理すべきか?

規模がわからないプロジェクト、というものが時折ある。やったことがないので試算の根拠がない、そもそも発注者がなにをしたいのか自分でもわかっていない(!)、そんなプロジェクトである。 だが、そんな曖昧な状態であっても、やるからにはプロジェクトを…

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

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

AWS Innovate "クラウドネイティブ開発の今 ~ クラウドの特性をフルに活用した開発と運用 ~ (T1-1)"を見ていて

AWS Innovateの"クラウドネイティブ開発の今 ~ クラウドの特性をフルに活用した開発と運用 ~ (T1-1)"を見ていた時のメモ メモ クラウドネイティブ IaCでインフラ構築作業を自動化できる、反復できるのをポイントとしていた。これの前にあった課題は固定的…

AWS Innovate "もはやアンチパターンではない、AWS Lambda からのリレーショナル・データベース利用 (T4-5)"を見ていて

AWS Innovateの"もはやアンチパターンではない、AWS Lambda からのリレーショナル・データベース利用 (T4-5)"を見ていた時のメモ メモ LambdaからDBをつなぐ際、Writeのスケーリングはどうすんの スケールアップ セッションの中では触れられなかったけどAuro…

Lambda関数バージョンの性質

課題 Lambda関数バージョンの細かいところが把握できていなかったため、確認。 解決 Lambda関数バージョンはいくつか貯まると古いものが消える。 10件が最大だった。しかしどこに記載しているかドキュメントを探したが見つからず。 自分で古いバージョンを消…

失敗談:UMLのシーケンス図をドヤ顔でプレゼンに使ってヒエッヒエ

ふと昔の失敗を思い出したので書き留めておく。 何が起きたのか 目的をはき違えてはいけない 何が起きたのか 私がまだ駆け出しエンジニアであった20代前半の頃の話だ。当時、私は社内SEであった。 その日、私は販売の統括マネージャーにプレゼンテーションを…

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

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

Terraform の変数のとっちらかりをどうにかしたい

課題 Terraformは利用する変数を宣言しないとスクリプト内で利用することができない。 これは素晴らしい制約で、とんでもないところから謎の超スコープ変数が叩き込まれるのを防げて喜ばしいのだが、そうはいっても変数が大量に増えてくるととっちらかって管…

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がいらなくなった…

githubにAWSアクセスキーをうっかり公開した(しかけた)場合への備えを用意する(Windows)

課題 Windows上でアクセスキーを使った作業をよく行っているのだが、GitHub上に作業内容を公開しているので、うっかりアクセスキーをアップしてしまわないとも限らない。 あってはならない事故ではあるが、やらかすときにはやらかすのが事故というものである…

ローカルで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で…