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

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

【Cognito】カスタム認証チャレンジでトークン認証を実装して、SAMでデプロイしてみる。

## 柔軟性のある認証フローを作成できる

Cognitoを触ってみて、最初は色々不便だなあと思っていました。
しかし、ちゃんとドキュメントを読んでいくうちに、拡張性が高く、結構柔軟な実装が可能だと気づきます。
その柔軟性を担保してくれいている仕組みの一つが「カスタム認証チャレンジ」です。

![カスタム認証チャレンジフロー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/632997/68970d48-a8e7-e239-0e05-0373418f10d5.png)

https://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/user-pool-lambda-challenge.html より引用

## 何が便利なのか

ログイン方法を複数指定することができます。
一般的な認証方法の1つにユーザ名とパスワードを入力するパスワード認証があります。
例えば、カスタム認証フローを使えば、あるロールのユーザにはパスワード認証を、あるロールの

元記事を表示

Mircosoft Teamsで勤怠管理bot

# はじめに

会社の上司は部下の生存確認をしたいお年頃になったようです。
在宅勤務も増え、上司は目隠しでサッカーやってる感覚でしょう。
さすがに「ピッチに出てるか否か」ぐらいは知りたい、ということだったので
ビジネスチャットツールであるMicrosoft Teamsで勤怠管理botをつくってみました。

#構成
部下は何かとAPIを使いたいお年頃になってきましたので、ご多分に漏れずAWSでサクッとつくります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1989761/60718c97-a63d-76f0-08b3-5f97b2710da7.png)

1.TeamsのOutgoing Webhook設定
2.Lambdaで情報を受け取って処理
3.出退勤時刻と名前をDynamoDBに保存
4.FlaskをバックエンドにDynamoDBのデータを読みこんで表示
5.上司はWeb上で勤怠管理ができるようになって楽ちん
こんな感じです.1のWebhook設定をよしなにすれば、Slackで

元記事を表示

aws lambda + python3.9 + selenium (python 旧バージョンで止まった人向け)

# 対象者

* aws lambda + python3.9 で Layers に headlesschrome + selenium を使って動かなかった渋い経験がある人(127 エラーに泣いた日々)
* 現在 python3.7 で動かしているけど、いつ AWS から見限られるかでおびえている人

※ python の書き方や、aws lambda の使い方云々については取り上げてません(参考記事だけは残してます)

# 前置き(どうでもいい人はスキップ)

ふとしたきっかけはこちらの記事

https://aws.amazon.com/jp/blogs/news/new-for-aws-lambda-container-image-support/

この記事を見た時、Docker のことはよくわかっていないけれど、Docker イメージ(OS+必要なアプリケーションや実行ファイルをまとめたもの)を作って ECR に配置すると、Lambda で使えるようになったよ!ということらしい

その時は、いまいちピンと来てなかったが、、、
ある日ネットサーフィンしていると以下に出会う

元記事を表示

【これで理解できる】SQSのデッドレターキューを理解したかったのでSQS+Lambdaのリトライ処理を実装してみた

本記事は以下ブログの内容を転記したものです。
以下ブログの方が見やすいと思います。気になる方はどうぞです。

https://memomaru.life/lambda-sqs-dlq-retry/

## はじめに
最近、仕事でSQSを使う機会があったのですが、デッドレターキューやSQSによるリトライ処理がイマイチ理解できていませんでした。
AWSの公式ドキュメントやブログ記事などを見てもあまり理解できなかったため、実際にサンプルアプリを作って検証しました。

## 実施内容(概要)

実施内容は以下です。

– LambdaにSQSでメッセージを送信する
– Lambdaはエラーとなるような処理とする
– 複数リトライ後、SQSのメッセージがデッドレターキューに入ることを確認する
– デッドレターキューに入ったメッセージを使って再処理できることを確認する

## 実施内容(詳細 – 設定)

### IAM

一般的なユースケースからLambdaを選択し、`次のステップ:アクセス権限`を押します。

