ダメ元エンジニアのお勉強おメモ

ほとんど自分用のメモです。AWS をよく触ります。Web アプリとか作ります。Raspberry Pi も好きです。

DynamoDB で GSI に対して強力な整合性のある読み込みはできない

参考 dev.classmethod.jp ただし、グローバルセカンダリインデックス (GSI)で「強力な整合性のある読み込み」が利用できないことは忘れないで下さい。 経緯 Lambda で DynamoDB のテーブルに対して「強力な整合性のある読み込み」をしようと思ったらエラーが…

Route 53 のヘルスチェックで異常状態を通知する CloudWatch Alarm 及び SNS Topic はバージニア北部リージョンに作成される

参考 docs.aws.amazon.com Route 53 コンソールで CloudWatch のメトリクスを表示するには AWS マネジメントコンソール にサインインした後、https://console.aws.amazon.com/cloudwatch/ にある CloudWatch コンソールを開きます。 現在のリージョンを [米…

Route 53 がエンドポイントをヘルスチェックする場合の挙動に関するメモ

参考 docs.aws.amazon.com メモ デフォルトでヘルスチェッカーの数は8リージョン * 2の計16個(2021/06/01 時点) 高度な設定にてリージョンを選択可能 最低でも3リージョンは選択する必要がある = 最低でも6つのヘルスチェッカーが走る ヘルスチェックが異…

グローバルテーブルを設定した DynamoDB テーブルに対して、強い整合性のある読み込みをしても失敗する場合に確認すること

原因 例えば、東京/シンガポールリージョンでグローバルテーブルの設定をした DynamoDB のテーブルが存在するとして、 両リージョンで用意している同じコードの Lambda が、下記のように実装されている場合。 import * as DynamoDB from 'aws-sdk/clients/dy…

【AWS CDK】CI ツールからデプロイした際に「Bucket named 'cdktoolkit-stagingbucket-xxxxx' exists, but not in account ************. Wrong account?」と怒られた場合の対処法

概要 私の場合は、CircleCI からデプロイしようとしたところで、下記エラーが発生した。 ちなみに、$ cdk bootstrap は既に実行済みの状態である。 $ yarn deploy ... [50%] fail: Bucket named 'cdktoolkit-stagingbucket-xxxxx' exists, but not in accoun…

【AWS CDK】Lambda 作成と同時にロググループも作成する方法

