kakakakakku blog

Weekly Tech Blog: Keep on Learning!

Amazon API Gateway の Lambda オーソライザーで "User is not authorized to access this resource" と出たら

Amazon API Gateway の Lambda オーソライザー(旧カスタムオーソライザー)を使ってアクセス制御をするときに,Authorization ヘッダーは正しいはずなのに {"Message":"User is not authorized to access this resource"} というエラーが出てしまう場合,La…

CloudFormation の IaC ジェネレーター機能をサクッと試せる「IaC Generator Workshop」

2024年2月にリリースされた AWS CloudFormation の「IaC ジェネレーター機能」を使うとマネジメントコンソール・AWS CLI などを使って作った(作ってしまった)リソースをスキャンして,自動的に AWS CloudFormation テンプレート化 (YAML / JSON) できる❗️…

GitHub Actions でワークフローの同時実行を防ぐ concurrency 設定

GitHub Actions ではデフォルトの挙動として同じワークフローの複数のジョブを同時実行できる.無駄に待つ必要がないという意味ではメリットがあるけど,ワークフローによっては同時実行したくないこともあると思う. GitHub Actions でワークフローが複数ト…

自信を持って pytest を活用するためのノウハウが凝縮された「テスト駆動 Python 第2版」を読んだ

「テスト駆動 Python 第2版」を読んだ 仕事で pytest を使ってて,もっと自信を持って書けるようになりたいな〜と思っていたら本書を見つけてさっそく読んでみた.pytest の機能・記法・設定・Tips などの理解が深まって本当に読んで良かった❗️フィクスチャ…

pytest の capsys で stdout(標準出力)と stderr(標準エラー)をテストする

pytest の capsys を使うと Python スクリプトで出力する stdout(標準出力)と stderr(標準エラー)をテストできる❗️関数の実行結果ではなく,その途中に出力するログに着目したい場面もあって便利〜 \( 'ω')/ docs.pytest.org src/app.py hello() 関数…

Terraform で無料利用枠の VPC IP Address Manager (IPAM) を設定する

2023年11月から VPC IP Address Manager (IPAM) に「無料枠利用枠」が追加されて Public IP Insights などの機能が無料で使えるようになったそして,2024年2月から課金対象になった IPv4 の最適化のために Public IP Insights を使いたいという場面もあると…

AWS CDK で外部パッケージを含む Python の AWS Lambda 関数をデプロイする

AWS CDK で外部パッケージを含む Python の AWS Lambda 関数をデプロイする場合,requirements.txt から依存関係を解決して,デプロイするアセットとして ZIP にまとめる(バンドルする)必要がある 今回は aws-cdk-lib.aws_lambda module と @aws-cdk/aws-l…

JSON Schema で簡単にバリデーションを実装できる Powertools for AWS Lambda (Python) の Validation

Powertools for AWS Lambda (Python) の「Validation」を使うと AWS Lambda 関数に渡されたイベント情報のバリデーションを JSON Schema に沿って実現できる.例えば,必須パラメータ・文字数制限・ENUM・正規表現などをチェックできる Powertools for AWS L…

testcontainers-python: pytest 実行時に使い捨て可能な LocalStack を起動する

Testcontainers を使うと,テストコードを実行するときに必要になるデータベース・キャッシュ・キューなどの依存関係をコード上で管理できて,実行後にはコンテナを自動的に消してくれるという使い捨て可能な仕組みを簡単に作れる❗️Testcontainers のサイト…

Lambda オーソライザーのポリシーを簡単に出力できる Powertools for AWS Lambda (Python) の APIGatewayAuthorizerResponse

Amazon API Gateway の Lambda オーソライザー(旧カスタムオーソライザー)を使ってアクセス制御をするときに Lambda オーソライザーの仕様に沿ったポリシーを出力する必要がある詳しくは以下のドキュメントに載っている. docs.aws.amazon.com 今まではド…

source-version-override: aws-actions/aws-codebuild-run-build でプルリクエストブランチを AWS CodeBuild のビルド対象にする

AWS CodeBuild Run Build for GitHub Actions (aws-actions/aws-codebuild-run-build) を使って GitHub Actions から AWS CodeBuild のビルドを実行すると buildspec.yml やビルド環境タイプを上書きできて便利〜という話は前にまとめた kakakakakku.hatenab…

AWS CDK で Amazon EventBridge Pipes の「ターゲット入力トランスフォーマー」を設定する

AWS CDK で Amazon SQS x Amazon EventBridge Pipes x AWS Step Functions の構成を設定する流れは前にまとめた kakakakakku.hatenablog.com 前にまとめた設定では Amazon SQS キューに登録したメッセージをデフォルト設定のまま Amazon EventBridge Pipes …

Dependabot で Terraform Provider を自動的にアップデートしよう

Dependabot version updates を使うと Terraform Provider のアップデートを自動化できる❗️設定は比較的簡単で package-ecosystem に terraform を設定して,あとは必須の directory と schedule.interval でアップデートの対象ディレクトリとスケジュールを…

AWS CDK の DockerImageAsset と cdk-ecr-deployment でビルドしたイメージを Amazon ECR に保存する

AWS CDK で「Dockerfile をビルドして Amazon ECR リポジトリにイメージを保存する」選択肢として DockerImageAsset と cdklabs/cdk-ecr-deployment を紹介する❗️ aws_ecr_assets.DockerImageAsset を使う まず,1番簡単なのは aws_ecr_assets.DockerImageAs…

Terraform で「最新の」Amazon ECS タスク定義を追跡できる aws_ecs_task_definition の track_latest オプション