ポリシーとして`AmazonSQSFullAccess`と`CloudWatchL

元記事を表示

Amazon Lexで受け答えした情報を、Lambdaを用いてDynamoDBに書き込む

#はじめに
Lexで答えた情報をLambdaを用いて、DynamoDBに書き込むことをやります。

![スクリーンショット 2022-01-15 15.58.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/988747/ca13abec-3ae8-6ab0-3657-9db538a92b5d.png)

#流れ
1. DynamoDBのテーブル作成
1. Lex作成
1. Lambda作成
1. LexにLambdaを設定

#DynamoDBのテーブル作成
以下の設定で作成します。
テストですので、オンデマンドモードにして、安く済ませます。

– テーブル名:`Lex-Write-Lambda`
– パーティションキー:`telephoneNumber`:`文字列`
– ソートキー:`date`:`文字列`
– 項目:`age`:`数値` (テーブル作成後)
– 項目:`timeStamp`:`数値` (テーブル作成後)
– テーブルクラス:DynamoDB 標準 – IA
– キャパシティー

元記事を表示

AWS SAMで管理するAWS Lambda関数を、単一のAWSアカウント内の複数環境にデプロイする

# Whats’?

AWS SAMで管理するAWS Lambda関数を、単一AWSアカウント内の複数回(別環境として)デプロイするのにはどうすればよいのかな?ということで、試してみました。

# AWS CloudFormationと複数環境

AWS SAMは、AWS CloudFormationの拡張です。

> AWS SAM は AWS CloudFormation の拡張であるため、AWS CloudFormation の信頼性の高いデプロイ機能を利用できます。

https://docs.aws.amazon.com/ja_jp/serverless-application-model/latest/developerguide/what-is-sam.html

このため、AWS SAMで管理している内容を複数の環境に適用するには、AWS CloudFormationの考え方に従うのが妥当でしょう。

AWS CloudFormationのドキュメントによると、テンプレートを複数環境向けに利用するには、パラメーターやマッピング、条件セクションで環境間の差異を吸収してい

元記事を表示

イベントソース・パイプライン

# イベントソース・パイプライン
フロー:DataLake → Glue → QuickSight
CloudWatchに吐き出されたGlueの実行ログを、Lambdaで集計・抽出し、S3バケットへアップロードします。
Lambda関数は、Step Functionで起動させています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2432928/f8780266-a47a-91ee-0ba6-0eb3c5b5785b.png)

## EventBridge (旧:CloudWatch Events)
EventBrightのイベント実行ルールを設定しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2432928/94d9b6b5-3833-a57d-3092-b3fac05ab9f3.png)
イベントパターンをスケジュール(モード)に設定し、スケジュールに基づいたアクション

元記事を表示

Lambdaでrds自動起動停止

#自動起動
#iam role作成
AWSコンソールへログイン
https://console.aws.amazon.com/iamv2
左ペインロール押下
ロールを作成押下
一般的なユースケース:lambda
ポリシー:AmazonRDSFullAccess
ロール名:control-rds
作成

#lambda関数作成
https://console.aws.amazon.com/lambda
関数の作成押下
関数名:start-rds
ランタイム:python3.9
デフォルトの実行ロールの変更
既存のロールを使用する:control-rds
関数の作成
以下コード入れる

“`
import boto3

rds = boto3.client(‘rds’)

