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

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

serverlessFWにこんにちは serverlessでローカル上でAWS Lambdaを起動・呼び出してみる

## はじめに
[AWS SAMを使ってLambda(GO)のCICDをGitHub Actionsで構築](https://qiita.com/yuta-katayama-23/items/d5c786aaa2a439a3cb17)でサーバーレスアプリケーションを構築するフレームワークとして[AWS SAM](https://aws.amazon.com/jp/serverless/sam/)は触った事があったが、[serverless](https://www.serverless.com/)は触った事がなかったので、serverlessでHello World(Node.js)をやってみたので備忘録を残す。

やってみた事としては、以下の3つ。

– cli上で`severless`コマンドからHello World的なLambda関数を作成するseverless.ymlの作成
– ローカル環境でそのLambda関数を実行し、Lambdaを呼び出し
– 【おまけ】実際にAWS環境にDeploy

ソースコード全体は以下。

https://github.com/yuta-kata

元記事を表示

AWS Lambda Function URLs で API Gateway 設定なしで直接呼び出してみる

AWS Lambda Function URLs (関数URL) が発表されましたね。

https://aws.amazon.com/jp/blogs/aws/announcing-aws-lambda-function-urls-built-in-https-endpoints-for-single-function-microservices/

AWS Lambda 関数用の組み込みHTTPSエンドポイントで、API Gateway 無しでサクっと Lambda 関数を呼び出せます。ちょっと動作確認する際などに便利。上記ブログをざっくり訳して、動作を試してみたので、メモとして残しておきます。

# さっくり翻訳

AWS Lambda を使用したマイクロサービスアーキテクチャを採用して、復元力がありスケーラブルなアプリケーションを開発しましょう。これらのアプリケーションは、ビジネスロジックを実装する複数のサーバーレス機能で構成されています。各機能は、Amazon API Gateway や Application Load Balancer などのサービスを用いて、API エン

元記事を表示

LambdaFunctionURLsを使って30s越えのリクエストを検証する

# まえがき
前回のLambda エフェメラルストレージのアップデートに引き続き、今度はAPIGateway無くてもAPI経由でLambdaが起動できるようになりました。(2022.4.5)
このアップデートによりWebhookの接続先を直接指定できたり、ExpressやFlaskなどのバックエンドframeworkをLambda上に立て、Proxyさせるなどが簡単にできるようになります。
今までもAPIGatewayのProxy機能を利用したり、ALBからLambdaを呼び出すことも可能ではありましたが、よりシンプルにできるにようになりました。

# 概要
既にServerlessFrameworkでも対応されているのですが、ServerlessFrameworkのブログに、それぞれの役割が載っており、とても分かりやすかったです。

[AWS Lambda Function URLs with Serverless Framework 抜粋](https://www.serverless.com/blog/aws-lambda-function-urls-with-serverles

元記事を表示

AWS Lambda 同時実行数、エイリアス、環境変数とか実際の現場で使える機能を勉強してみる

# 概要

AWS認定試験資格取得に向けて実際にAWSを利用してみるシリーズの投稿です。
今回はAWS Lambdaをちょっとしっかり勉強してみようという中級編です。
気が付いたらLambdaがかなり進化をしていて、久しぶりに本を購入して勉強したのでその内容をまとめた投稿になっています。

私が初めてLambdaを使い始めた時の制限、コールドスタート問題の解決(同時実行数)や、実際の現場で使えるLambdaの切り戻し(エイリアス)、環境ごと異なる設定(環境変数)など、実運用で使える機能がたくさんあったのでその内容を投稿します。

認定試験勉強的にはAWS Lambdaの少しコアな部分を掴める内容になっています。
インフラに依存せずサクッとプログラミングができるLambdaを使ってみたい人、興味がある方は読んでみて下さい。

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

[AWS初心者がAWS 認定ソリューションアーキテクト – アソシエイト資格試験に合格した時の勉強法](https://qiita.com/fkooo/items/e5284a4ed3c3466ffd41 “AWS初心者がAW

元記事を表示

IoT リアルタイムデータを Lambda タンブリングウィンドウで集計してみた その2 Lambda 編

# はじめに

この記事は、[前回](https://qiita.com/sugimount-a/items/66e5cbbbf678f9960555)の続きです。

IoT Core の準備が出来たので、実際に Kinesis Data Streams と Lambda タンブリングウィンドウを連携してみましょう。

# システム構成

今回の作業範囲を明記した、システム構成図を載せます。画像右側のデータ集計の本体部分です。

![image-20220411000225976.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/0dda90af-3fb6-47a1-c44c-092776c49021.png)

# Lambda タンブリングウィンドウがデータをどのように集計するのか

今回の構成では、30秒おきに Lambda タンブリングウィンドウをつかってデータ集計をしていきます。30秒の間に複数の Lambda Function がリレーのバトンのように `state`

元記事を表示

【Python】ビットコイン自動売買BotをAWS Lambdaで動かす

# 自動売買ロジックの実装
実装の流れとしては
1. BTCの価格取得
1. 移動平均を計算
1. クロスで取引実行

https://github.com/SohMitian/btc_trade

## CryptowatchからBTCFXの価格データを取得
CryptowatchのAPIを叩いて、BTCFXの価格データを引っ張ります。

“`python
def get_price(min, before=0, after=0):
# Cryptowatchのparamはbefore, after, period
# before: int Unix timstamp
# after: int Unix timstamp
# period: array Example: 60,180,108000

price = []
# 何分単位かを設定
params = {“periods” : min }
# ローソク足取得期間が初期値0以外の時の処理
if before != 0:
params[“before”] = bef

元記事を表示

IoT リアルタイムデータを Lambda タンブリングウィンドウで集計してみた その1 IoT Core 準備編

# はじめに

刻々と数が変化する IoT データや、SNS に投稿されたデータなど、リアルタイムなデータを集めて、集計を行うのは一般的に重労働な作業と言われています。従来のシステムでは集計処理は夜間に行うことがありますが、次のような課題があります。

– リアルタイムなデータではデータ量が多いため、夜間のバッチ処理で終わらない
– 1日1回の集計のため、翌日にならないとデータを活用できない

こういった課題を解決するために、AWS ではデータをリアルタイムに処理するための機能があります。すべてを網羅するわけではありませんが、次のような実現方法があります。

– Kinesis Data Streams と Lambda のタンブリングウィンドウ (Tumbling Window)
– Kinesis Data Analytics

今回は、Lambda のタンブリングウィンドウを使った集計機能を紹介していきます。タンブリングウィンドウとは、データストリームを一定時間周期で集計を行うときに使われます。イメージ図を載せます。リアルタイムなデータを5分おきに集計するような使い方を想

元記事を表示

Lambda function URLsをTerraformでお手軽構築する

# はじめに
4/7に突如登場したLambda function URLs。
ついにAPI GatewayやALBを介さずにLambdaが直接HTTPサーバの機能を持ったので、お手軽に利用する幅が拡がることだろう。
今回は、実際どれだけお手軽になったか、どんなことが制約になり得るかを実際に構築しながら考察をしてみたい。

なお、事前知識としては以下を想定している。

– TerraformでLambda Functionを作成した経験がある
– Lambda Permissionsに関する知識が多少ある

Lambda関数の実装にはGolangを使っているが、基本的なことしかやっていないためそれほど重要ではない。

# 構成図
今回は以下の構成で作成をする。

![構成図.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111314/0d20ee3b-7998-c96d-05cf-a48660a19370.png)

– ServerとProxyのLambdaそれぞれにfunction URLsを設定する

元記事を表示

Lambdaまとめ

# はじめに

Lambdaについて軽くまとめてみました〜。
個人的メモです

#### Lambdaメリット

(1)保守・運用に手間がかからない
・マネージドサービス。OSなどの保守を必要としない

(2)高負荷に耐えられる
・Lambdaによるプログラムの実行は、必要に応じてスケーリングする。

(3)コスト削減
・Lambdaは実行時間nに対する課金。稼働中はずっとコストが生じるEC2インスタンスでの運用に比べて、コスト削減可能

#### Lambdaの制限

(1)前回の状態を保持しない
・Lambdaは、実行が終わったときに環境が破棄される、ステートレスな実行環境のもとで実行される

(2)最大稼働時間は5分
・ずっと実行しなければならないプログラムを、lambdaで構成することができない

#### イベントドリブン型のプログラミング
Lambdaはイベントの発生によって、実行が開始、イベントになりうるのは、AWSの様々なサービス。例えば「アラームよって一定時間が経過した」「S3にファイルがアップロードされた」など。また API Gatewayと組み合わせると

元記事を表示

ec2のリストを取得する

# はじめに
ec2のリストを取得します。lambdaで取得したリストをs3に出力します。
# 内容

## s3バケットの準備
ファイルを作成するためのs3バケットを作成します。“`my-resource-list“`としました。

## lambda関数の設定
lambda関数に下記のポリシーをアタッチします。
* “`AmazonEC2ReadOnlyAccess“` ec2を参照するため
* “`my-resource-list“`バケットへの“`s3:PutObject“` ファイルを出力するため

また、タイムアウト時間をデフォルトの3秒から10秒にしました。これは“`ec2.describe_instances“`の実行時間が3秒を超えたためです。

## lambda関数を作る
pythonでboto3を利用してec2情報を取得します。関数“`ec2.describe_instances()“`で取得したdictから必要な情報をcsvにして保管するようにしました。

“`python:
import json
import boto3

BUC

元記事を表示

【Rust】AWS LambdaでWebSocketクライアントにメッセージ送信

AWS LambdaをRustで実装する際のサンプルコードが少なすぎるのでメモ

# 内容

LambdaからAPI Gateway経由でWebSocketクライアントにメッセージを送信する。
送信先クライアントのコネクションIDは入力イベントやDBで動的に取得することが多いだろうが、ここでは簡易化のため固定とする。

# コード

“`toml:Cargo.toml
[package]
name = “sample”
version = “0.1.0”
edition = “2021”

[dependencies]
aws-config = “0.9.0”
aws-sdk-apigatewaymanagement = “0.9.0”
aws-types = “0.9.0”
http = “0.2.6”
lambda_runtime = “0.5.1”
serde_json = “1.0.79”
tokio = “1.17.0”
“`

“`rust:main.rs
use aws_config::meta::region::RegionProviderChain;
use

元記事を表示

【Rust】AWS LambdaでDynamoDB検索

AWS LambdaをRustで実装する際のサンプルコードが少なすぎるのでメモ

# 内容

DynamoDBの検索(スキャン)
例として、とある学校の生徒管理テーブルから指定した部活に所属する生徒の氏名一覧で取得することを考える。

– テーブル名:students_table
– 項目1:name(氏名)
– 項目2:club(部活)

# コード

“`toml:Cargo.toml
[package]
name = “sample”
version = “0.1.0”
edition = “2021”

[dependencies]
aws-config = “0.9.0”
aws-types = “0.9.0”
aws-sdk-dynamodb = “0.9.0”
lambda_runtime = “0.5.1”
serde_json = “1.0.79”
tokio = “1.17.0”
“`

“`rust:main.rs
use aws_config::meta::region::RegionProviderChain;
use aws_sdk_

元記事を表示

[AWS SAM] Lambda関数でOPTIONメソッドを作り「CORSの複数origin対応」を攻略する①(概要説明)

# この記事で解説することを3stepで

– **① CORS許可設定で「Access-Control-Allow-Origin」を「*」にせず、複数originを許可するOPTIONSメソッドをLambda関数で定義する。**
– **② その際にAWSコンソールを弄ってしまったらせっかくSAMで構築している意味が激減する(?)と思っているので絶対に弄らない。**
– いちいちPreflight用のOPTIONメソッドをコンソールからいじるのは面倒だし、SAMと後々競合とかしそうで怖い
– (確認はコンソールを見るのが手っ取り早いので見ます)
– **③ その他CORSに関する説明も交える**

# 記事の構成
– [AWS SAM] Lambda関数でOPTIONメソッドを作り「CORSの複数origin対応」を攻略する①(概要説明)
– 本記事
– [[AWS SAM] Lambda関数でOPTIONメソッドを作り「CORSの複数origin対応」を攻略する②(シンプルな代案の説明)](https://qiita.com/sawa-akabee/ite

元記事を表示

AWS Lambdaの関数URL(Function URLs)のユースケースを真面目に考える

AWS Lambdaに新機能 **Function URLs** が追加されました。

https://aws.amazon.com/jp/about-aws/whats-new/2022/04/aws-lambda-function-urls-built-in-https-endpoints/

https://aws.amazon.com/jp/blogs/aws/announcing-aws-lambda-function-urls-built-in-https-endpoints-for-single-function-microservices/

簡単にいうとAPI Gatewayなしに、HTTPSでのリクエストを受け付けられるようになるものです。

**API Gatewayなしで簡単になったよ!わーい!!** ではなく、今までできなかった何ができるようになったのかを真面目に考えてみました。

# Function URLsの認証

Function URLの認証は`IAM認証あり`と`認証なし`(パブリックアクセス)の二通りがあります。

IAM認証が使える環境であれば

元記事を表示

Pose検出するマイクロサービスを作成する

# 概要

Pose検出するマイクロサービスを作成しようとしたところ、意外と苦戦したのでメモ。

Edgeの処理を軽くするため、サーバーサイド(Lambda)でMediaPipeを使用したPose検出を行うマイクロサービスを作成して呼び出そうとした。

# Dockerイメージの作成

Zipの制限に収まらないので、DockerイメージでLambda関数を作成する。

“`dockerfile:Dockerfile
# AWS提供ベースイメージ
FROM public.ecr.aws/lambda/python:3.8

COPY app.py ${LAMBDA_TASK_ROOT}

RUN yum -y install mesa-libGL.x86_64 make gcc curl

COPY requirements.txt .
RUN pip3 install -r requirements.txt –target “${LAMBDA_TASK_ROOT}”

# モデルをダウンロード
RUN mkdir -p //var/task/mediapipe/modules/

元記事を表示

S3バケットに外部からファイルのやり取りを行う(期限付きURL)

### AWS外部から特定のS3バケットにあるファイルをダウンロード&アップロードを行いたい

S3の期限付きURLをLambdaにて生成し、URLにアクセスしファイルのダウンロード&アップロードを行う

(補足)
手動でやる場合は、Lambdaを使わずとも、S3バケットにて2クリック程で期限付きURLの作成ができます。
今回は、URLの生成を(ファイル検知などで)自動化したかっため、Lambdaにて作成しました。

(やった手順)
① S3バケットの作成
② Lambdaの作成
③ Lambda(実行ロール)の設定
④ Lambda実行&ダウンロード&アップロード確認

### ①S3バケットの作成
説明省略。普通に作るだけ。

### ②Lambdaの作成
(URLをメールで連携したかったので…その処理も含まれています。)
(必要に応じて削除してください)

詰まった点:generate_presigned_urlでURL生成しても、S3ファイルのパスにリージョンが含まれなかった。
・import from 設定
・boto3.client(‘s3’, config=Config(

元記事を表示

[API Gateway→ Lambda] Lambdaでクライアント情報を取得してみました

場合によっては、Lambda Functionsでクライアント情報を取得する必要があります。
たとえば、クライアントのIPアドレスを確認します。

API Gateway(Lambda Proxy)→ Lambda Functions(Golang)を構築してみました。
Lambdaで、APIGatewayを呼び出したクライアントの情報を取得しました。

Golangのサンプルコード:
“`
package main

import (
“context”
“fmt”
“github.com/aws/aws-lambda-go/events”
“github.com/aws/aws-lambda-go/lambda”
)

func handleRequest(ctx context.Context, request events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) {
strInfo1 := request.RequestContext.Identit

元記事を表示

AWSLamdbaのエフェメラルストレージ10GB拡張を試してみた

# まえがき
普段サーバサイドエンジニアをしています。
今回はじめてQitaに記事を掲載します。

# 概要
3/24のLambdaのアップデートにてエフェメラルストレージが最大10GBまで対応できるようになったため、実際に使ってみました。
https://aws.amazon.com/jp/about-aws/whats-new/2022/03/aws-lambda-configure-ephemeral-storage/

元々Lambdaには「ファイルシステム」からEFSを設定することが可能でしたが、
VPCに接続する必要があったり、スループットが必要な案件ではかなり高価なEFSを使う必要がありました。

# 設定
マネージメントコンソール上の「設定」から「一般設定」に「エフェメラルストレージ」が増えており、
こちらから更新すること可能ですが、既にServerless frameworkで対応されていましたので、こちらからデプロイしてみたいと思います。
※「エフェメラルストレージ」の機能を使用するにはServerless framework 3.10.0以上を使用する必要がありま

元記事を表示

Redshift Data APIを使ってS3のJSONデータを取り込む

Redshiftへ取り込みたいデータがWeb APIでしか提供されていない場合にLambdaでAPIを叩いて取得したデータをRedshiftに取り込むということになると思います。今回はそのような実装したので紹介します。細い説明は省きます。

#### 1. Redshiftのデータベースとテーブルを作成する
#### 2. LambdaでRedshift Data APIを使ってS3にあるJSONデータをRedshiftに取り込む

今回のアーキテクチャは以下の通りです

# IAM周りのセットアップ

#### 1. LambdaのIAMロールに「AmazonRedshiftFullAccess」ポリシーをアタッチする

#### 2. Redshift用のIAMロールを作成 & 「AmazonS3ReadOnlyAc

元記事を表示

CloudFrontによる静的Webホスティング+署名付きURLの生成

# 目的

LambdaでCloudFrontの署名付きURLを生成し、S3オブジェクトのキャッシングを実装。

S3とCloudFrontの直接参照は不可とする。

## S3

– 新規でバケットを作成し、ファイルをアップロード
– アクセス許可:パブリックアクセスを全てブロック
– 静的ウェブサイトホスティング:無効

## CloudFront

– 新規ディストリビューションを作成
– オリジンドメイン:作成したS3バケット
– S3バケットアクセス:
– OAIを使用(新規で作成)
– バケットポリシー:自動更新

キーペアを生成後、「ビューアーのアクセスを制限する」を変更

## キーペアの作成

今回はOpenSSLで生成

“`
openssl genrsa -out private_key.pem 2048
openssl rsa -pubout -in private_key.pem -out public_key.pem
“`

public_keyをAWSにアップロード

– CloudFrontの左メニューから「パブリックキー」を選択

元記事を表示

OTHERカテゴリの最新記事