環境 $ cdk version 1.102.0 (build a75d52f) 結論 logRetention の設定を付けてあげるとロググループも作成してくれる。 new lambda.Function( this, 'HelloFunction', { code: lambda.AssetCode.fromAsset('dist/hello'), functionName: 'hello', handler:…

AWS Chatbot で Slack のプライベートチャンネルに連携する場合は /invite @aws する必要がある

AWS

結論 下記のコマンドをプライベートチャンネルで叩きましょう。 /invite @aws ここに書いてあった。 dev.classmethod.jp AWS Chatbot から Slack のチャンネルに連携する手順は下記が参考になる。 aws.amazon.com

API Gateway で構築した REST API の存在しないパスへアクセスされた場合に 404 エラーを返したい

概要 API Gateway で構築した REST API の存在しないパスへアクセスされた場合、デフォルトだと 403 エラーで下記が返る。 {"message": "Missing Authentication Token" } 存在しないなら 404 エラーとして返したいよねって気持ちになった際の対処法を記載す…

Cognito の JWT を TypeScript で検証する方法 - async / await で

ソースコード こんな感じになる。 import * as Console from 'console'; import { promisify } from 'util'; import jwt, { JwtHeader, TokenExpiredError } from 'jsonwebtoken'; import jwksClient from 'jwks-rsa'; const AWS_REGION = process.env.AWS_R…

Lambda が実行されているリージョンを知りたい時は勝手に作られる環境変数「AWS_REGION」を使えば良い

結論 東京リージョンでデプロイした Lambda で下記を実行するとap-northeast-1が出力される。恥ずかしながら知らんかった。 console.log("region:", process.env.AWS_REGION); // region: ap-northeast-1 他に予約されている環境変数は下記を参照。 docs.aws…

API Gateway + Lambda で構築した REST API がタイムアウトを起こした場合のステータスコードは 502 と 504 のケースがある

概要 API Gateway と Lambda のタイムアウト秒数の関係により、502 or 504 が決まるみたい。 502 になるケース API Gateway のタイムアウト秒数 > Lambda のタイムアウト秒数の場合に 502 エラーとなる。 例えば、API Gateway のタイムアウトが29秒、Lambda …

Swagger v2.0 で指定できる認証方法を全て試してみる

概要 Swagger v2.0 では下記の認証方法を指定することができる。 Basic 認証 OAuth 2.0 API キー 認証 securityDefinitions にて認証方法の定義を記載して、メソッド内の security にて紐付ける。 今回は試しに各認証方法の定義 & メソッドに紐づけてみた。 …

マネコン上で ACM にある証明書が「使用中」で削除できない場合の対処法

対処法 AWS CLI から削除すれば通る。 $ aws acm list-certificates { "CertificateSummaryList": [ { "CertificateArn": "arn:aws:acm:ap-northeast-1:xxxxxxxxxxxx:certificate/hogefugapiyo", "DomainName": "example.com" } ] } $ aws acm delete-certif…

【Shell 小ネタ】echo で JSON を出力する

概要 表題通り。 echo で JSON を出力する際、変数をダブルクォートで囲むかどうかで改行の有無が変わる。 src $ JSON=$(cat << EOS { "hoge": "fuga", "foo": "bar" } EOS ) $ echo ${JSON} { "hoge": "fuga", "foo": "bar" } $ echo "${JSON}" { "hoge": "…

【Shell 小ネタ】~/.profile 内の export を UPSERT する

概要 ~/.profile 内で環境変数が export されていなければ追記、されていれば値を変更する。 src grep -q "^export HOGE=" ~/.profile && \ sed -i "s/^export HOGE.*/export HOGE=\"value\"/" ~/.profile || \ echo "export HOGE=\"value\"" >> ~/.profile …

【Buster版】Raspberry Pi で 指紋センサ ZFM-20 を使う

【概要】 4年前に投稿した以下の記事は wheezy 版で古いので Buster 用の記事を書きます。 rasp.hateblo.jp 【環境】 $ lsb_release -a No LSB modules are available. Distributor ID: Raspbian Description: Raspbian GNU/Linux 10 (buster) Release: 10 C…

AWS SAA に合格したお話

【概要】 AWS ソリューションアーキテクトアソシエイト に合格しました。Retiringと記載があるように新しいバージョンではないです。勉強期間は大体3週間くらい。 820点だから8割取れてないくらいかな?せっかくなので合格するためにやったことだったり、 受…

依存関係に潜在的なセキュリティ脆弱性が見つかりました

【概要】 ...を解決した際のメモ。↓これ。結構色んなリポジトリに影響があって直すのが大変だった。 2つパターンがあったので書いていこうと思います。 【NCUを使って解決する】 NCU (npm-check-updates) を使ってパッケージのバージョンを 上げることで簡単…

準100日連続コミットを達成した!!

github.com 【概要】 2019/12/01 からコミットを続けて 100日 が経過しました! 途中、0コミットの日が1日あるので準100日連続コミットです(笑)ちなみに業務とは全く関係ない個人のGitHubアカウントです。この100日間はコミットを続けることを第1目標に生…

【随時更新】React+Redux, Redux-Sagaの理解に役立った記事まとめ

【概要】 タイトル通り、React+Redux, Redux-Sagaを理解するにあたり、 参考にさせて頂いた記事のまとめです。Redux-Sagaに初めて触れた時、意味不明すぎてパニックになりましたが、 何とかサンプルコードを書くことができました。ありがとうございました。 …

macOSにFritzingをインストールする

【概要】 Fritzing を覗くと、 課金しないと落とせないっぽくなっていたのですが、 普通にbrewでインストールできたというお話。良かった。 【環境】 $ sw_vers ProductName: Mac OS X ProductVersion: 10.14.5 BuildVersion: 18F132 【手順】 $ ruby -e "$(…

JestでTypeScriptのテスト(最低限の設定)

【概要】 Jestを使ってTypeScriptのテストをやろうと思ったら、 なかなか上手くいかなかったのでメモを残しておく。と言っても、参考サイトまんまな部分が多いです。 あと、yarnではなくnpmを使って環境を整えます。 【環境】 $ sw_vers ProductName: Mac OS…

GolangでAmazon S3を操作しちゃうサンプル

【概要】 タイトル通り。 あんまりまとめる時間が無いので、超絶ざっくり書いてます。 【環境】 $ sw_vers ProductName: Mac OS X ProductVersion: 10.14.5 BuildVersion: 18F132 $ go version go version go1.12.5 darwin/amd64 【準備】 $ go get github.c…

Herokuで定期的にメールを配信する【Python, SendGrid】

Herokuで定期的にメール配信をするための手順メモ。Herokuのアドオン「Heroku Scheduler」で定期的な処理を行う。 メールの配信には「SendGrid」を用いる。【環境】 $ sw_vers ProductName: Mac OS X ProductVersion: 10.14.3 BuildVersion: 18D109 $ heroku…

【Heroku】HerokuアプリをGit Cloneする

新しく購入したMacBook Proに、HerokuアプリをGit Cloneしたので、 その手順をメモします。【環境】 $ sw_vers ProductName: Mac OS X ProductVersion: 10.14.2 BuildVersion: 18C54 $ brew --version Homebrew 2.0.2 Homebrew/homebrew-core (git revision …

【jQuery】deferred done / always の実行順序

jQueryのdeferredやら$.ajaxのコールバックとして指定する、 done(or fail) と always の実行順序を明確にする必要があったためメモる。 【環境】 jQuery: 3.3.1 Chrome: 72.0.3626.109 【結論】 先に指定した方が勝つみたい。要するにFIFO。 以下のように書…

Raspberry PiでUSBメモリを使用する

・参考 Raspberry PiでUSBメモリを使う | Ken's blog @teaplanet 1. USBメモリを自動認識させる ~$ sudo apt-get install usbmount 2. USBメモリを挿す 3. ディレクトリの移動 ~$ cd /media/usb0 4. 使い終わったらアンマウント ~$ sudo umount /dev/sda1

【Raspberry Pi】指紋センサ ZFM-20

【 2020/06/27 追記】Buster 版の記事を公開しました! rasp.hateblo.jp以下は、wheezy 版の記事です。 * * * * * * * * * * Raspberry Piで指紋センサ「ZFM-20」を使うために2日間ググりまくったのでメモ。 1, ライブラリのインストール↓海外の方がArduino…

PythonとOpenCVで画像処理⑤【トラックバー】

*OpenCVのバージョンは2.4.1です【トラックバーの生成】 createTrackbar関数を使えばトラックバーを生成できる cv2.createTrackbar(トラックバー名, ウィンドウ名, 最小値, 最大値, 関数名) トラックバーの値を変更したとき、指定した関数が実行される 引数…

PythonとOpenCVで画像処理④【マウスイベント】

*OpenCVのバージョンは2.4.1です【元の画像】 *Raspberry Piのカメラで撮影したのでサイズが大きめです 【マウスイベント】 setMouseCallback関数を使えばマウスイベント時の処理をセットできる cv2.setMouseCallback(画像, 関数名, 関数に渡すパラメータ)…