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

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

AWSマネージドを利用し、はじめてのWEB API開発をしてみた話

## はじめに

最近WEB APIやRESTについて学習中なので、AWSのマネージドを利用してWEB APIの開発をしてみました。

構成の概要や、開発中に参考になった記事、便利だなと思ったツールやデバックについて紹介したいと思います。

AWSマネージドでのWEB API開発に興味のある方に読んでもらえると嬉しいな、と思っています。

### 採用技術

– API Gateway
– Lambda
– DynamoDB

「まずは動くAPIを!」という事で、サーバーサイドの実装のみ行っています。
LambdaはPythonで実装しています。

### その他

– VSCode拡張機能
– REST Client(テスト用)
– Swagger Viewer(ドキュメント生成用)
– CloudWatch(デバック用)

「VSCodeの拡張機能を色々お試ししたい!」という目的もあったので、テストやドキュメント生成用としてVSCodeの拡張機能を利用しています。

### 構成

今回はシンプルなCRUD機能の実装という事で、辞書アプリケ

元記事を表示

pythonで書いたlambdaのreturnはjson.dumps()されている

# はじめに
もうタイトルがそのまんま結論なんですけど、
色々読んで試してやっと自分の中で解決したので記事にします。

対象読者は
+ 公式ディベロッパーズガイドを読んでもあまりピンと来なかった方
+ lambdaからの返り値に無駄にバックスラッシュついてて困ってる方

です。

# 結論
pythonで書いたlambdaのreturnはjson.dumps()されています。
なので一度json.dumps()したものを要素として渡すと
意図しないバックスラッシュがついてきます。

公式のディベロッパーズガイドの「値の返し(Returning a value)」のところ読むと書いてあるんですが、
最初は日本語版読んでも意味わかんなくて
英語で読んでやっとあれ?となって
いろいろ試してやっと「そういうことか!」となりました。

