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

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

AWS Chalice で AWS Data Wrangler を利用する

# はじめに
AWS 上のデータを Pandas[^pandas] で処理したいときには、各種 AWS サービス(RDS, DynamoDB, Athena, S3 など)からのデータの load/unload を簡単化してくれる Python モジュール AWS Data Wrangler[^awswrangler] が超便利です。しかも、AWS 自体が開発してオープンソース公開しているものなので、ある程度安心して使えます。
なんですが、この AWS Data Wrangler を Lambda で利用する際には、デプロイパッケージのサイズに適用されるクォータ(未圧縮で 250MB、zip 圧縮済みで 50MB)が問題になります。具体的には、AWS Data Wrangler を普通に pip でインストールすると、それだけでパッケージサイズが 250MB を超えてしまいデプロイすることができません。
実はこの問題、[AWS Data Wrangler のドキュメント](https://aws-data-wrangler.readthedocs.io/en/2.14.0/instal

元記事を表示

APIgatewayのプロキシ統合と非プロキシ統合についてわかってなかった

・勘違いポイント
プロキシ統合、非プロキシ統合、なにもしないの3択だと思ってた
・実際
APIgateway(少なくともRESTAPI)は統合をする必要がある
→統合方法としてプロキシ統合をするかプロキシを使わないか(非プロキシ統合か)を選ぶという考え方だった

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/969819/705ee572-f71a-28b4-7d16-14d7b223c79a.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/969819/a60f295f-44f4-5564-6881-26fd0404c6a7.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/969819/36713737-1105-c5a1-1456-7e176d243fe9.png)

元記事を表示

Python リスト内包表記とmap,lambda攻略(基礎)

# リスト内包表記はよく見かけるので、仕組みを理解しよう(ついでにmapやlambdaも)