Terraform で Amazon ECS タスク定義を作りつつ,アプリケーションのライフサイクルとして GitHub Actions などの「Terraform 以外で」イメージタグを差し替えて Amazon ECS タスク定義を更新(正確には更新ではなくリビジョン追加)する運用を選択すること…

位置情報や地図を仕事で使う前のキャッチアップに最適な「現場のプロがわかりやすく教える位置情報エンジニア養成講座」を読んだ

「現場のプロがわかりやすく教える位置情報エンジニア養成講座」を読んだ 今まで GIS: Geographic Information System など位置情報を取り扱うための技術的な知識や経験がなく,地図アプリケーションを使うと「便利だな〜w」という感想しか出てこないような…

Habitify API で習慣データを取得しよう

2024年から Habitify で個人的な習慣化の管理をしていて,もうとにかく便利で毎日の習慣化を支えてもらっている❗️朝活・読書・サプリメントなどを記録しつつ,Habitify のチャレンジ機能を使って毎日プランクを続けていたりもするHabitify は無料でも十分使…

GitHub Actions から AWS CodeBuild のビルドを実行できる「aws-actions/aws-codebuild-run-build」

AWS CodeBuild Run Build for GitHub Actions (aws-actions/aws-codebuild-run-build) を使うと GitHub Actions から AWS CodeBuild のビルドを実行できる github.com シンプルに AWS CodeBuild のビルドを実行するだけなら project-name パラメータを指定す…

Dependabot で AWS CDK を自動的にアップデートしよう

Dependabot version updates を使うと package.json に指定しているパッケージのアップデートを自動化できる❗️設定は比較的簡単で package-ecosystem に npm を設定して,あとは必須の directory と schedule.interval でアップデートの対象ディレクトリとス…

Python の独自パッケージを作って AWS CodeArtifact で管理する

開発チームで共通的に使うコードを独自ライブラリ(パッケージ)にして管理したい場面はあると思う.今回 AWS CodeArtifact で管理する流れを試す❗AWS CodeArtifact は npm / pip / Maven など複数のパッケージマネージャーをサポートしているけど,今回は p…

AWS Lambda 関数 (Python) の import 時間を計測しよう / -X importtime オプション or 環境変数 PYTHONPROFILEIMPORTTIME

AWS Lambda の初期化フェーズ (INIT) は「10秒」に制限されている.例えば,AWS Lambda 関数の「ベストプラクティス」を意識してハンドラ外に実装した処理が長くなったり,AWS Lambda 関数 (Python) で機械学習系のライブラリなどを多く import しようとして…

AWS CDK の cdk import コマンドを使って既存リソースをインポートする

AWS CDK の cdk import コマンドを使って既存リソースをインポートする(取り込む)手順を試してみた❗️何かしらの理由があって Infrastructure as Code (IaC) に組み込めず,そのままプロダクションにリリースされてしまうということもあると思う. Amazon S…

AWS CodeBuild の buildspec.yml でコマンドに改行を含める

AWS CodeBuild の buildspec.yml でコマンドに改行を含める場合は以下のように記述できる❗ コマンドのオプションが多かったりすると改行したくなることもあると思う \( 'ω')/ 1. シンプルに改行する バックスラッシュ \ を含めずシンプルに改行すれば OK …

GitHub Actions で [skip ci] のような「カスタムメッセージ」でワークフローを制御する

GitHub Actions を使っていて,コミットはプッシュするけどビルドはまだ実行したくないというときに [skip ci] をよく使っている.GitHub Actions では2021年にサポートされていて,他にも [no ci] や [skip actions] などのメッセージも使える docs.github.…

トラフィックの急増に耐えられるソリューション!? Virtual Waiting Room on AWS を試した

AWS

ウェブサービスのトラフィックが急増して障害が発生してしまうことはあると思う.そういうときにリクエストを一時的にバッファリングして,適切に入場制限をする仕組みとして「Virtual Waiting Room(仮想待合室)」という仕組みがある.実際にショップ・病…

AWS CDK で AWS CodeBuild の GitHub Webhook を設定する

AWS CodeBuild で GitHub リポジトリにプッシュをしたら Webhook 経由で自動的にビルドを開始する構成を AWS CDK で実装してみたちなみに AWS CDK で AWS CodeBuild の Webhook を設定するだけだと以下のように Failed to call CreateWebhook というエラーが…

AWS CDK でリソースに一括でタグを設定する

AWS CDK を使っていてリソースに「一括でタグを設定したい」と思ったら Tags.of(SCOPE).add() を使えば簡単に設定できるTags.of に指定する SCOPE は IConstruct インタフェースを実装していれば良くて App も Stack も指定できる docs.aws.amazon.com App(…

Cyber-Dojo で Fizz Buzz の次におすすめするエクササイズ5選

環境構築に悩むことなくペアプログラミング・モブプログラミングの練習ができるので「Cyber-Dojo」をよく使っていて,モブプログラミング未経験のチームに導入を支援するときにも使っている Cyber-Dojo には数年前に紹介した「結果予測機能」もあってテスト…

AWS CDK で Amazon CloudWatch Alarm の AWS Lambda アクションを設定する

2023年12月のリリースで Amazon CloudWatch Alarm から直接 AWS Lambda 関数を呼び出して,何かしらのアクション(復旧処理など)を実行できるようになった❗️今までは Amazon SNS と組み合わせて実行する必要があって,今までよりもシンプルに統合できるよう…

Terraform の count で制御したリソースを one 関数で output する

Terraform で count Meta-Argument を if のように使ってリソースを作るかどうかを制御できるという Tips がある.リソース間で参照するときは,同じく count で制御しつつ,例えば aws_iam_user.kakakakakku[0].name のようにインデックスを指定できるけど…