def get_tags_for_db(db):
“””
get instance list
“””
instance_arn = db[‘DBInstanceArn’]
instance_tags = rds.list_tags_for_resource(ResourceNam

元記事を表示

SORACOM LTE-M Button plusをトリガーに、LINE Notifyで位置情報を通知する

#はじめに
SORACOM LTE-M Button powered by AWSを以前使っていたのですが、紛失。
しかし最近このLTE-Mボタンを使う機会ができたので、これを機にLTE-M Button Plusを買いました。

https://soracom.jp/store/5207/

そしてこのLTE-M ボタン Plusを使い、AWS lambda、そしてIFTTTを介してLINE Notifyの通知を使う事を実現してみました。

調べてわかったのですが、このボタンはPowered by AWSのモデルと違いボタンを押した位置座標を大まかではあるものの取得できる機能があります。そこで、今回はtwitterの動画にあるように、LINE Notifyに文章を送るだけでなく、今の位置情報をGoogle maps APIの中のStatick map APIを使って一緒に今の位置情報を画像で送ってみました。

この記事ではこの実現方法をまとめます。

#開

元記事を表示

RDS Proxyの挙動検証(lambda → RDS Proxy → RDS)

AWS RDS Proxyがどのように挙動するのかを検証する。
主にDB接続数まわり。
https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/rds-proxy.html

# 検証環境
## 検証用処理
– `s3:ObjectCreated`のイベント発生をトリガに、lambda起動→RDS通信(特定カラムのupdate) という処理で検証する。([検証用lambda](https://github.com/tatsukoni-pra/lambda-rds-test))
– トリガとなるバケットパスにファイルを100個まとめてアップロードし、lambda関数を100個起動 → RDS接続を100個発生させる。

## 検証用RDS
– エンジンバージョン: `Aurora MySQL 5.7`
– DBインスタンスサイズ: `db.t2.small`(DB最大同時接続数は45)

# 検証
## RDS Proxy未使用時(lambda → RDS直接続)
処理前は以下の感じ。

“`
MySQL> SHOW G

元記事を表示

[AWS] Cloudwatch_LogsからLambda経由で軽いETLしつつOpenSearchでApacheログを可視化する方法

# やりたい事

2022/01/13開催の [SB Tech Festival](https://www.softbank.jp/biz/events/techfestival-deeptech-2022/) で登壇した内容、「ビッグデータ活用の第一歩AWS環境での大容量ログ可視化」の詳細手順(後半)ページです。

### このエントリで解説するのは以下のイメージ
![2022-01-11_09h20_031.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99499/23980234-e06e-96dd-3d8b-0bba4493cd57.png)

前半部分のFargate+Firelens+CloudwatchLogsについては[こちら](https://qiita.com/Kedamari/items/fba00598c0bd9e08fdb9)の記事を参照してください。

# 手順
2022/01/11時点でECSコンソールは新しいエクスペリエンスが提供されていますが、本エントリでは旧UIをベー

元記事を表示

EC2インスタンスの自動停止起動

# 経緯
EC2インスタンスを、使用しない時間帯のみ止めてコスト削減をしたい。
Lambdaのみでの実装と、Instance Schedulerでの実装を行い、それぞれの複数インスタンス・複数スケジュール設定の場合やコスト、注意などをまとめる。

**【参考】**

https://aws.amazon.com/jp/premiumsupport/knowledge-center/start-stop-lambda-cloudwatch/

https://aws.amazon.com/jp/builders-flash/202110/instance-scheduler/?wsf.filter-name=*all

https://docs.aws.amazon.com/ja_jp/solutions/latest/instance-scheduler/deployment.html#step5

# Lambda のみで実装する

**〇手動方式〇**

**1. IAM ポリシーと IAMロール作成**

* ポリシーの作成。CloudWatch Logの書き込み、E

元記事を表示

Aurora(Postgres)に読取専用のRDS Proxy Endpointを使ってアクセスするLambdaをcdk v2で作成したメモ

## 概要
[前回](https://qiita.com/hibohiboo/items/178f39898b0f88cf9387)はRDS Proxyは1つで、どちらのユーザも同じ読書ができるエンドポイントを使用していた。
今回は、読取専用のユーザは読取専用のエンドポイントを介してアクセスを行うようにする。
読取専用のエンドポイントを作るため、RDSクラスタには読書用のインスタンスと読取専用のインスタンスを用意する。

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

## アーキテクチャ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99876/941d7bad-ce6f-8c9f-4bb2-337849ad6f28.png)

## CDK
### VPCでサブネットIDをSystemMangerのパラメータストアに追加
読取用のエンドポイントの作成に必要。

“`diff:cdk/lib/vpc-stack

元記事を表示

【AWS】Lambda with EFSの構築

## きっかけ
– Lambdaで/tmp上限の500MBを超えるファイルを扱う必要があり、その動作確認のため。

## 構築Step
1. VPCの構築、SG等の設定
1. EFS構築、アクセスポイントの設定
1. Lambda構築、設定、動作確認

### 1. VPCの構築
– 適当なVPCを作成
![スクリーンショット 2022-01-10 0.05.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479886/3383c865-f5b8-e3cc-b62f-fe8393c5340e.png)

– DNSホスト名を有効化
![スクリーンショット 2022-01-10 0.05.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479886/f211a718-78a3-74c4-059b-7256fe092938.png)

– 適当なサブネットを作成
![スクリーンショット 2022-01-10 0.05

元記事を表示

AWS上にリグの監視/自動復旧システムを作ってみた(①監視/自動復旧編)

#目次
– [1.背景](#1背景)
– [2.構成](#2構成)
– [2-1.監視ロジック](#2-1監視ロジック)
– [2-2.Lambda](#2-2lambda)
– [2-2-1.Lambda関数の作成](#2-2-1lambda関数の作成)
– [2-2-2.プログラムソース](#2-2-2プログラムソース)
– [2-2-3.コンフィグ](#2-2-3コンフィグ)
– [2-2-4.モジュールの導入](#2-2-4モジュールの導入)
– [2-2-5.外部APIキーの取得](#2-2-5外部apiキーの取得)
– [2-2-5-1.NiceHash](#2-2-5-1nicehash)
– [2-2-5-2.LINE](#2-2-5-2line)
– [2-2-5-3.SwitchBot](#2-2-5-3switchbot)
– [2-2-6.EventBridgeによるトリガー定義](#2-2-6eventbridgeによるトリガー定義)
– [2-3.RDB](

元記事を表示

Aurora(Postgres)にRDS Proxy経由(IAM認証)でLambdaから接続する設定をcdk v2で行ったメモ

## 概要
LambdaからRDS Proxy経由でDB設定を行う手順のメモ。
RDSは[前々回](https://qiita.com/hibohiboo/items/9a6f6cf4b01927f670d0)利用したものを使う。
また、RDSへの接続は[前回](https://qiita.com/hibohiboo/items/e043ff7ab4e343e786fc)の手順でポートフォワーディングをして行う。
コード本文にパスワードを含めないほうがかっこいいと思ってRDSProxyへの接続はIAM認証を使用している。
また、Adminユーザ以外でのユーザの接続もここで試す。
cdk,lambdaともにTypescriptを使用。

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

## アーキテクチャ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99876/a386ce0d-1cb9-4e08-446d-80

元記事を表示

Lambdaでec2自動起動停止

#自動起動
#iam role作成
AWSコンソールへログイン
https://console.aws.amazon.com/iamv2
左ペインロール押下
ロールを作成押下
一般的なユースケース:lambda
ポリシー:AmazonEC2FullAccess
ロール名:control-ec2
作成

#lambda関数作成
https://console.aws.amazon.com/lambda
関数の作成押下
関数名:start-ec2
ランタイム:python3.9
デフォルトの実行ロールの変更
既存のロールを使用する:control-ec2
関数の作成
以下コード入れる

“`
import boto3
region = ‘ap-northeast-1’
instances = []
instances.append(‘対象インスタンスID1’)
instances.append(‘対象インスタンスID2’)

ec2 = boto3.client(‘ec2’, region_name=region)

def lambda_handler(event, context):

元記事を表示

Yahoo NewsをSlackへ通知してみる ~AWS Lambda × Web scraping × Slack API~

#はじめに
今回はAWS Lambdaを使ってSlackに通知を送るというシンプルなサーバレスアーキテクチャ作成を紹介します。
すでにLambdaとSlackについては多くの記事が出ていますがWeb scrapingを組み合わせたものはあまりないように思いました。
私がクラウド技術のすごさを思い知ったのがこの**Lambda×Web scraping**という組み合わせだったので初心に帰るという意味で記事にします!

#Web Scrapingとの出会いと課題
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2363360/1d174d88-1680-627f-010a-cdd57bb852c0.png)
>資料出所:[Webスクレイピングとは?定義から活用事例までの説明](https://www.octoparse.jp/blog/web-scraping/ “Webスクレイピングとは?定義から活用事例までの説明”)

##1.Web Scraping
皆さんはWeb scrapingと

元記事を表示

AWS LambdaでCSVを一時領域を利用せずS3に保存する

## はじめに
Lambdaでは一時領域として`/tmp`フォルダが提供されていますが、上限512MBのまでの制限があり大容量のCSVファイル生成があった場合に制限がかかっていました。
csvにストリーム出力してS3に保存する方法があるか調べてみました。

## 変更前
変更前のCSV作成〜s3アップロードは以下になります。
`/tmp`領域にファイル作成してS3にアップロードしていたので512MBを超えるファイルの作成はできませんでした。

“`python
import csv
import boto3
import psycopg2
import psycopg2.extras

def get_conn():
return psycopg2.connect(
host=’hostname’,
port=5432,
database=’xxxxxx’,
user=’xxxxx’,
password=’xxxxx’,
)

def get_data():
with get_co

元記事を表示

Lambda を使用して、Amazon EC2 インスタンスを一定の間隔で停止および起動するにはどうすればよいですか?

教材

https://aws.amazon.com/jp/premiumsupport/knowledge-center/start-stop-lambda-cloudwatch/

実作業

停止して起動する EC2 インスタンスの ID を取得します

EC2の画面から当該EC2インスタンス選択
リージョンも確認しておく

JSON ポリシーエディターを使い IAM ポリシーを作成します

IAMの画面からポリシーを選びポリシーの作成をクリック
JSONタブをクリック
コピペして適切なタグをつけて名前をつけて作成

Lambda のための IAM ロールを作成します

IAMの画面からロールを作成
さきほどのポリシーをアタッチして
適切なタグをつけて名前をつけて作成

EC2 インスタンスを停止および起動する Lambda 関数を記述する

このまま実施します
>
1. AWS Lambda コンソールで、[Create function] クリックします。
2. [Author from scratch] をクリックします。
3. [

元記事を表示

OTHERカテゴリの最新記事