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

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

AWS SAMを使って最もシンプルにLambda × APIGatewayのWebAPIを構築する

# 概要

今回は前回紹介したAWS LambdaのAWS サーバーレスアプリケーションモデル (Serverless Application Model)、AWS SAMの続編になります。

【前回の記事】
[AWS Lambda SAMとは?~AWS SAMを使ってPythonのLambdaプログラムを簡単に作成する~](https://qiita.com/fkooo/items/2dc5ded5149379d7305a “AWS Lambda SAMとは?~AWS SAMを使ってPythonのLambdaプログラムを簡単に作成する~”)

SAMの便利さは前回の記事でなんとなくわかったと思うので今回からはより実践編です。
実際にSAMを使ってAWSのサービスを連携させてみようという内容です。

第一回は、Lambda × APIGateway 編にしました。
この投稿を最後まで実行すると以下の図のようなAWSサービスで構築したWebAPI環境が、なんと**2ファイル30ライン**ほどで完成します。
理解しやすいように**最もシンプルな記載例**としてファイルサンプルを作成したので

元記事を表示

AWS提供でないベースイメージからLambdaを作る

# はじめに
以前、コンテナイメージからLambdaを作りました。

https://qiita.com/a_b_/items/d9398fd6efe0f66b6c6f

ところが諸事情(Amazon Linuxでは、PowerShellが十全に動かせず、MS365の監査ログが取得できない)のため、Ubuntuをベースとしたコンテナを作ろうとした際に、わかったことややったことを記事にします。

# 参考

コンテナイメージを使ったLambdaの仕組みについての解説は以下になります。

https://aws.amazon.com/jp/builders-flash/202104/new-lambda-container-development-2/?awsf.filter-name=*all

Dockerfileの作り方の参考にしたのは以下です。

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

# Lambda動作の仕組み

公式の解説に書いてある内容の自分なりの解釈です。

– Lambda関数を実行するには、Lambdaサービスとラ

元記事を表示

Microsoft SQL ServerにODBCで接続するためのLambda Layerを作成する方法

AWS Lambda から pyodbc を使って SQL Server に接続する案件があり、若干つまづいたので備忘録的なメモを残すことにしました。

# 環境

## Lambda
– ランタイムは Python 3.9
– アーキテクチャは x86_64

## pyodbc
– unixODBC-2.3.11 (投稿時の最新)

# TL;TR

– ほぼこれ(ありがたや。。。)
https://gist.github.com/diriver63/b72a954fa0da4851d89e5086aa13c6e8?permalink_comment_id=4199559#gistcomment-4199559

– lambdaの環境変数にiniファイルまでのパスを設定する

– soファイルのバージョンに注意

# 手順(ざっくりと)

適当なディレクトリを作成

“`
$ mkdir pyodbc-layer
$ cd pyodbc-layer
“`

Dockerfileを作成

“`
$ vi Dockerfile
“`

https://gist.github.

元記事を表示

OpenCV で (-212:Parsing error) Failed to open NetParameter file: xxx.cfg in function ‘readNetFromDarknet’ が発生したときに確認すること

## はじめに

OpenCV は画像処理ライブラリです

簡単に画像加工が行え、画像データを行列(numpy array)として扱えるため、機械学習でもよく使います

https://opencv.org/

バージョン 3.3 からは DNN (Deep Neural Network) モジュールが追加され、
OpenCV で機械学習モデルを使った推論が実行できるようになりました

readNetFromDarknet や readNetFromTensorflow などによって、
他の機械学習ライブラリで学習したモデルを読み込んで使うことがきます

## エラー内容

先日、以下の記事でやったのと同じように、Docker コンテナで AWS の Lambda 関数を作っていた時のこと

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

今回は Darknet で学習したモデルを OpenCV で動かそうとしていました

https://pjreddie.com/darknet/

以下のようなコードでロードす

元記事を表示

簡単にAWS Lambdaでrubyコードを実行できます

# 簡単にAWS Lambdaでrubyコードを実行できます
– ruby初心者
– AWS CLI使いたくない方 (AWS Consoleでやりたい)

# Aws Lambdaとは
– AWSサーバーレス(サーバーなしでコード実行できるもの) → プログラム集中できる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/318767/43cd8d52-f791-342e-8833-9c1eca7f3258.png)

# Aws Lambdaでできること
– バックエンドの処理
– マイクロサービス
– …

