先日、S3 に AWS SDK 経由で画像を保存して、その画像を Chrome で表示しようとしたところ画像がダウンロードされてしまうという現象に遭遇しました。
aws (14)
cdk v2がstableになったのでバージョンを上げてみました。1.78.0からの大ジャンプでしたが、私の場合は特に大きな問題が起きませんでした...本当か?みたいな気分です。
今回は仕事でもプライベートでもお世話になっている API Gateway + Lambda + GitHub Actions での私的ブルーグリーンデプロイを考えてみました。
Serverless Framework (sls) で API Gateway + Lambda で SSR を構築する文献は多いのですが、SAM や CloudFormation に慣れている身としてはどうも sls は取っつきづらくインフラコードが SAM で完結すると嬉しい。ということで SAM で SSR するコードを考えてみた。
Jestとaws-lambda-mock-contextでテストする際に、timeoutを調整する場合は、template.yml側ではなく、mock-contextでオプションを指定して調整すること。
先日、Nuxt/CloudFront(OAI)/S3でJamstackした際に、'/XXX/favicon.ico is not found'と出るので、Lambda@Edgeでリクエストを操作して、/XXX/favicon.ico -> /favicon.icoになるように対応しました。他にも細かいリダイレクト設定を施したので、対応コードを残しておきます。
Lambda@Edgeがサポートされているリージョンはus-east-1であるため、SAM等で開発した場合は、us-east-1のs3にテンプレートを保存してデプロイする必要があります。
SAMでSendGridをコールするAPIを作っているとJestのテスト時にNetworkErrorに遭遇しました。結論、Jestのテスト環境の設定をデフォルトの'jsdom'から'node'に変えることで解決。原因はハッキリと言えないのですが、node環境下でサーバサイドを組んでいるのなら環境を'node'にしてテストするのが当たり前っぽいです
私は下記の観点のもと AWS CLI を Python のバージョン・パッケージ管理と仮想環境を使ってプロジェクト単位でインストールしています。身も蓋もないですが、ローカル環境をあまり汚したくない。Python のパッケージ管理で AWS CLI 自体のバージョン管理が行える。パッケージ + Git 管理下で、新たな端末または他者にも AWS CLI の環境構築が展開しやすくなる。CICDツール や AWS の CodeDeploy を導入している際にどの道必要となる場合がある。
LambdaでスクレイピングしたくてSeleniumやChromeDriverでゴニョゴニョしたのですが、案の定エラーでした。結果的にPython、Selenium、ChromeDriver、serverless-chromeの各バージョンを揃える必要がありました。
CognitoでemailをSDKで変更すると、確認コードが未検証のまま変更アドレスでアクセスができてしまいます。バグっぽくて公式な対応はまだなのですが、GithubのIssueに有志の方が対応策を上げてくれています。対応策はAmplifyベースですが、今回はそれをJavaScriptSDKをベースに実装してみました。
CodePipeline で CI/CD を組んでいると各ステージの進捗状況や結果を CloudWatch と SNS を使って Slack 等に通知されている方もいるかと思いますが、これを CodeStar Notifications と言うサービスの通知機能を使えば簡単に代替することができます。今回は CodeStar Notifications + SNS + Lambda を使って CodePipeline の状態通知を Slack に送信する仕組みを作ってみます。
Lambda から Slack への通知は昔からこすられてるネタですが、わざわざ AWS SAM CLI を使って検証している方は少ないように思います。そこで今回は Slack 通知の Lambda を AWS SAM CLI で簡単に作成してみようと思います。
近頃、インフラ設定の再利用性と属人性の最小化を目的にインフラのコード化を強く意識し始めたのですが、今回はAWSの Infarastructure as Code(IaC)サービスの1つである CloudFormation を使って、なるべく簡単にAWSの小さなサーバ環境を構築してみます。