公式のディベロッパーズガイドはこちら
日本語版:[https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/python-handler.html#python-handler-return](https://docs

元記事を表示

RDS Ploxy 経由で MySQL にアクセスするLambdaを、VPC内で実行

# はじめに
RDS Ploxy 経由で MySQL にアクセスするLambdaをVPC内で実行させましたので、手順をまとめます。

![スクリーンショット 2022-06-23 22.00.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/988747/6391a70c-3d26-f29d-2a5c-a8db47bbb6c3.png)

# RDS Ploxyの作成
RDS Ploxyは、以前作成した記事がありますので、こちらを参考にしてください。

https://qiita.com/hirai-11/items/07b25f81f1a983e0191c

# private subnetにLambdaを作成

## 設定

– IAMロール
– `AWSLambdaENIManagementAccess`を付与します.これによってVPC上でLambdaが実行できます。
– タイムアウト時間
– 30秒にします。実行に数秒かかります。
– 環境変数
– RDS_HOSTN

元記事を表示

Lambda で S3にアクセスするのに access id と secret key はいらないのねー

S3にアクセスしたい!から boto3を使うよ!
普通はこんな感じで、 id と key 渡すんじゃ
“`python:qiita.rb
s3 = boto3.resource(‘s3’,aws_access_key_id, aws_secret_access_key)
“`
でも Lambdaでは
“`python:qiita.rb
s3 = boto3.resource(‘s3’)
“`
でよいんですと!

でも`IAM設定ってものがいりまっせ`、だんな

# S3を使うための、IAM設定
1. 設定 > アクセス権限 
1. 「実行ロール」の中のロール名をクリック![スクリーンショット_2022-06-24_14_51_26.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47236/a9718783-2986-5017-c775-5dbc063c0b20.jpeg)
1. 許可 「許可ポリシー」の右「許可を追加」から、「インラインポリシーを作成」![スクリーンショット_2022-06-24

元記事を表示

Lambda Layersの設定 Layer設定するだけでrequestsが使えるって

 lambdaで必要なライブラリはzipであげないといけない!けど、
### 皆んながよく使うやつは、Layerってとこに設定すればいいんですって!
さらに、
有志でこんなものが!
https://github.com/keithrozario/Klayers/blob/master/deployments/python3.8/arns/ap-northeast-1.csv
### このARNをLayerに設定するだけ、すてき!

# requestsの設定の仕方
コード の下

コードソース

コードのプロパティ

ランタイム設定

レイヤー
の右「レイヤーの追加」

1. レイヤーソース > 「ARNを指定」を選択
2. ARNを指定のテキストフィールドに
3. ここから入れたいものをさがして、そのarn欄をコピペ
https://github.com/keithrozario/Klayers/blob/master/deployments/python3.8/arns/ap-northeast-1.csv
今回は「requests」の latest の arn
![スクリー

元記事を表示

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

# はじめに
EIPの料金体系についてご存知でしょうか。
以下のケースで、EIPは料金が発生します。

1. 実行中のインスタンスと関連付けられている追加の IP アドレス(= インスタンスは実行中だが2個以上EIPが関連づけられている)
2. 実行中のインスタンスと関連付けられていないEIP
3. 関連付いているEC2が停止している
4. EIPを、1ヶ月に100回以上リマップ

https://aws.amazon.com/jp/ec2/pricing/on-demand/

ちょくちょく個人の検証環境にて2番目の**EC2に関連付いていない(= 使わずに放置されている)EIP**が湧くことがあります。(単純に消し忘れ)

EIPが1つ生き残っていた場合、1ヶ月あたり大体以下の無駄な費用が発生します。
(これを多いととるか少ないととるかはお任せします)

“`
0.005 × 24 × 30 × 135 = 486円

※計算に必要な値
EIPの料金:$0.005/h
1ヶ月:30日とする
1ドル:135円とする
“`

そこで今回紹介するLambdaを使ってこのEIPを一網打

元記事を表示

Lambda 最初に呼ばれる関数 ハンドラの設定

コード の下

コードソース

コードのプロパティ

ランタイム設定
の中の ハンドラ
右の「編集」から

[ファイル名].[関数名]
![スクリーンショット 2022-06-24 11.40.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47236/a4a001de-546f-a033-f725-f9c03c12c75b.png)

元記事を表示

【AWS】ECSタスクをLambdaから環境変数追加して起動する方法【Java】

# 最初に
ECSタスクをLambdaから起動するのに手間取ったため、その手法を書き記しておきます。
使用言語はJavaですが、AWSの構成としてはどの言語でも同じよにして実現可能なようです。

## やりたかったこと
* S3にファイルをアップロードしたことをトリガにしてLambdaを起動する
* LambdaからECSタスクを起動する
* アップロードされたファイルをECSでダウンロードする。(そのために、S3のファイル名などを知る必要がありました)
※ Lambdaだけで処理するのが簡単だけど、ストレージ10Gの制限があるためECSを使用することにしました。
![ECS-Lambda-AWS-picture.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2618997/d9d9b59b-9117-dfb5-9313-509720fe7e34.png)

## わからなかったこと
1. LambdaからECSタスクを起動する方法
1. 環境変数を指定してECSタスクを起動する方法(S3のフ

元記事を表示

非VPC、VPC上のLambdaが リソースに対して実行する・される パターン集

# はじめに
Lambdaを使う上で、VPC内の`public subnet`、`private subnet`にあるLambdaが他のリソースにアクセスするパターンや、他のサービスからLambdaを呼ぶパターンなど、様々なパターンで実現可能かどうかまとめました。

# 非 VPC の Lambda がリソースに対して、アクセスする
![スクリーンショット 2022-06-21 22.39.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/988747/57644825-aec1-e23b-ffe8-0bbeeb0148f1.png)

| Lambda → リソース |アクセス|
|:-:|:-:|
| Lambda → リージョンサービス |○|
| Lambda → public内 リソース | ○ |
| Lambda → private内 リソース | ✗ |

リージョンサービスのリソースに対して、Lambdaを実行することはできます。

Lambdaは、VPC内のサー

元記事を表示

Chaliceを使って爆速でAPIサーバを構築するやつをやってみた

# 概要
* AWS純正のフレームワークであるChaliceを利用して、爆速でAPIサーバを構築しようという話です
* 探せばいくらでも記事が出てくるのですが、情報が散見してるのでまとめてみた

# Chaliceとは?
* サーバーレスアプリケーションのためのフレームワーク
* サーバレス環境が簡単に構築できるよ
* コンソールぽちぽちする必要もないし、ymlファイルを書いたりする必要もない

# 前提
* ~/.aws/config と~/.aws/credential の設定を行なっていること
* pythonが使える環境であること(3.9系で動かしています)
* APIサーバに限らず、他のAWSサービスと連携してもっと色々なこともできるようなのですが、今回は割愛します

# 手順
## 基本
**①chaliceをインストール**
“`
$ pip install chalice
“`

**②プロジェクト作成**
“`
$ chalice new-project helloworld
“`

こんな感じのディレクトリ構成のフォルダが出来上がると思います
“`
.

元記事を表示

AWS Lambda SAMとは?~AWS SAMを使ってPythonのLambdaプログラムを簡単に作成する~

# 概要

前のLambda投稿に続き今回もAWS Lambdaネタになります。
今回はLambda構築・設定・イベントソースマッピングからソースコードを管理・編集しやすいようにAWS サーバーレスアプリケーションモデル (Serverless Application Model)、AWS SAMにチャレンジします。

https://aws.amazon.com/jp/serverless/sam/

サンプルコードなどの簡単なプログラミングであればAWSコンソールで設定、ソースコードの直接編集すれば良いのですが、ちょっと規模が大きくなるとLambdaの設定・ソースコードをしっかり管理したい、しっかりテストしたいという状況が出てきます。

その時にかなり便利なのがAWS サーバーレスアプリケーションモデル(AWS SAM)になります。

Lambdaを使って本格的にLambdaのサービスを運用したい人、興味がある方は読んでみて下さい。

資格試験の勉強法は記事は以下を参照。

[AWS初心者がAWS 認定ソリューションアーキテクト – アソシエイト資格試験に合格した時の勉強法](ht

元記事を表示

Flutter から Lambda を経由し Amazon Pinpoint で Push 通知を実装 ②

# はじめに
こちらの続きになります。

https://qiita.com/hirai-11/items/4acb61bede53805c1527

以下を行っていきます。

– Pinpointに対してセグメントとキャンペーンを更新するLambdaを作成

– Pinpointに対してキャンペーンを削除するLambdaを作成

– Lambda_Layerを利用し、メソッドをモジュール化(共通化)する
– 作成、更新、削除をモジュール化します

– フィルタリング内容が同じ場合、セグメントを再利用するLambdaを作成

# 5. Pinpointに対してセグメントとキャンペーンを更新する
Pinpointに対してセグメントとキャンペーンを更新するLambdaを作成します。

![スクリーンショット 2022-06-19 11.51.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/988747/5193d0f9-cae3-bc26-d4dd-4eda30b54678.png)

#

元記事を表示

SAM CLIを用いたLambda Layer 検証方法メモ

## Lambda Layerとは

* 複数のLambda関数で外部ライブラリやビジネスロジックを共有できる仕組み

* メリット

* ライブラリなどの共通コンテンツをレイヤーとして作成することで、パッケージにライブラリを含める必要がなくなる。

* アップロードされたデプロイアーカイブのサイズを縮小し、デプロイスピードを高速化できる。

## 検証

* DynamoDBアクセス共通処理をLayer化し、SAMで検証用APIを作成する。

### 事前準備

* DynamoDB環境構築

* `docker-compose.yml`

“`yaml
version: ‘3’

services:
dynamodb-local:
container_name: dynamodb-local
image: amazon/dynamodb-local:latest
user: root
command: -jar DynamoDBLocal.jar -share

元記事を表示

API Gateway + Lambdaを用いた外部APIリクエスト中継用エンドポイントの作成 メモ

* アプリから外部APIを呼び出す際、一度API Gateway + Lambdaの中継用エンドポイントで受けて転送したいケースがあった。

![]()![lambda_proxy.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/586535/ac5e0f9b-ecbe-a6a1-ee79-390cf7281f23.png)

* SAMで作成してみたので、メモとして残しておく。

## 事前準備

* プロジェクト作成

“`shell
sam init
“`

※RuntimeにはPython 3.8を選択し、テンプレートには、Hello Worldテンプレートを使用。

## コード

* `swagger.json`

* API定義

“`json
{
“openapi”: “3.0.0”,
“info”: {
“version”: “2016-09-12T17:50:37Z”,
“title”:

元記事を表示

Step Functionsで動的並列処理

# 概要

Step Functions でワークフローを組む際、前段の出力が可変長になることがある。こういうときに次段の並列数を動的に決定したい。これを叶えるための機能が存在するので実際に試してみた。

機能の解説は参考リンクに譲るとして、ここではコンソール画面から実際に設定、実行するまでの手順を書いていく。

# 設定方法

## 全体のワークフロー

Map を置いてその下に繰り返したい処理を入れる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193600/7a6a1117-7181-e264-9aa4-baf45dc66a31.png)

今回 Lambda 関数は Python3.9 で以下の様に実装している。

“`python3
import json

def lambda_handler(event, context):
return {
‘statusCode’: 200,
‘body’: json.dumps({“

元記事を表示

Flutter から Lambda を経由し Amazon Pinpoint のPush通知を実装

# はじめに

flutterでpush通知の実装を目的に、Lambdaを経由してAmazon Pinpointでpush通知する構築方法についてまとめます。

1. pinpointに対して、エンドポイントの登録
![スクリーンショット 2022-06-18 18.11.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/988747/71e8257d-fb14-57d5-9e12-a487533a6ca8.png)
1. pinpointに対して、エンドポイントの更新
![スクリーンショット 2022-06-18 18.12.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/988747/19b3b5c0-c6de-df13-dd24-cf500a0b50a6.png)
2. pinpointに対して、セグメントを作成
![スクリーンショット 2022-06-22 22.57.19.png](https://qi

元記事を表示

Amazon Inspectorの診断結果から”High”のみ抽出して通知する

# はじめに

ご覧いただきありがとうございます。

Amazon InspectorでEC2の脆弱性診断を行い、評価結果が”High”の対象のみを抽出してSNS通知を送れるようにしてみました。

# 概要

1. Inspector~SNS~Lambda間の連携確認
2. Lambdaの実装
 

# 事前準備

– AWSアカウント作成
– AdministratorAccessを付与したIAMユーザーの作成
– EC2作成/Amazon Inspectorのセットアップ

診断を行うと、AWSマネジメントコンソールから、診断結果をダウンロードできます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2697264/84731db8-dcf4-f8e8-4389-965f5b8e7b0c.png)

High,Mediumが混在した38件の結果が表示されました。
それぞれ個別に内容を確認できます。

今回は診断結果が”High”のものをフィルタリングして、Lambdaを経由してEメ

元記事を表示

AWS Lambdaを使ってTimeTreeのイベントをGoogleCalenderに同期したい

家庭のカレンダーにTimeTreeを利用していて、予定を共有するのに重宝しているのですが、ロック画面上に予定を表示してくれるGalaxyのAlways On Displayには連携できず、不便だったため連携処理をAWS Lambda上で連携させてみました。

TimeTreeに他のカレンダーを表示することは可能ですが、逆のパターンはCalDAVには対応しておらず、1件づつコピーする方法しかありません。

[他のカレンダー(Google カレンダーなど)をTimeTree上で利用する](https://support.timetreeapp.com/hc/ja/articles/360000629341)

Galaxyに関わらず、TimeTreeを他のカレンダーに連携したい方にも役にたつかもしれないです。

普段Serverless framework + AWS Lambdaを利用しているので、今回もAWS Lambda上で連携してみたいと思います。

記事を書いてみてかなりの長文になってしまったので、実際のソースものせますので合わせて見ていただければと思います。

# Always

元記事を表示

cdkでtypescriptのlambdaをデプロイしてみた

# AWS lambda

## サービスの概要

– サーバレスでイベント駆動型のコンピューティングサービス
– サーバーの管理をする必要がない
– 従量課金

## 料金

まずは利用料金の確認です。
コード実行時間(1ミリ秒単位)で課金されます。
料金は関数に割り当てたメモリ量によって異なります。
メモリ量を増やすとCPUパワーも増加し、結果として処理時間が短くなるので料金が安くなる場合もあります。
割り当てるメモリ量はチューニングが必要となりますね。

詳細な料金は更新ページを参照。

https://aws.amazon.com/jp/lambda/pricing/

### 無料枠

100万件/月リクエストの無料枠があります。また、40万GB-sのコンピューティングタイムが含まれます。
少しさわってみるのには十分すぎますね。

他のリージョンにデータを転送したり、S3と連携させると別途費用がかかるようです。微々たるものですが。

## まずはリソースを作ってみよう

無料枠の確認ができたところで、簡単な関数を作ってみます。

ディレクトリの構成はこんな感じです。
.
├─

元記事を表示

lambda-uploaderでResourceConflictExceptionが発生する時の対処

## 事象
lambda-uploaderを実行した際に以下のエラーが発生していた。

“`
ResourceConflictException: An error occurred (ResourceConflictException) when calling the UpdateFunctionConfiguration operation: The operation cannot be performed at this time. An update is in progress for resource
“`

## 原因

2019/11/27 lambdaの仕様が変更された。

https://aws.amazon.com/jp/blogs/compute/tracking-the-state-of-lambda-functions/

おそらく、これが原因で、lambda-uploaderコマンドにて実行時ResourceConflictExceptionが発生するようになった。
以下のPRで問題解消されており、v1.3.1(2022/4/16)としてリリース

元記事を表示

OTHERカテゴリの最新記事