Lambda関連のことを調べてみた2022年12月01日

Lambda関連のことを調べてみた2022年12月01日
目次

Slack + Lambda + NewRelicでコーヒー摂取量を記録・可視化できるコマンドを作ってみた

[新卒エンジニアによる全部俺カレンダー2022](https://qiita.com/advent-calendar/2022/arie_onlyme2022) 1日目投稿記事です。

## 概要

作業に集中する時やリラックスする時によく飲むコーヒー・・。
頭が冴えてスッキリするのですが、ついつい飲み過ぎてカフェイン依存症にならないか健康面的に心配になってきました。

そこで自分がどのくらいコーヒーを飲んだか可視化してみようと思い、Slackコマンドを作成してみました。

## 使用技術

Slack API
AWS Lambda + API Gateway
NewRelic

## 用意するもの
– Slackのアカウント / ワークスペース
– AWSアカウント
– NewRelicのアカウント(無料版でOK)

## Slack APIでの設定

Command: 好きなコマンド名(英字)

Request URL: API Gatewayのエンドポイントを設定

![スクリーンショット 2022-11-23 11.01.54.png](https://qiita-image

元記事を表示

【Lambda functions URL】IP制限をかける方法(Python)

# はじめに

Lambda functions URL を使っていて IP 制限をかけたいと思って IAM ポリシーで色々試してみたもののできませんでした。

無理くり Lambda 内で実装したので、その方法を共有したいと思います。

# 環境変数

環境変数に“`IP_RANGE“`=“`'[‘111.111.111.111’, ‘222.222.222.222’]’“`を設定する。

# ソースコード

“`python
import json
import os
import ast

# IPアドレスチェック
def check_ip(IP_ADDRESS, IP_RANGE):
valid_ip = False
if not valid_ip and IP_ADDRESS in IP_RANGE:
valid_ip = True

return valid_ip

def lambda_handler(event, context):
IP_ADDRESS = event[“requestContext”][

元記事を表示

非同期の Amazon Redshift Data API を Amazon EventBridge で上手に取り扱う

Amazon Redshift Data API は SQL を簡単に実行することができる非同期APIです。
非同期なので、SQL が完了するまで待たずにレスポンスを返却します。

APIリクエストが完了したかどうか繰り返しポーリングするような仕組みが必要かな?と思いましたが、必要なさそうでした。
`WithEvent` パラメータに `True` を指定すれば Amazon EventBridge にイベントを送信することができます。

Amazon EventBridge でルールを設定しておけば、完了イベントを拾って後続処理に繋げることもできそうです。
Amazon EventBridge が対応している他のサービスとも連携しやすいですね。

非同期 API なので
AWS Lambda 上で実行する場合には、実行時間を極小化することができ、コスト最適化にもつながりそうです。
長時間実行 SQL や COPYコマンドでの大量データロードなど、長時間がかかる処理の場合にはより効果的です。

## 試してみること

AWS Lambda から Amazon Redshift

元記事を表示

CloudFormationのドリフトを自動検出するシステムを構築したら、ServerlessFrameworkの自動タグ付け機能に苦しめられた

# 目次
– [はじめに](#はじめに)
– [定義と実際のリソースとの差分を検出する方法](#定義と実際のリソースとの差分を検出する方法)
– [作成したシステム](#作成したシステム)
– [サーバーレスフレームワークではうまく機能しなかった話](#サーバーレスフレームワークではうまく機能しなかった話)
– [最後に](#最後に)

# はじめに
インフラの管理をより安全に再現性高く行うために、CloudFormationを利用したIaCを構築している方は多いと思います。ただ、完全にコードによる管理を徹底できているかというと、できていない方も多いのではないでしょうか。

例えば、障害時の緊急対応では、コードの変更と反映を待っていると対応が遅くなってしまうので、コンソールから修正を加えることもあると思います。このコンソールでの変更がそのまま放置されると、コードでの定義と実際のリソースとの間に差分が生じ、後日別件でコードに変更を加えてリソースの更新を行った時に、障害時に行った修正が消え去り、予期せぬ事故が生じる可能性、などのリスクを抱えることになると思います。

そのため、安全なサービ

元記事を表示

Lambdaの実行時間がタイムアウトの8割を超えたらアラートを出す

## はじめに

この記事は、[ミロゴス Advent Calendar 2022](https://qiita.com/advent-calendar/2022/milogos) 1日目の記事です。

社内システムで利用しているAWS Lambda(Node.js)の実行時間がタイムアウト時間の
8割に達した時にアラートを出したいという要件があったため対応しました。

✳︎ 記事はCDKがある程度書かれている前提で記載しています
✳︎ 変数部分は適宜置き換えて下さい

### ログストリームのLambda実行後ログから実行時間を取得してアラートを出す

実装内容は下記です。
実装はTypeScriptで行います。

– CDK
– 対象ロググループにlambdaの実行ログからDuration値を検知するMetricFilterを作成する
– 60秒間での合計検知数を見るMetricを作成する
– 閾値をタイムアウト時間の8割でアラームを定義

##### MetricFilterの定義・LogGroupへの追加

“`ts:
const metricFil

元記事を表示

AWS + LINE でモーニングコールするBotを作ってみた(スライド版)

## 注意

この記事は「[AWS EventBridge + Lambda + LINE でモーニングコールするBotを作ってみた](https://qiita.com/nekolife/items/94d650d7a55cc583dd60) 」のスライド版です。
スライドモードで閲覧することをお勧めします。

## はじめに

「AWSを使って便利なチャットBotを作る」をテーマに掲げ、自分自身の勉強も兼ねて、その成果を記事にしています。
まず第1弾としてLINEにモーニングコールメッセージを送信するBotを作ってみました。
この記事が少しでも役に立てば嬉しいです。

## 完成イメージ

完成イメージは下図のような感じです。
毎朝6時にモーニングコールのメッセージを届けてくれます。

![IMG_4A2D169908D7-1 2(中).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24724/d4b7ec18-de43-8484-6c1d-ef75e319e141.png)

元記事を表示

AWS SDK V3 + Lambda を SAM deploy した際の “Could not resolve” の対処法

# 背景
SAM で EventBridge Trigger + Lambda を Deploy しようとしてる

その際に発生したエラーの対処法の記録

## エラー内容
最初は npm install かと思ったけど、Esbuild の話でそこそこ悩んだ
“`powershell: Esbuild error
Error: NodejsNpmEsbuildBuilder:EsbuildBundle – Esbuild Failed: X [ERROR] Could not resolve “@aws-sdk/lib-dynamodb”
app.ts:2:27:
2 │ import { PutCommand } from “@aws-sdk/lib-dynamodb”;
╵ ~~~~~~~~~~~~~~~~~~~~~~~
You can mark the path “@aws-sdk/lib-dynamodb” as external to exclude it from the bun

元記事を表示

【AWS Amplify】functionの環境変数 “API_XXXX_GRAPHQLAPIENDPOINTOUTPUT” がデフォ値 “apixxxxGraphQLAPIEndpointOutput”になってしまう問題を無理矢理にでも解決する方法

# この記事の対象となる方

– AWS Amplifyを使用して、Lambda(function)を作成しデプロイしている
– Lambda(function)にAppSync(api)を叩く権限を与えたい
– さらにLambda(function)にDynamoDB参照・更新などの権限を与えたい
– しかし巧く行かない
– 作成される環境変数`API_XXXX_GRAPHQLAPIENDPOINTOUTPUT`がヘンなのでAppSyncのエンドポイント取得に使えない…。

# 問題の中身

基本的に、`amplify add function`や`amplify update function`コマンドから`? Do you want to configure advanced settings?`で`yes`を選択し、
“`command
◉ auth
◉ storage
◯ function
❯◉ api
◯ custom
“`
こんな感じで選択すれば、それぞれのリソースへの権限が解決されるはずです。

自動でIAMロールが付与されるので、Lambdaのコー

元記事を表示

AWS Lambdaとkagomeを組み合わせてお手軽に形態素解析APIを作る

# 対象読者
– AWS Lambda未経験でとりあえず何か作ってみたい人
– 自前で形態素解析APIをお手軽に用意したい人

## 動作確認環境
– `Go 1.9`
– `M1 MacBook pro` OS :`MAC OS X 12.4 Monteray`

# 概要
Goで書かれた形態素解析エンジン `kagome` と AWS Lambdaを使って形態素解析APIを作ってみる。

## モチベーション
みなさんは普段業務で形態素解析って使ってますか?
私は流通系の会社に勤めているため、商品に含まれてはいけない成分があるかを調べたり、日本語の商品説明を外国語に翻訳するとき、固有名詞を抽出するのに使っています。

公開されているサービスですと下記のようなものがあります。

https://developer.yahoo.co.jp/webapi/jlp/ma/v2/parse.html

https://labs.goo.ne.jp/api/jp/morphological-analysis/

しかしながら、このようなオープンなサービスでは提供者の都合によるサービス終了や停止

元記事を表示

AWS EventBridge + Lambda + LINE でモーニングコールするBotを作ってみた

## はじめに
「AWSを使って便利なチャットBotを作る」をテーマに掲げ、自分自身の勉強も兼ねて、その成果を記事にしていきます。
まず第1弾としてLINEにモーニングコールメッセージを送信するBotを作ってみました。
この記事が少しでも役に立てば嬉しいです。

## 完成イメージ
完成イメージは下図のような感じです。
毎朝6時にモーニングコールのメッセージを届けてくれます。

![IMG_4A2D169908D7-1 2(中).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24724/f4514f78-7728-2240-0b49-d7e4551fb7ba.png)

## システム構成
下図のようなシステム構成でBotを作成していきます。
![Chatbot-LineMoningCall.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24724/93c48b8e-54ab-420b-a70d-e24

元記事を表示

Amazon Inspector で AWS Lambda 関数の脆弱性スキャンをしてみよう!

# 概要

* [Amazon Inspector](https://aws.amazon.com/jp/inspector/)に新機能として AWS Lambda関数の脆弱性をスキャンする機能が追加されました。
* ということで早速試してみたという記事になります。

# Amazon Inspectorとは

* [Amazon Inspector](https://aws.amazon.com/jp/inspector/) というのは脆弱性を管理するためのサービスであり、今までは **Amazon EC2 インスタンス**の脆弱性や、**Amazon ECR** に存在するコンテナイメージの脆弱性を継続的にスキャンできました。
* 今回追加された機能というのは、AWS Lambda 関数と Lambda レイヤ全体の脆弱性を継続的にスキャンできるようになりました。

## 気をつけるべき点

* 現時点では、Java、NodeJS、Python で記述された関数とレイヤーに対してのスキャンが実行できます(2022/11/29 時点)
* デフォルトでは、アカウント内のすべての関数を

元記事を表示

40代おっさんREST API サーバーレスを学ぶ①

## 本記事について

この記事はプログラミング初学者の私が学んでいく中でわからない単語や概要を分かりやすくまとめたものです。
もし不正などありましたらコメントにてお知らせいただければ幸いです。

## DB用意

DynamoDBを使います。
リージョンを東京にする。(Lambda関数を使う時リージョンが違うと問題が出る。)

![スクリーンショット 2022-11-29 191200.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641940/b7b5d86a-59f5-8f74-a0e6-de92b22c7514.png)

テーブル名 users
パーティションキー id

それ以外はデフォルト

## IAM

ロールを作成するので左のロールをクリック
開いたら
左上にロールを作成があるのでそれをクリック

![IAMロール.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641940/e3183c3d-f709

元記事を表示

【re;Invent2022】Lambda SnapStartの有効化方法(コンソール)

# はじめに
こん〇〇は!
re;Invent2022で発表された「Lambda Snap Start」ですが、さっそくどのように有効化したらよいか確認してみたので、記事にしました!
もうすでに、AWSのサイトに今回の記事の内容は書いてありますので、それを試してみた。といったような内容です。

# 前提条件
使用できるランタイムは「Java 11」のみ(2022/11/29現在)

# できないこと、できない環境/サービス
– プロビジョニングされた同時実行
– arm64 アーキテクチャ
– Lambda 拡張機能 API
– Amazon Elastic File System (Amazon EFS)
– 512MBを超えるエフェメラル(一時)ストレージ

# 注意点
スナップショットは以下の場合削除されます。
– 関数または関数バージョンを削除したとき。
– 14日間の関数バージョンの呼び出しがないとき。(14日後に呼び出された場合再作成される。)

# 有効化方法
まず、Lambdaを作りましょう。
使用できるランタイムは「Java 11」のみなので、コンソール上から

元記事を表示

avifはオンデマンドな画像変換には向かないって言う話

## 最初に理由から言うと
webpと比較すると画像変換にかなり時間がかかるためです

## まずは各ブラウザの対応状況
https://caniuse.com/avif
![スクリーンショット 2022-11-19 18.05.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/322555/1138802d-8232-26cc-4f98-6ae100574fe5.png)
iOS16からsafariもavifに対応したことによって、ほとんどのブラウザでavifが使えるようになりました

## 実際の比較
比較に使った画像はこれです
![cat-7536508_1920.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/322555/79d27c23-fc24-0f39-1033-f2d1cefbade5.jpeg)
1920×1280のjpegで315kbあります
オンデマンドで画像変換及びリサイズしている環境は以下です

元記事を表示

CloudWatch Dashboard カスタムウィジェット内でのタイムゾーン扱い

# カスタムウィジェットで得られる情報

## カスタムウィジェット詳細
詳細は公式ドキュメントを見るのが一番確実です。

https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/add_custom_widget_dashboard_about.html

## タイムゾーン関連部分
“`typescript
timezone: {
label: string, // Local or UTC
offsetInMinutes: number
},
“`
labelにAsia/Tokyoのような文字列が入ると予想していたのですが、実際にはLocalかUTCのいずれかが入ります。Management Consoleと同じイメージですね。

# ユーザにはどう表示するべきか
JSTを前提に書くのが一番楽ではありますが、offsetInMinutesが取得できるのでこれを元に時差を調整して変換します。

1. 日時をUTCタ

元記事を表示

自己学習記録:TypeScript を Lambda で使う為には

# 背景
業務で AWS や JavaScript などが必要になった、おじいちゃんの学習記録。

Lambda では TypeScript を使えないってことで、使う方法は?って探したところ
Serverless Framework が見つかった。

で、試してたら、なんか色々あることを知らされる・・

– serverless
– SAM
– AWS-ToolKit for VSCode
– 結局は、SAM ?

## Serverless に対する期待
– TransCompile しながら Lambda への Deploy が出来そう
– Serverless Offline もあるので、うまくいったあとは、開発は Offline で
– Google Cloud Functions/Azure Function などへも deploy 出来るので、覚えておくと役立つかも?

## SAM & ToolKit
AWS のサポート受けられるってことでやっぱりこっちなのかな・・と
まぁ、どっちも素人なので・・

こっちを選びたくない理由は、Docker 入れないと Of

元記事を表示

AWS Lambda for Python 用に cryptography を同梱する

# はじめに

Lambda 関数デプロイ時に JWT デコードに利用する cryptography を同梱してデプロイしたかった。
そのため、cryptography を含む AWS Lambda Layer を作成 or 再利用しようとしたのだが、[Lambda@Edge 用の関数は Layer を利用できないという制約がある](https://docs.aws.amazon.com/ja_jp/AmazonCloudFront/latest/DeveloperGuide/edge-functions-restrictions.html)。

最初は local で pip でインストールしようとしたのだが、 cryptography のライブラリ自体が pip でインストールする時に環境依存のバイナリを入れてくるため、`pip -t .` でインストールしたモジュールをアップロードしても、基本的には動作しない。

そのための解消方法をメモする。

が、正直、原始的なやり方であり、かなり限定的なユースケースでしかないので、代用が可能ならそちらを利用した方が良いので本当に最終手段と

元記事を表示

Lambdaのメモリサイズの設定値について考える

## 概要

– Lambdaでのパラメータ値であるメモリサイズについての選択についての記事です
– Lambdaをあまり使ったことのない人、チュートリアルで使ったことのある人向けに記事です

## tl;dr

– Lambdaは実行時間課金なのでメモリサイズを大きくする=ランニングコストが高くなるわけではない
– コスパの良いメモリサイズを選択するために、「AWS Lambda Power Tuning」で測定してみましょう
– 並列処理(CPU依存)をしている場合にはメモリサイズとコア数の関係を意識してメモリサイズを選択しましょう

## Lambdaの課金体系

Lambdaの利用料金は、「リクエスト数」×「実行時間」によって決まります。
ここでいう実行時間は、「何MBのメモリサイズで何秒実行されたか」というような計算で決まります。
つまり、EC2などのサービスとは異なり、リソースサイズが大きいほど利用料金が高くなるというわけではありません。

例: メモリサイズを2倍にすることで実行時間が1/2になる場合は、利用料金としては変わらなくなります(変わらないということは

元記事を表示

Twitter 画像付き自動投稿つくってみた【AWS Lambda】

## あらまし
素数の日(=yy/mm/dd のdd 部が素数)[^1]にその素数にちなんだ画像を自動ツイートする機能をAWS Lambda で作成しました。

[^1]:yyyymmdd の8桁が素数の場合を「素数の日」と呼ぶ流派もあるようです。

元記事を表示

自己学習記録:Lambda で DynamoDB 連携

# 背景
業務で使うことになったので、ついていくために、おじいちゃんの自己学習記録。

Node.js + AWS で少し見えてきた。

ということで、今度は DynamoDB + Lambda で少し遊んでみる

ゴールイメージは、
1. DynamoDB のテーブルAに値を追加すると
1. Lambda で追加内容に応じて、別テーブルに項目追加

# まずは、DynamoDB のテーブル準備
[DynamoDB](https://ap-northeast-1.console.aws.amazon.com/dynamodbv2/home?region=ap-northeast-1#service) にて、テーブル作成

とりあえず、適当に以下で作ってみた
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/b8aae7db-33ea-292d-abc9-6c93dd2bebdf.png)

## 命名規則とデータ型
https://docs.aws.amazon.com/ja

元記事を表示

OTHERカテゴリの最新記事