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

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

cdkv2を使って別Stackで作ったlambda layerをlambdaに適用したメモ

## 概要
[前回](https://qiita.com/hibohiboo/items/960f713897cfc3b41501)のLambda群はlayerを使用しておらず、無駄なbundleが発生している。
また、同一stackでlambda layer を作成すると、毎回作り直しになるのも無駄である。
今回は、別StackでLambdaLayerを作成し、SSMにarnを保存して使用する方法をとる。

[ソースコード](https://github.com/hibohiboo/aws-cdk-v2/tree/id/7)

## 環境

+ Windows10
+ gitbash
+ aws-cli/2.7.21 Python/3.9.11 Windows/10 exe/AMD64 prompt/off
* cdk v2.35
* node v16.16.0

## ディレクトリ構成

“`yaml
– package.json # lambdaで使用するライブラリを定義
– cdk
– .env # 環境変数定義
– package.json # スク

元記事を表示

cdkv2を使ってLambdaオーソライザ―を作ってHTTPAPIでcognitoのグループを使った認可を試したメモ

## 概要
[前回](https://qiita.com/hibohiboo/items/5d20423ec6ba96e0f521)は、CognitoのJWTトークンによる認証を使い、ログインができるようになった。
今回は、Cognitoのグループ機能を使い、取得できるAPIの認可を与えることを試す。

![](https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/images/custom-auth-workflow.png)

[ソースコード](https://github.com/hibohiboo/aws-cdk-v2/tree/id/6)

## 環境

+ Windows10
+ gitbash
+ aws-cli/2.7.21 Python/3.9.11 Windows/10 exe/AMD64 prompt/off
* cdk v2.35
* node v16.16.0

## 準備
cognitoのグループを作成し、グループに前回作成したユーザを追加する。
今回は`group_1`を作成し

元記事を表示

AWSで自分用のLINE Botを作った①

# はじめに
傘を持たずに出掛けて、午後から雨が降ってしまって困ることありますよね。
天気予報を朝見れば良いのでしょうが、少し面倒です。

というわけで、AWSの無料枠を使って自分への通知用のLINE Botを作ろうと思いました。
朝、天気予報サイトのデータを自動でスクレイピングして、予報が雨なら「今日は傘が必要です」というようなメッセージが配信されるようなイメージです。他にも電車の遅延状況の通知もできたら便利そうです。(既にこのようなサービスはありそうですが。。)

## 今回の内容
AWSもLine APIもそこまで触ったことがないので、まずは簡単な部分から実装を目指します。
今回の記事では図のようなAWS環境を構築しました。
2つあるLambdaの機能はそれぞれ以下のとおりです。使用言語はPythonです。
– 返信用(reply_message関数):単純なオウム返しの機能
– 配信用(push_message関数):定型文の配信

![system_conf-aws.drawio.png](https://qiita-image-store.s3.ap-northeast-1

元記事を表示

CloudWatchで通知抑制は出来るのか?

# やりたいこと
CloudWatchAlarmで監視しているインスタンスAがCPU高騰した際に、
CloudWatchAlarmのSNS(Eメール)にて、
初回のみ指定のメールアドレスに通知し、2回目以降は通知さない。

# 結論、できない!
##### サポート回答
>CloudWatchAlarmには上記要件を実現する機能は存在しておらず、
初回のみアラームのアクションを実行するといった対応は出来かねます。

# 対応策
##### サポート回答
CloudWatchAlarmのDisableAlarmAction API(AWS CLIのdisable-alarm-actionコマンド)にて、
アクションの実行を無効化をする。

## 具体的には?
##### サポート回答
CloudWatchAlarmの通知先をSNSではなくLambdaを選択し、
DisableAlarmActionを実行したうえで、次回以降のアクションを無効化する方法。
**CloudWatchAlarm –> SNS –> Lambda –> SNS –> Eメール**

1つ目と2つ目のSNS

元記事を表示

AWS Synthetics Canaryで実際に動くlambdaのArnを調べる

コンソールからだと見つけられないのでAWS CLIから`jq`で調べる。
フィルターは(それほど長いわけではないが) 別ファイルにして実行

“`bash
$ aws synthetics describe-canaries | jq -f canary-lambda.txt`
[
{
“Name”: “example-canary”,
“Function”: “arn:aws:lambda:ap-northeast-1:xxxx:function:example-canary-xxxxx:1”,
“Role”: “arn:aws:iam::xxxx:role/example-canary-ExecutionRole”,
“Code”: {
“SourceLocationArn”: “arn:aws:lambda:ap-northeast-1:xxxx:layer:example-canary-xxxx:1”,
“Handler”: “index.handler”
},
“RuntimeVersion”:

元記事を表示

TensorFlow を低コストのサーバレス(AWS SAM)で実行する

## はじめに

以前、 SAM を使って TensorFlow をサーバレスで実行する方法について記事を書きました

ざっくり言うと、超低コストで AI を動かそう、と言うことです

https://qiita.com/RyoWakabayashi/items/0734f7f0a76a5dad3770

しかし、その時から SAM がバージョンアップして、 `sam init` のときの質問などが変わってしまいました

また、最終的に出来上がったコードを GitHub に上げていなかったため、今どうすればいいのか少し迷子になりました

というわけで、改めて TensorFlow を SAM でビルド、デプロイする方法とコードをまとめておきます

実装コードはこちら

https://github.com/RyoWakabayashi/tensorflow-lambda

今回は `sam init` ではなく、このリポジトリーのコードを使ってデプロイする手順を紹介します

Lambda と SAM の解説は過去の自分に任せます

– [Lambda とは](https://qiita

元記事を表示

Lambda+API Gateway+SlackでNotionにタスクを追加

# 今回やったこと
・SlackのスラッシュコマンドでDMからNotionにタスクを追加できる機能を作成した
・ワークスペースにいるほかの人が勝手にタスクを登録できないようにユーザーIDで制限を付けた

# Notionとは
Notionとはメモやプロジェクト管理,タスク管理のためのオールインワンワークスペースのこと。
個人利用であれば無料で利用することができる。

今回は下の画像のような形式のタスクを追加するものを作成する ~~(プリパラはいいぞ)~~
![task.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269896/e0b90495-6f9a-b04b-41dd-ce6461b086c6.png)

# Notion側の設定
[[Notion] いま人気の Notion の API を試してみる](https://zenn.dev/utah/articles/da8239aca15335)
↑このページの流れで設定を行って、シークレットとデータベースIDをメモしておいてください。
データベー

元記事を表示

AWS AmplifyでTypeScriptとExpressを使ったLambda関数のRESTful APIを作る方法

はいさい!ちゅらデータぬオースティンやいびーん!

# 概要
AWS AmplifyのCLIを通して、API GatewayとLambdaを用いたRESTful APIを作る際に、サーバーレスのExpressと、TypeScriptを使う方法を紹介します。

## 背景
まず、サーバーレスのExpressをなぜLambdaで使うのかですが、単純に筆者は、Expressに慣れており、Expressならさっさと書けるからです。筆者と同様な作者はいるかと思いますが、いかがでしょうか?

その他に、Expressで書くと、Lambdaを脱出する必要があったら、コードを再利用することもできるので、おすすめです。

実際、Expressをサーバーレスで実行するために、オープンソースのプロジェクトがあり、現役で開発が進んでいます。それほど人気な書き方・実装方法だと筆者は捉えています。

https://github.com/vendia/serverless-express

そして、なぜTypeScriptをLambdaに導入するかですが、こちらは、コードの品質を上げるためです。型がないバックエン

元記事を表示

AWS日記45(AWS Lambda – Layer)

# はじめに
今回はAWS Lambdaの[レイヤー](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/gettingstarted-concepts.html#gettingstarted-concepts-layer)を試します。
[Lambda レイヤーの作成と共有](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/configuration-layers.html)を参考に、Lambda関数で使用するライブラリを作成します。

# 動機
Lambda関数実行時に以下のエラーが発生し、エラー解決のため レイヤーにライブラリを設定しました。
“`bash
/var/task/bootstrap: error while loading shared libraries: libXXXXX.so.1: cannot open shared object file: No such file or directory
“`

# ライブラリのzipファイルを作成
“`bas

元記事を表示

UnityでLambdaを介してDynamoDBにアクセスするAPI連携を実装する方法

# 今回実装したこと
Unity ⇆ API gateway ⇆ Lambda ⇆ DynamoDB ⇆ S3
S3上に置いた画像データをおき、そこに至るパスをDynamoDB上にストックし、Unityからの入力をキッカケにAPI gatewayを経由してLambdaを起動して、入力情報に応じてDynamoDBから必要なS3のパスを返す実装を完成しました。
文字だけだと呪文にしか聞こえないので、実際に動いているところを共有します。

UnityでAWSのサービスを使用する場合、余計なSDKやプラグインなどを使用せず、あくまでAWSのサービスのみで完結する方法についてまとめました。
これができれば、フロントサイドは別にUnityじゃなくてもさまざまなサービスを利用することが可能です。

# 注意点
AWSの使用は従量課金制となりますので、ここから先を進んだ場合に使用量が発生する可能性があります。そのため、ここから先に進んで費用が発生しても自己責任でお願いいたします。

# AWS側の設定

## AWSへのログイン
他の記事やgoogleで検索し、AWSのコンソール画面まで進んでください

元記事を表示

Microsoft365の監査ログを取得するLambda

# はじめに
Microsoft365の監査ログの保存期間がデフォルト90日なので、それを長期間保存するためS3に出力するLambdaを作成しました。

# 参考

https://github.com/nickadam/exo-lambda

# 構成図

構成図は以下の様になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/d856cd57-3909-6efd-7a94-67f958ac718a.png)

– 任意のサービスが、対象のLambdaをInvokeします。
– Step Functionsを想定
– 与える引数は以下
– 監査ログ取得対象開始日時
– 監査ログ取得対象終了日時
– 保存先バケット
– オブジェクトキー名
– Microsoft365への接続に使う情報はSystemsManagerのParameter Storeから取得します。
– 格納先のPar

元記事を表示

AWS Lambda でLine bot を作成する

Line bot を作成し、自動でメッセージを送受信する方法を解説します。

## LINE Developersコンソールからチャネルを作成

下記手順を参考にLINE Developersコンソールからチャネルを作成します。
[LINE Developersコンソールでチャネルを作成する](https://developers.line.biz/ja/docs/messaging-api/getting-started/#using-console)

– [LINE Developersコンソール](https://developers.line.biz/console/)へログイン
– `Messaging API`のチャンネルを作成
![image](https://user-images.githubusercontent.com/38905609/181906073-e2371056-01c9-4329-abf1-5e3334fdc3f0.png)

## Webhook用のLambda関数を作成する

?これより先は下記記事の内容を前提とします
[REST AP

元記事を表示

[AWS.3] Lambda関数へのトリガー追加 (API Gateway)

# 1. 概要
AWS.1 および AWS.2 は、すでに広まっている情報を思いっ切り焼き直した記事でした。
もう少し高度なサンプルも予定していますが、その前に作成済みの Lambda 関数を Amazon API Gateway に対応させてインターネットから簡便に呼び出せるようにしておきます。

## Amazon API Gateway とは
バックエンドで動くビジネスロジックへアクセスするための「フロントドア」として機能する仕組み、とのことです。
具体的には RESTful API や WebSocket API の作成・公開・管理 を一手に担い、Lambda 関数をはじめとするビジネスロジックへアクセする「API」を提供します。

Amazon API Gateway
https://aws.amazon.com/jp/api-gateway/

### Lambda プロキシ統合について
API Gateway を利用する際は、クライアントから渡される情報を「呼び出し先のロジックがアクセスできる領域」へマッピングする必要がありました。
マッピングの考え方自体はともかく、定義

元記事を表示

LambdaのコードとCFnテンプレートの環境変数を同時に変更すると一瞬死ぬかも

# はじめに
Lambda関数をデプロイする際、CloudFormation(以下、CFn)を利用される方も多いと思います。
今まで知らなかったのですが、Lambda関数に乗せるソースコードとCFnテンプレートの両方で環境変数名を同時に変更するとダウンタイムが発生する場合があったので、備忘録として検証記事を書きます。

# 使用するCFnテンプレート
今回の検証に利用する、最小構成のLambda関数をデプロイするためのCFnテンプレートです。
Lambda関数のリソース定義において、Environmentに`HOGE: 1234`を追加し、Codeに`HOGE`を参照するPythonコードを直接書いています。

“` minimum_template.yml
AWSTemplateFormatVersion: 2010-09-09

Resources:
LambdaFunction:
Type: AWS::Lambda::Function
Properties:
Runtime: python3.9
FunctionName: hoge

元記事を表示

Go+API Gateway+Lambda+DynamoDBでサーバレスなAPI

# はじめに

こちらの記事はGoとAPI Gateway + Lambda + DynamoDBでサーバレスなAPIを作る記事となっています。
前回の記事の続きとなっているため、一部手順を省略しています。

https://qiita.com/tkhs1121/items/b1e332acdbc50fad8c45

https://qiita.com/tkhs1121/items/18d8ba86f1afdec13381

# 環境
MacBook Air M1
開発言語 Go

# 手順
## Lambda関数の作成

一から作成のままランタイムを`Go.1.x` アーキテクチャを`x86_64`にして関数の作成をします。
![Lambda.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1391445/e76764b3-3f67-c9c6-092f-efcfdf99e889.png)

### 必要なパッケージのインストール
“`
go get -u github.com/aws/aws-sdk-

元記事を表示

CloudWatch Syntheticsを使用してAPI監視を実現する

# はじめに
本記事はAWS環境でCloudWatch Syntheticsを使用して、API監視を行うための方法について記載しています。

クラウド環境におけるシステム監視を行うためには、クラウドを提供するサービスプロバイダーによってビルトインされたモニタリングシステムや、Datadogなどサードパーティ製ツールを使用するなどの手段があります。

AWSではモニタリングシステムとしてCloudWatchが無料で利用できます。
Syntheticsの監視についてもサードパーティ製ツールを使用せずに、コストを下げてAWSでインテグレーションしたモニタリングシステムを構築できます。

一見便利そうなSyntheticsですが、仕様が分かりにくかったり、痒い所に手が届かない部分もあります。
本記事ではSyntheticsを使ってたナレッジについてまとめました。

## CloudWatch Synthetics
日本ではAPIなどエンドポイントに対する監視のことを外形監視といった表現が多いですが、AWSはDatadogと同じ**Synthetics**と呼び、CloudWatchの**Syn

元記事を表示

関連づけられてないEBSをSlack通知 & 削除するLambda

# はじめに
以前、[「関連づけられてないEIPをSlack通知 & 削除するLambda」](https://qiita.com/suzuki_kento/items/6adb5e7e70bb17148699)を作成しました。

今回は上記のLambdaを応用し、何も関連づけられていない(= 「使用可能」状態)のEBSボリュームを削除するLambdaを作成してみました。

なぜ、作成するに至ったかというと、自分の所属するチームの検証環境には**59台の「使用可能」状態のEBSが存在しており、毎月3000円ほど無駄な費用がかかっていた**ためです。

また、**「使用可能」状態のEBSは「終了時に削除」が有効化されていないAMIからインスタンスを作成してしまうと、作成者の意図しないところで湧き出す**のです。
なので、定期的に駆除したいと感じていました。

# 仕様
– 検証環境に存在する何も紐づけられていないEBSをSlack通知・削除(全リージョン)
– Amazon EventBridgeと組み合わせて毎日定時で実行
– 容赦ない削除、慈悲はない
– 削除されたくない場合、以下

元記事を表示

Seleniumの通信ログを確認したい(on AWS Lambda)

# 自動化っていいですよね
ブラウザ操作を自動化してくれる「Selenium」。
テストやスクレイピングなどで使われている方も多いかと思います。
便利なんですが、エラーが起きた場合にその原因が分かりにくいな、Seleniumがどんな通信を行っているのか確認したいな、と思うことも。
この記事ではSeleniumの通信内容を簡易的に取得する方法を検証します。

# この記事のゴール
1. コンテナ形式のAWS LambdaにてSeleniumを動作させる
1. Seleniumの通信ログ(HTTP/HTTPS)を確認する

# 前提および注意事項
* 開発環境としてAWS Cloud9を使用します
Cloud9の環境には予めDockerやAWS CLIなどがインストールされているため、それらのインストール手順は本記事では触れていません。
また、デフォルトのディスク容量だとすぐに不足するため、本記事の内容を検証した際は30GBに拡張しています。
* コンテナ形式のAWS Lambdaで動作確認を行っています
Lambdaは実行時間やメモリなどに応じて課金されますが、本記事の内容を実行する場合

元記事を表示

【AWS】Lambda関数のLayerを使ってみた

# 1.はじめに
どうも、ARIの名古屋支社に勤務している愛知県民です♪
(/・ω・)/

先日、AWSのLambda関数をテストしようとしたところ、以下のエラーが出ました。

|![010_エラー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/cddbe3fd-68c5-f097-946d-11a59a1ca870.png)|
|:–|

どうやら、必要なライブラリが含まれていないことが原因のようですが、
他にも同じライブラリを使うLambda関数を作成予定だったため、
「いちいち設定するのは面倒だな・・・」と思いました。

解決する方法がないか、調べたところ、
**Lambda関数のLayerという設定を使うことで、
複数のLambda関数に同じライブラリを入れられるようです!**

そこで今回は**Lambda関数にLayerを設定する方法**を記事にしてみたいと思います♪
AWSやLambda関数について勉強中の方の参考になれば幸いです。
(*^^)v

# 2.用語の説明
#

元記事を表示

Lambdaの関数URLとNetworkXを利用してネットワークグラフをWeb画面に表示する

AWS Lamdbaに関数URL(AWS Lambda Function URLs)という機能が搭載され、爆速でAPIを構築できそうかつ、フロントとバックの画像のやりとりを実現してみたかったので、いじってみました。
NetworkX( https://networkx.org/ )はあくまで、グラフを描画するためだけなので、深くいじりません。

Web画面はreactを利用し、lambdaのコードはPythonで書いていきます。

## 関数URLの準備
本当に早くてびっくりしました。
1. 関数の作成から、関数名を入力します
![スクリーンショット 2022-07-27 19.22.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1412976/189ede0c-7e5c-fb9a-9b0b-cb172491a27f.png)

2. 下の方にスクロールをして、「詳細設定」を開き、以下を選択します
– 関数URL
– 認証タイプ -> NONE
– オ

元記事を表示

OTHERカテゴリの最新記事