# コードをAWS Lambdaにデプロイする方法
– AWS CLIでデプロイする(コマンドで実行する方法)
– https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/what-is-sam.html
– AWS Consoleでデプ

元記事を表示

【AWS CDK v2】VPC LambdaからAWS Batchにジョブを投入する構成を作ってみた

# はじめに
AWS Batchにジョブを投入する方法はいくつかありますが、今回はVPC LambdaからAWS Batchにジョブを投入する構成をAWS CDKで作ってみました。

# 構成図
VPC LambdaからAWS Batchにジョブ投入のリクエストを送る流れを示した図です。
VPC Lambdaは実際にはVPCの外にあり、ENI、VPC Endpointを経由してAWS Batchにジョブ投入のリクエストを送信することになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123126/be54a91f-2075-3b60-c02d-6de27c089d47.png)

# 動作環境
“`bash
$ cdk –version
2.30.0 (build 1529743)
$ node –version
v14.19.3
“`

# やってみた
前提として、VPC、サブネットはすでに作成済であるとします。

## AWS Batchを作る

まず、次のような

元記事を表示

「OCI Functions」と「 AWS Lambda」の比較

__索引__
[1. 全体な比較](#1-全体な比較)
[2. 価格比較](#2-価格比較)
[3. 関連ドキュメント](#3-関連ドキュメント)

# 1. 全体な比較
||OCI Functions|AWS Lambda|
|–|–|–|
|リリース|2019年7月|2014年11月|
|ベース|[Fn Project](https://fnproject.io/)|N/A|
|サポート言語|✔ Java
✔ Python
✔ Ruby
✔ Go
✔ Node.js
✔ C# (.NET)
[ドキュメント](https://docs.oracle.com/ja-jp/iaas/Content/Functions/Tasks/languagessupportedbyfunctions.htm)をご参照ください。|✔ [Java](http://docs.aws.amazon.com/lambda/latest/dg/java-lambda.html)
✔ [Python](http://docs.aws.amazon.com/lamb

元記事を表示

M5StackとSORACOM Arcを使って「消耗品の減少をお知らせするボタン」を作ろう

みなさんはAmazonダッシュボタンのことを覚えていますか?ボタンを押すだけで商品をAmazonに発注できるというもので、今思えばIoTの先駆けとも言えるサービスでした。

残念ながら現在はこのサービス自体が終了しています。ですが、今も消耗品の棚卸しに苦慮している会社・オフィスは多いのではないでしょうか?

そこで今回、M5StackとSORACOM Arcを使って「オフィスの消耗品の減少をお知らせするボタン」を作ってみました。

消耗品をストックしている棚にこういったデバイスを設置しておき、

![iOS の画像.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60996/3893817a-8128-1277-6a75-1642fca1b26e.jpeg)

上下ボタンで

元記事を表示

Rustのlambda_http辛すぎなのでaxumしてみた

# 目的
AWS LambdaでAPIっぽいことをするには[lambda_http](https://crates.io/crates/lambda_http)を使うことになるんですが、HTTPの低レイヤーを相手にすることが多くて辛いです。
何かいいものが無いかと調べていたら、数日前に[axum-aws-lambda](https://crates.io/crates/axum-aws-lambda)というものが出来ていたのでこれを使ってみました(この記事を書いた日からだと27日前でした)。

# コード
## lambda_httpだけでやってみる。
“`rust:Cargo.toml
[package]
name = “web”
version = “0.1.0”
edition = “2021”

[dependencies]
lambda_http = “0.5.2”
serde_json = “1”
tokio = { version = “1”, features = [“full”] }

“`

“`rust:main.rs
use lambda_http::{

元記事を表示

[AWS] Step FunctionsのoutputPath、resultPath、resultSelectorを使いこなす

# はじめに

AWS Step Functions の各タスクへの入力は、inputPathでJSON pathを指定することで、雑多な入力から必要な項目だけを拾うことができます。

出力側にはoutputPath、resultPath、resultSelectorというものがありますが、どうにも動作がわからなかったので調べてみようと思い立ちました。

と、勢い込んでみたものの、AWS Console に[Data flow simulator](https://console.aws.amazon.com/states/home?#/simulator) というよいものがありました。この記事読むより、シミュレーターで試してみたほうがよいです。

でも、めげずに書いてみます。

# 動作を確認した環境

## Lambda

入力と出力を確かめたいだけなので、値を返すだけのLambdaを作りました。これをStep Functionsの中で呼び出してみます。

“`ts:
export const sampleLambdaHandler = async (event: unknown

元記事を表示

DockerのLambdaコンテナイメージをgolangで動かしてみた

AWSで公開されているgolangのLambdaコンテナイメージを動かしてみました。

## パッケージの構成
“`
├── docker
│   └── lambda-go-test
│   └── Dockerfile
├── docker-compose.yml
└── lambda
├── go.mod
├── go.sum
├── main
├── main.go
└── pkg
“`

## Dockerファイル作成
[こちら](https://gallery.ecr.aws/lambda/go)を参考にDockerファイル等を作成。
“`dockerfile
FROM public.ecr.aws/lambda/go:1

# Copy function code
COPY ../../lambda ${LAMBDA_TASK_ROOT}

WORKDIR ${LAMBDA_TASK_ROOT}
# golangをinstall
RUN yum install -y golang

# Set the CMD to y

元記事を表示

[Lambda]s3.putObjectが初回実行時に完了しない時の対処法

AWS SDK for JavaScriptのs3.putObjectが、1回目は通らないのに2回目は通るという事態が起きました。
結論から言うと、promiseを返していなかったことが原因でした。

だめだったコード
“`
s3.putobject({
Body: {body},
}, function(err, data) {

“`

元記事を表示

REST API としてAWS Lambda関数を呼び出す

## REST API とは

– APIをインターネットへ公開し、JavaScript等から呼び出すしくみです。
– 呼び出しのパラメータ及び戻り値はJSONが使われる場合が多いです。

## API Gateway とは

– [AWS Lambda関数](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/welcome.html)をインターネット経由でREST API として呼び出すことができます。
– [Amazon API Gateway の概念](https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/api-gateway-basic-concept.html)

## この記事の目的

– AWS API Gatewayを経由してLambda関数を呼び出すよう構成します。
– Angularのタイプスクリプトから定義したAPIを呼び出します。

## Lambda関数を作成

– 関数を作成します。
![image](https://us

元記事を表示

AWS Lambdaの用語要点まとめ(自分用メモ

・AWS Lambda
サーバーレスでプログラムのコードを実行できるサービス。
サーバーレスとはAmazon EC2などのサーバーを必要とせず、リクエスト発生時にだけプログラムが実行されるアーキテクチャのこと。
Lambdaを利用すると次のようなメリットがあります。
・プログラム実行環境の構築や運用が必要なくなる
・プログラムはリージョン内の複数のAZに分散して配置される(耐障害性・可用性の向上)
・プログラムへのリクエスト数に応じたスケーリングが自動的に行われる(拡張性の向上)
以上のメリットから、開発者はプログラムの開発に集中できるようになります。

Lambdaで実行されるコードを「Lambda関数」といいます。Lambda関数はJava、Node.js 、Pythonなど様々な開発言語に対応しています。
Lambda関数の実行時間は1回につき最長15分で、実行時間と選択したメモリの容量に対して課金されます。そのため実行時間が15分以上になる処理や、常時稼働が必要なアプリケーションには向いていません。

【Lambda関数のトリガー】
Lambda関数実行の起点となるイベントを「

元記事を表示

API Gateway、Lambda(Node.js)、DynamoDB を使ったAPIの作り方

API Gateway、Lambda、DynamoDB を使ったAPIの作り方を備忘録も兼ねて記載します。
プログラム言語にはNode.jsを利用します。

# システム構成
システム構成は以下のようになります。
![AWS.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2348676/d172c951-87f7-ef41-4bb4-cf660f65d99b.png)

# システム概要
今回はサンプルとして、DynamoDBに格納されているイベント情報をPOSTリクエストで取得して、Jsonを出力するAPIを作ります。

# 1. DynamoDBにテーブルを作成
最初にイベント情報を格納するテーブルを作成します。
![dynamodb1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2348676/c813f1e4-6c70-8b35-a53a-57a532ede10a.png)

テーブル名は **event**、

元記事を表示

lambdaのメモリとCPU数はどこが切れ目なのか調べてみた

すでにほかの記事でも触れられていますが、lambdaはメモリを増やすとCPUが増えるようです。

https://qiita.com/hamadu/items/12303d9f9cb800db14d3
https://aws.amazon.com/jp/lambda/faqs/

128MBでもすでに2つ割り当てられていたり最大でも6つだったりどこが区切れなのか調べてみました。

ソースコードは以下に置いてあります。

https://github.com/misogihagi/lambda-cpuinfo

## 結果

128MBごとに増やした結果です。ざっくりいうと3GB,5GB,7GB,9GBでスレッドが一つ増えるみたいです。

![visualization.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230043/ad4c5b74-d42a-df4d-bd09-a1e0559eb58a.png)

“`json:vega-light
{
“data”: {
“values”: [

元記事を表示

AWS CDK + TypeScript でサーバレス開発その1 : Hello world!

# 概要

AWS CDKでサーバレス環境を構築するシンプルな方法のメモ。

# 前提

– 筆者の環境はMac + VSCode。
– AWS CDKを使ったことがある。
– Node.jsがインストールされている。

# 手順

## 雛形の作成

aws-cdkを使ってプロジェクトの雛形を作成する。

“`bash:ターミナル
mkdir project-name
cd project-name
cdk init app –language typescript
“`

TypeScriptは直接ts-nodeが実行するので、typescriptパッケージはアンインストールしておく。tsconfig.jsonも削除する。

“`bash:ターミナル
npm uninstall typescript
rm tsconfig.json
“`

package.jsonからtsc関連のスクリプトも削除しておく。

“`diff:package.json
“scripts”: {
– “build”: “tsc”,
– “watch”: “tsc -w”,

元記事を表示

WebhookとAPIのちがい ~Kintone編~

# WebhookとAPIのちがい 

今回はWebhookとAPIの違いをやってくよ。

:::note info
~おしながき~
1. 前置き
2. WebhookとAPIのちがい
2. 使ってみる(Kintone)

:::

## 前置き

とある日の出来事。

同僚「ISEYAくん、WebhookとAPIのちがいってなんなん?」
ISEYA「うーん、、コードを書かないか、書くかのちがいとちゃいますかね:baby:」

そう、実際**私は雑魚**のためあまり腑に落ちていないので曖昧な表現で回答してしまいました。
しっかりと理解を深めるため、調べてみたが、
コードを書くか書かないかの違いは正解のようで不正解なようだ。

今日はそれを紹介していく。

## WebhookとAPIのちがい

##### 結論 自動か手動かのちがい

です。
じゃあ具体的に自動と手動ってどういう意味?について深堀していきます。

まず、APIの一例をシーケンス図にしてみました。
するとこんな感じ。

“`plantuml
クライアント->サーバー : リクエスト
クライアント<-サーバー : レス

元記事を表示

Lambdaの関数 URL(Function URLs) を使用時、Basic認証をかける

# はじめに
先日、Lambda単体でHTTPSエンドポイントから実行可能になる機能が追加しました。
特定のリソースのみLambdaを実行できるようにするためには、Basic認証を適用する必要があったため、その方法についてまとめます。

https://dev.classmethod.jp/articles/aws-lambda-function-urls-built-in-https-endpoints/

# Lambdaを実行する認証タイプ

– `AWS_IAM` – IAM の権限に基づいて、リクエストを認証および承認します。権限は、`lambda:InvokeFunctionUrl`を付与したIAMポリシーをIAMロール、もしくは、IAMユーザーに適用し、lambdaを呼びます。
– アクセスするためには`AWS Signature Version 4 (SigV4)`を使用して、HTTPリクエストに対して署名する必要があります。

– `NONE` – Lambda を呼び出す前の認証を実行しません。関数 URL への、未認証でパブリックなアクセスを許可するには、

元記事を表示

AWS Cognito ユーザープールを認証制御に利用してLambda関数を呼び出す

## AWS API Gateway とは

– [AWS Lambda関数](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/welcome.html)をインターネット経由でREST API として呼び出すことができます。
– API呼び出し毎の認証が設定可能です。本記事では認証のバックエンドにCognitoを利用します。
– [Amazon API Gateway の概念](https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/api-gateway-basic-concept.html)

## この記事の目的

– AWS Cognitoから発行した認証トークンを利用してAWS API Gatewayを経由してLambda関数を呼び出すよう構成します。
– これによりセキュリティが確保されたAPI呼び出しを実現します。

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

– [REST API としてAWS Lambda関数を呼び出す](htt

元記事を表示

OTHERカテゴリの最新記事