## 目次
01. [リスト内包表記](#listin)
02. [リスト内包表記_if文](#listin_if)
03. [lambdaやmap](#lambda)


### 今回使用するテストデータは以下とします

“`python
TestList = [1,2,3,4,5]
“`


## 01.リスト内包表記

リスト内の要素に対して演算(2倍)をします

“`python
processed_list = [num*2 for num in TestList]
“`

この結果は以下になります
“`
[2,4,6,8,10]
“`

あえて、言葉で書くならこんな感じでしょうか。

![スクリーンショット 2022-03-21 21.03.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906162/f0a169fb-903

元記事を表示

Challiceを使用し、Lambdaのコードを管理 ②

# はじめに
LambdaをGithubでコード管理するにあたり、chaliceを採用したため、chaliceについてまとめます。
前回の続きになります。

https://qiita.com/holdout0521/items/e6c8b12dab5728d36684

# config.jsonの設定
config.jsonは、以下の2つがわかりやすいです。

https://aws.github.io/chalice/topics/configfile.html

https://www.nooozui.com/entry/2019/10/31/223506

## VPC内でLambdaをデプロイ
VPC内でLambdaを使用する方法を説明します。

`subnet_ids`と`security_group_ids`の2つを設定するだけです。

`subnet_ids`:VPCに配置してあるサブネットのうちどのサブネットを使用するか指定する。
`security_group_ids`:lambdaに設定するセキュリティーグループを指定する

“`diff_json:confi

元記事を表示

LambdaでIAMロールを付与していないとこんなエラーが出る件

## 経緯
EventBridgeをキックしてLambdaでEC2を停止するスケジューリングを立てようとしたところ、Lambda実行で権限のないエラーが発生したので、調査した結果を記事にしてみようと思った。

## 構成
![stop_ec2_at_lambda.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/478546/cc627c27-6fc6-b0c0-8084-13c3e6ea35cf.jpeg)

## Lambdaのコード
言語は「Python3.9」です。

“`
import boto3

region = ‘ap-northeast-1’

instances = [‘i-0cfa865823946e45e’]

def lambda_handler(event, context):
ec2 = boto3.client(‘ec2’, region_name=region)
ec2.stop_instances(InstanceIds=instances)
“`

元記事を表示

Lambdaレイヤーを作成・アップロードする

# はじめに

[株式会社データインサイト](https://datainsight.jp/)社外取締役の宮野です。
機械学習APIを作りたいとき、なるべくサーバの保守をしないで済むようにしたい場合、あまり高機能なものをやるわけではなければAWSのLambdaでサーバレスなシステムを作ることによって安価・迅速に実現したくなることがあると思います。

その場合、詰まるところがいくつかあったのでまとめてみました。

すぐにLambdaにLayerをアップロードしたいという方はGithubにコードをあげておいたのでこちらをご確認ください。

https://github.com/mynkit/upload-lambda-layer

# Lambda-Layers

Lambdaは機械学習関連のパッケージはおろか、numpyやpandasも標準でインストールされていません。そのため、必要なライブラリのコードを[Lambda-Layers](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/gettingstarted-concepts.h

元記事を表示

AWSサーバーレス仕組みでメールの自動送信システムの構築

こんにちは、王と申します。

うちの会社は改善の取り組みを実施しており、ヒヤリハットの事例を皆さんに入力頂くように
自動的にメールで案内を出すシステムを構築することを検討しています。

社員名簿をもらい、毎月、月と氏名コードの下1桁が一致する方を対象にメールを発信する
という要件だそうです。
AWSのサーバーレスのクエリサービスを利用することで、オンプレミス環境でDBサーバーを立てるより、
手間を省くと思うのでメールの自動送信システムを構築することにしました。

私の設計した構成図は以下の通りです。
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2600067/046df616-05e3-c59d-bab8-491c49404aee.png)
1)「社員名簿.xlsx」をCSVファイルに変換し、S3 Bucketへアップロードする
2)Athenaで、DDLを作成・実行し、社員名簿テーブルを作成する
3)Athena APIを呼び出し、通知するメールアドレスを抽出するLambda関数を作

元記事を表示

Challiceを使用し、Lambdaのコードを管理 ①

# はじめに
LambdaをGithubでコード管理するにあたり、chaliceを採用したため、chaliceについてまとめます。

chaliceのメリットとして、以下が挙げられます。
– シンプルにLambdaをコード管理できる
– デプロイがSAMに比べて、簡易でデプロイが早い
– 今回は、Lambdaのみですが、API Gateway、S3, SNS, SQSといったAWSサービスも利用できる
– IAM ポリシーを自動生成してくれる

今回は、APIGatewayは、使用せず、複数のLambdaのコード管理をするために、Chaliceを使用します。

# IAMユーザーの設定
ローカルのmacのターミナルで`chalice`をインストールします。

“`terminal
$ python -V
Python 2.7.18

$ pip install chalice

$ chalice –version
chalice 1.26.0, python 3.9.2, darwin 21.3.0
“`

ChaliceでLambdaをアップするためには、アップするAWSア

元記事を表示

標準ライブラリurllib request と 外部モジュールrequests をLambdaのコードでそれぞれまとめた

# はじめに
Lambdaでapiにリクエストする際、requestのモジュールが必要でした。
標準ライブラリurllib request と 外部モジュールrequests がありましたので、それぞれまとめます。

外部モジュールであるrequestsの方が、コード量が少ないですが、モジュールをアップする手間があります。
ただ、手間と言ってもchalice等を使用することで、手間を無くすことはできます。

# 標準ライブラリurllib request
requestsライブラリをデプロイパッケージに含める必要はなく、`import request`するだけでよいです。

https://docs.python.org/ja/3/library/urllib.request.html

## GET,POSTの場合

“`py
from urllib import request
import urllib
import json
import os

# get
def get_api(event):

api = ‘/test’
request_url = os

元記事を表示

【ServerlessFramework】serverless.ymlで利用できる変数のまとめ

serverless.ymlの変数の仕様がどこにまとまっているかわからず、かなり探し回ったのでまとめておこうと思いました。
内容的には公式ドキュメントからよく使いそうなものを抜粋しただけです。

https://www.serverless.com/framework/docs/providers/aws/guide/variables

# 基本的な変数の利用方法
まずはじめに、変数の参照には `${}` を利用します。
“`serverless.yml
yamlKeyXYZ: ${variableSource}
“`

ちなみに、serverlessの変数は再帰的な参照がサポートされており、変数をネストすることができます。

“`provider
provider:
name: aws
environment:
MY_SECRET: ${file(./config.${opt:stage, ‘dev’}.json):CREDS}
“`

# デフォルト値
参照先の変数が存在しない場合にデフォルト値を利用したい場合は `${variableSource, d

元記事を表示

銀河麻雀の待ちを判定するWebアプリを作った

麻雀YouTuberの麻雀カッコイイシリーズが投稿した「銀河麻雀」。

(ルール説明は13:40くらいから)
簡単に言えば、各種類の牌に1枚ずつ「ギャラクシー牌(銀河牌)」と呼ばれる牌種が自由になる牌が入った状態での麻雀だ。
例えば、銀河1mは1p,1sとしても扱える。
銀河東は東南西北、銀河白は發中としても扱える。

銀河牌がたくさん入ると、受け入れや待ちの数が通常よりも多くなる。
銀河牌が沢山入った順子が並べば、とても人間の頭では処理しきれない、まさに銀河が広がるような麻

元記事を表示

AWS LambdaでBoxSDK(JWT認証)を使おうとしてハマった件(備忘録)

# はじめに
本記事はタイトルの通りです。

とてもハマったため、備忘録として残しておこうと思ったのと同じようにハマって
しまった方の参考になればと思います。

結果的にAWS Lambda上でBoxSDKを使ったAPIは動作しました。
先にどうやって動いたかを紹介したあと、ハマった経緯や原因などの解説にはいります。

# Lambda環境(BoxSDK動作確認済み)

こちらの記事を参考にBoxSDKをインストール、ZIP化、S3への格納、Lambdaへのレイヤー追加を行います。cryptographyのレイヤー追加、記事ですがBoxSDKもかなり関わってました。

レイヤー追加時ですが、互換性のあるランタイムにpython3.7/3.8/3.9を指定
互換性のあるアーキテクチャはx86_64を指定しました。

https://qiita.com/Bacchus/items/7dcfc0237df196d1ab67

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184018/e7e5

元記事を表示

AWS lambdaでログが重複して出力される理由と対処法(Python)

# はじめに
AWS lambda上で、Pythonのloggingモジュールを使い、ログを表示させていたところ、重複してログが表示されていることに気づいたので、重複してログが出力される理由とその対処法を調査した。

# ログが重複する理由

### lambdaのlogging仕様
lambda上では、デフォルトで、ルートロガーにLambdaLoggerHandlerというハンドラが登録されている。([参照記事](https://qiita.com/k_hoso/items/ba7614775dbec089d18d))
つまり、自分で新たなハンドラを登録すると、ハンドラが複数存在することになり、ログが重複して出力されてしまう。

#### コード

“`python: デフォルトで存在するハンドラの確認

from logging import getLogger, StreamHandler, DEBUG, Formatter

def lambda_handler(event, context):
logger = getLogger()
logger.setL

元記事を表示

AWS Chalice Tips

## 公式ドキュメント
[Documentation — AWS Chalice](https://aws.github.io/chalice/index.html)

### 環境

– Python: 3.8
– Chalice: 1.26.6

## Chaliceでapp.pyの分割

chaliceでは`app.py`にエンドポイントを設定していくため、一つのプロジェクトで複数の管理をやらせようとすると肥大する傾向がある。

例:
“` python:app.py
from chalice import Chalice
app = Chalice(app_name=’foo-app’)

@app.route(‘/’)
def index():
return {‘hello’: ‘world’}

################
# 記事管理
################
@app.route(‘/articles’, methods=[‘GET’])
def getArticles():
# ~
# Something Code
#

元記事を表示

make(旧integromat)を使ってLambdaを実行する

## 1.はじめに
make(旧integromat, 以下本記事ではmakeで記します)からLambdaを呼び出す手順です。
ただそれだけなのですが、makeに関する情報が少なく難儀したので、やったことを書き留めました。

## 2.今回やること
こんな感じのパイプラインを作ってLambdaを実行します。
Slackのチャンネルに投げたメッセージをトリガーにして、OutgoingWebhooksからmakeのWebhooksを呼び出す。
WebhooksはSlackやGmailに代替しても同じことができると思います。

![スクリーンショット 2022-03-14 21.25.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278897/4f82290b-f3e2-c090-332e-6b27ad24e777.png)

## 3.アプリの設定
一般的な手順で各アプリに対して設定を行い、パイプラインを作ります。

### 3-1.Slack
適当なチャンネルを作成する。パブリックとプライベートど

元記事を表示

lambdaでセキュリティグループのインバウンドルールを変更する

AWSに構築したシステムのセキュリティ設計として、セキュリティグループでインバウンド制限をすることは珍しくないと思います。システムの利用者が増えた・減った場合、セキュリティグループを更新する必要があり、通常はAWSコンソールで変更すれば良いですが、諸事情により非エンジニアがAWSコンソールを使わずに変更できるようにする必要があったので、その方法をメモしておきます。

# はじめに
設定する人がエンジニアではない想定だったので、WEBでセキュリティグループのインバウンドを追加・削除できるようにしました。全体のアーキテクチャは下記のような感じなのですが、この記事ではlambdaにフォーカスしています。

![provDiagram.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1989777/4c9dff3d-0b12-3990-03e8-3c8ee5cfe207.jpeg)

# lambdaでセキュリティグループの追加削除する
lambdaでboto3を使ってセキュリティグループへのIPアドレス追加、削

元記事を表示

Amazon Connectで、オペレーターが着信履歴からユーザー情報を確認する方法

# はじめに
電話をかけると、オペレーターに繋げるConnectシステム構築した際、オペレーターが電話に出られず、発信者が電話を切る場合があります。
その場合、オペレーターが折り返しの電話をする必要があり、かつ発信者の名前を知る必要がありました。

Connectのシステムは、事前に電話番号と名前をDynamoDBに登録したユーザーのみが使用できる仕様です。
そのため、`オペレーターが着信履歴からユーザー名などを確認できる仕組みを構築`しましたので、まとめます。

# 事前構築
下記のサービス構築を行いました。
DynamoDBでは、パーティションキーを`電話番号(user_phone)`にし、`family_name`と`given_name`を属性として加えます。
connectに発信すると、発信電話番号をLambdaが受け取り、Lambdaが発信電話番号から`電話番号(user_phone)`に一致する項目を取得し、`family_name`と`given_name`を返すようにします。

その後、オペレータにつなげる、というお問い合わせフローを作成します。
![スクリーンショッ

元記事を表示

AWS Lambdaを使ってSlack botを作る方法

# はじめに
AWS Lambdaを使って、簡単にSlack botを作られる方法をご紹介します。
– お昼ご飯を選ぶBot (ランダム)
![random.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2531401/3b9bb9c9-97e5-e058-af45-afecbaa7d2df.png)
– 当番ローテーションBot (シーケンシャル)
![sequence.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2531401/cb62cab4-50d9-2dd6-a6e9-fc64f7d03f8e.png)
# 前提
以下はすでに準備されている前提となります。
– AWSアカウント
# 手順
# 1. Slack
## 1.1 Slack App 作成
https://api.slack.com/

Slack APIからアプリを作ります。
![nagare1.png](https://qiita-image-

元記事を表示

AWS Cognitoを使って認証済みユーザーしか実行できないAPIを作成する

# 背景
ログインしたユーザーだけ実行可能なAPIを作って公開したので、その手順を記載する。
AWS Cognito, API Gateway, Lambdaを使って実現し、S3で公開する。

# 作るもの
– ユーザー目線
– ユーザーはウェブサイトにアクセスし、サインアップとログインする
– ログインすると、API呼び出しができるようになる
– システム構成
– S3の静的ウェブサイトホスティング機能でウェブサイトを公開する
– Cognitoでユーザー管理、認証、認可を行う
– API GatewayでCORS設定とユーザー認証、認可を行い、Lambdaを呼び出す
– Lambdaがなにか処理をする
– API Gatewayがレスポンスを返す

# Cognitoでユーザー管理
### ユーザープールの作成
Cognitoにアクセスして、ユーザープールを新規作成。今回はGoogleアカウント連携などはせず、Cognito自身でユーザー管理する。
![ap-northeast-1.console.aws.amazon.c

元記事を表示

Lexの環境ごとのエイリアス設定

# はじめに
LexとConnectでシステムを開発した際、Lexの本番環境と開発環境のエイリアス設定を調べましたので、まとめます
また、環境ごとのLexに合わせたLambdaも関連付けます。

# 事前構築
– LexとConnect、Lambdaを構築済み

# Lexの開発環境
## Lex
Lexを作成時に設定されている`ドラフトバージョン`を`エイリアス:TestBotAlias`に関連付けましょう。
おそらく、デフォルトで関連付けられていると思います。
![スクリーンショット 2022-03-13 18.55.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/988747/0602fefd-df33-523f-38f0-1d34bdf11af2.png)

![スクリーンショット 2022-03-13 18.55.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/988747/c99e158f-2cae

元記事を表示

OTHERカテゴリの最新記事