シ〜らかんす

プログラミングとか、カメラとか。

【aws-sdk-go-v2 & Datadog】LambdaからDatadogにトレースを送る方法

概要 lambdaでaws-sdk-go-v2を使って行う処理のトレースをDatadogに送る方法を記載する。 前提条件 Datadogのアカウントで、API Keyが発行済みであること AWS Lambdaをコンテナイメージで動かせること 動作環境 AWS Lambda(コンテナイメージで動作) Go 1.22…

【flutter freezedライブラリ】copyWithの引数にnullを渡す時の挙動に注意しよう

概要 flutterのfreezedライブラリを使ってモデルを定義し、コードを生成するとimmutableなオブジェクトを定義してくれる。 このオブジェクトには、copyWithというメソッドが付いており、引数で与えられた属性値でオブジェクトを初期化して返してくれるのだが…

Go gin & Web Adapterで動作するLambdaからDatadogのトレースを送信する

概要 AWS Web Adapterというものがあり、ウェブAPIのコードをそのままにサーバーレス化することができる。 aws.amazon.com これいいじゃんということで、GoのGinで動くウェブAPIをサーバーレス化したのだが、以前のECS Fargate環境では正常に動作していたDat…

Lambda Web AdapterでGoのGinを動かすときに、DBコネクションの貼りすぎを防ぐ

概要 Lambda Web Adapterを使うと、それまで非サーバーレス環境下で動かしていたウェブAPIをLambda上で動かすことが可能になる。 コンテナイメージさえあれば、web APIをサーバーレス化できるし、コードの共通化も容易になって便利だ。 ただし、RDSと接続す…

ALBをトリガーにLambdaを起動する構成をTerraformで作ってみた

概要 HTTP APIをLambdaで動かすときは、AWS Apigateway & Lambdaの構成を取ることが多いが、今回はALBをトリガーとしてLambdaを動かす機会があったので、terraformでの作り方をまとめる。 LambdaをTerraformで作成する まずは、Lambdaを作る。 resource "aws…

Redisへの大量データインサートには、パイプラインを使おう

背景 Redisにダミーデータを投入するpythonスクリプトを使っていた。 データ件数が少ないうちはよかったのだが、多数のデータを入れるようになると、時間がかかりすぎて辛くなってきた。 パイプラインを使い、Redisとの通信ラウンドトリップを減らす Redisの…

ECRセキュリティスキャンの結果をslackに通知する

構成図 以下の通り、ECR セキュリティスキャン -> AWS Event Bridge -> SNS -> Chatbot -> slack という流れで通知ができる。 ECRセキュリティスキャンをEventBridgeのイベントとして使う 多くのAWSの各マネージドサービスが、自らEventBridgeにイベントを送…

Github ActionsからAWS SSMのRun Commandを使う

動作環境 AWS EC2(Red Hat Enterprise Linux 8.4 ) やりたいこと mainブランチへのマージをトリガーに、EC2上で git pull コマンドを実行して最新のコードを反映させたい というのが今回のやりたいことです。 前提 EC2がRunning状態である ec2-userでgitコ…

Linux(RHEL8)でロケール設定を行う

動作環境 AWS EC2 Red Hat Enterprise Linux 8.4 ロケールとは ロケールとは、コンピュータにおける言語や地域の設定のことです。 たとえば、日本に設定した場合は、言語は「日本語」、通貨は「円」といった日本地域固有の情報を使ってユーザーとコンピュー…

Linux(RHEL8)でtimezoneをjstにする

実行環境 AWS EC2 RHEL8 変更前の設定を確認 timedatectlコマンドで現状のtimezone設定を確認します。 $ timedatectl status Local time: Sun 2021-08-15 09:08:12 UTC Universal time: Sun 2021-08-15 09:08:12 UTC RTC time: Sun 2021-08-15 09:08:12 Time…

ghq & hubを使って、organizationの全リポジトリをcloneする方法

最初に結論から hubとghqを利用すると、orgs配下の全てのリポジトリをcloneすることができます。 転職したときなど、新しいorgに参加した際の初期セットアップの際に便利です。 導入の動機は? 転職した会社のリポジトリをとりあえず全部cloneしようと思った…

【Python】検索の速度なら、配列よりも辞書が優秀という話

どうも、駆け出しのエンジニアのMasaです! 今回は、Pythonの配列(list)と辞書(dict)の検索速度の違いについて書きたいと思います。 この記事で書いていること まずは結論から。 特定のデータを保持しているか検索する際、dictのkeyを使う方が、listを使…

【LeetCode道場】26. Remove Duplicates from Sorted Array

何を書いている記事なのか LeetCodeというサイトでプログラミングの問題を解きながら、効率の良いコードを書けるようになるよう修行しています。 その過程をブログに残しておこうと思い、書きました。 私の最初の回答、リファクタリング後の回答、その他気づ…

【Python】argparseで任意引数を受け取る方法

pythonで引数を受け取る方法 argparseというライブラリを使うと、簡単に引数を足すことができます。 import argparse def main(start_at, end_at): do_something if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument("start…

【Django】モデルの複数カラムをセットでユニークに設定する方法

いつもやり方忘れてしまうので、メモ。 単一カラムに対するユニーク設定 djangoでモデルのあるカラムをユニークにするには、 以下のようにモデル定義のオプション引数として unique=True を渡してやればOKです。 from django.db import models class SomeMod…