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

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

自分用です

`tree .`
“`
.
├── layer
│ └── wkhtmltopdf
│ └── wkhtmltox-0.12.6-4.amazonlinux2_lambda.zip
├── samconfig.toml
├── src
│ ├── app.py
│ ├── assets
│ │ └── fonts
│ │ ├── fonts.conf
│ │ └── ipaexg00401
│ │ ├── IPA_Font_License_Agreement_v1.0.txt
│ │ ├── IPA_Font_License_Agreement_v1.0.txt:Zone.Identifier
│ │ ├── Readme_ipaexg00401.txt
│ │ ├── Readme_ipaexg00401.txt:Zone.Identifier
│ │ ├── ipaexg.ttf
│ │

元記事を表示

【AWS CDK】Pythonで動くLambdaレイヤーをCDKでデプロイする方法

# はじめに
仕事でLambdaレイヤーをCDKでデプロイする機会がありました。
その辺のナレッジが記載された記事があまりなかったので、
本記事ではLambdaレイヤーをCDKでデプロイする方法を記載します。
# 環境
OS:Windows 10

# 前提
以下がインストール済み
 CDK(ver 2.67.0)
 Docker Desktop
 yarn

CDKの言語:TypeScript
AWS CLI:デフォルトプロファイルが設定済み
Docker DesktopはCDKでのデプロイを実行するときに使います。

# 実装内容
Pythonで動くLambdaレイヤーと、レイヤーを使用するLambdaを実装します。
Lambdaのソースコードは以下です。
numpyライブラリのモジュールを使って、ランダムに乱数を生成するだけのシンプルな内容です。
Lambdaレイヤーには、numpyライブラリを含めて実装します。
“` index.py
import numpy

def handler(event, context):
# 乱数を生成
print(numpy

元記事を表示

API Gateway + CognitoでWebサイトからバックエンドの処理を呼び出す

# やりたいこと
前回の記事( https://qiita.com/mkttks/items/c30e993adb520869dbb4 )ではAWS Lambda と Amazon DynamoDB を使用してバックエンドの処理を実装しました。
今回はAPI Gatewayを使ってWebサイトからこのバックエンドの処理を使えるようにします。

内容は引き続き下記の公式チュートリアルに沿ったものです。(※ただしチュートリアル通りに進めると権限まわりの設定で詰まります。)
https://aws.amazon.com/jp/getting-started/hands-on/build-serverless-web-app-lambda-apigateway-s3-dynamodb-cognito/

# システム構成図
![api gatewayのシステム構成図](https://d1.awsstatic.com/Test%20Images/Kate%20Test%20Images/Serverless_Web_App_LP_assets_05.d1ecdfaab160d7dc00ddbc

元記事を表示

Apache+PHPサーバーのWebサイトをAWS Lambdaで動かす

別チームでホスティングしていたWebサイトがあったのですが、いろいろと都合がありWebサイトのソースとドメインだけをもらい、自分のとこのチームでホスティングする機会があり、「いまさらサーバーとか持ちたくない! サーバーレスでやりたい! それにIaCしたい!」と四苦八苦したメモです。

## 受領したソース

受領したWebサイトですが、販売終了したけれど残しておかないといけない商品サイトとかをイメージしていただけるといいかと思います。アクセス頻度・更新頻度ともに多くはありません。

ファイル種別としては、以下のようなものが含まれます。古き良きCGI的な感じの動的サイトです。

– HTMLファイル
– PHPファイル、incファイル
– アセットファイル
– jsファイル
– スタイルシート
– 画像
– etc…

容量的には全体で400MBくらいですが、そのほとんどはアセットファイルで、HTML,PHPは数MBです。PHPはヘッダーフッターを共通化したり、ニュースやブログ記事のXMLをCMSサーバーから取得・整形したりする用途で使われています。C

元記事を表示

【This is My Architecture3ヶ月チャレンジ-2】Ancestry: Building a Real-time and On-demand Logging System on AWS

[前回](https://qiita.com/zun777/items/8fcac931dcd7ad039dff)に引き続きThis is My Architecture3ヶ月チャレンジの2回目。
今回は[Ancestry: Building a Real-time and On-demand Logging System on AWS](https://www.youtube.com/watch?v=igcnes0PI10)を聴いていく。

# 目的
限られた時間で一気に以下をやりたい。

– 英語のDictationとShadowing(リスニングとスピーキングUP)
– AWSサービスの勉強と実例
– インプットとアウトプット

# まずは1回聞いてみる
Jimさんfrom アンセストリー。family history, DNA company. lots of data of connection.
real time ondemand logging system.
thoudthansa number of EC2 running, fargarte sending ma

元記事を表示

KinesisトリガーのLambdaに入ってくるデータが突然空になった

# 起こったこと

突然Lambdaに入ってくるイベントが下の状態なってしまい、デコード時エラーで動かなくなってた。

“`javascript
{
Records: [
{
kinesis: {
data: “”, // <-- 本来はここにbase64エンコードされたテキストが入ってくる。 ... }, ... } ] } ``` 原因はIP固定にするためVPCに入れたこと。 分かったのはそれだけ。たぶんAWSのバグと思う。 # 対応1 とにかくVPCが悪さしてるのでVPCとトリガーを付け直す。 1. 一旦LambdaからVPC設定とKinesisトリガーを外してデプロイ。 1. VPC設定だけ付け直してデプロイ。 1. Kinesisトリガーを付け直してデプロイ。 1回で治らない場合があるのでこれを数回繰り返す… ### 結果 → 失敗 治っても次のデプロイでまたデータが入らなくなる。 # 対応2 KinesisトリガーとVPC Lambdaを分けてしまおうかとも考えた

元記事を表示

AWS Lambda + Python でログ出力がうまくいかない件

AWS Lambda で Python 関数を作ったらログ周りでハマったのでメモ。

## 困りごと
こういう Lambda 関数を作って実行したが、ログが出力されない。

“` python
import logging

# ルートロガーのログレベルを設定する
logging.basicConfig(level=logging.INFO)

logger = logging.getLogger(__name__)

def lambda_handler(event, context):
logger.info(“foo!!!”)
“`

– 似たような Python スクリプトを普通の python コマンドで実行した場合は意図通り出力される
– Lambda の Python ランタイムだけでなく、 `public.ecr.aws/lambda/python` をベースに作った Docker コンテナでも同様の問題が発生する

## 原因
Lambda の Python ランタイムでは、**あらかじめルートロガーに StreamHandler が設定されている**

元記事を表示

AWS LambdaでPython+Flask環境を作成する

# AWS LambdaでPython+Flask環境を作成する

AWS Lambdaは、サーバーレスコンピューティングサービスであり、アプリケーションやバックエンドサービスをサーバーレスアーキテクチャで実行することができます。この記事では、AWS Lambdaを使用してPython+Flask環境を作成する方法を説明します。

## 前提条件
– AWSアカウントを持っていること
– Python 3.8以上がインストールされていること

## 1. プロジェクトディレクトリの作成

まず、プロジェクト用のディレクトリを作成し、そのディレクトリ内で作業を行います。

“`bash
$ mkdir python-flask-lambda
$ cd python-flask-lambda
“`

## 2. 仮想環境の作成

pipはPythonのパッケージ管理システムで、多くのPythonパッケージを簡単にインストールできます。pipがインストールされていることを確認し、次のコマンドを実行してvirtualenvをインストールします。
プロジェクトディレクトリ内で、Python

元記事を表示

Lambdaの無限ループが一部対策されたみたいなので試してみた!

# はじめに
**Lambda**皆さん大好きですよね???

僕も月並みには好きです。そんなLambdaですが、定期的に**無限ループ**による高額請求の記事やスライドを見かけます。
そんな問題に終止符を打つ1歩目のアップデートがありました。
>意図しないループの影響を軽減するために、Lambda は特定の種類の再帰ループを発生直後に検出できます。Lambda は再帰ループを検出すると、関数の呼び出しを停止し、通知します。

https://docs.aws.amazon.com/lambda/latest/dg/invocation-recursion.html

現在は、**Amazon SNS・Amazon SQS**による無限ループの検知をサポートしているとのことです。

## 試してみる
以下の記事に記載のサンプルコードを参考に試してみる。
SAMを使用して、Lambda + SQSを使用した無限ループが行える環境を作成する。
https://github.com/aws-samples/aws-lambda-recursion-detection-sample

#

元記事を表示

AWSのS3のURLをLambdaで取得する(Python)署名付きじゃないやつ。

S3の画像URLをLabdaで取得したいだけ

やりがいことはAWSのS3に保存した画像URLをAWSのLambdaで取得してきて、そのURLをSNSやメールで投げたいだけ。

なお筆者はS3の画像URLがどれなのかで一番つまずいた。

Amazon S3>バケット>localstable(任意の名前)>mumumu.png(任意の名前)の中にある【オブジェクトURL】がまさにそれである。

恐らくそれだろうという目星は筆者もすぐについた。

だがクリックしても下記のようなよく分からないエラーが出る。

“`php:

AccessDenied
Access Denied
M9DEV
1ltHaEH/kZp5nol7r77C4xdwg0qt+Giq0quVh1HYsuJQvA==

“`

S3+lambda+画像+取得などで検索すると署名付きURLの取得方法が書かれたものが大量

元記事を表示

無認証の関数URL有効なAWS LambdaでHTTP APIエンドポイントを公開するときのTips

# はじめに
ちょっとしたAPIを作りたいとき、[関数URL](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/lambda-urls.html)(Function URLs)を有効化したAWS LambdaはHTTPエンドポイントを設定するためのAPI Gatewayを都度建てる必要がないので便利です。
一方で、リクエスト元がIAM認証に利用するSigV4署名付きリクエストの生成に対応できない場合は関数URLがサポートするのAWS_IAM認証機構は利用できないため、ある程度安心してエンドポイントを利用するには引き続きAPI Gatewayを前段に用意したうえでAPIキー認証の設定ないしオーソライザーを実装するか、関数側で独自のリクエスト検証機構を設定する必要があります。

この記事ではセキュリティに関する要件があまり求められないシンプルなタスク向けに、Python実装の単一のLambda関数で簡易的なリクエスト検証機構を実装する例を紹介します。マネジメントコンソールで実装をコピペできるレベルのシンプルさをコンセプトとしています。

元記事を表示

AWS Lambdaの環境変数をCodeエディタから見られるようになった

最近のAWS UpdateでAWS LambdaコンソールのCodeエディタから見られるようになりました。

https://aws.amazon.com/jp/about-aws/whats-new/2023/06/aws-lambda-copying-environment-variables-console-code-editor/

今まではコンソールから環境変数を確認する際は「設定」→「環境変数」に見に行く必要があったのですが、今回のUpdateによりコード編集中にコンソールから移動する必要がなくなりました。

# やってみる
簡単ですが、試してみます。

環境変数の設定自体は従来通り「設定」→「環境変数」から行います。
![image1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675893/060421f5-4c9e-961e-77df-70013463be6d.png)

「コード」タブに移動し、「Tools」→「Show Environment Variables」を押下します。

元記事を表示

AmplifyでLayer付きのFunctionをローカル実行(Amplify Mock)したい

## 対象のLambda Function

Layerが設定されています。
Layerには共用のNPM Packageがインストールされています。

## 課題

Amplify MockではLayer付きFunctionのローカル起動をサポートしていません。
起動時に以下のようなエラーが吐き出されます。

> Unable to mock myFunction. Mocking a function with layers is not supported. To test in the cloud: run “amplify push” to deploy your function to the cloud and then run “amplify console function” to test your function in the Lambda console.

### 1. Mock起動前にLayerを外す

Amplify CLI GitHub Issueにコメントがあります。
amplify-meta.jsonからjqを利用してLayerを外すことで起動でき

元記事を表示

CloudformationのカスタムリソースでVPCLambdaを呼び出したときのエラーと対処法

## はじめに
Cloudformationでカスタムリソースを使用していた時に、エラーが発生しました。
調査をしていると、LambdaをVPCLambdaに変更したことが影響しているとわかり、
AWS公式ドキュメント等を見ながら対処しました。
その時のエラーや対処法を残します。

## 発生したエラー
カスタムリソースから呼び出したLambdaでは、
応答を返却する為のcfn-responseモジュールから403エラーが返却。

https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/cfn-lambda-function-code-cfnresponsemodule.html

また、Cloudformationの画面では、
CloudformationスタックのステータスがUPDATE_IN_PROGRESSのまま一時間スタック。
これは、CloudformationがLambdaからの応答をタイムアウトまで待機しつづける為に起こります。
![image.png](https://qiita-ima

元記事を表示

AWS Lambda と Amazon DynamoDB を使用してバックエンドの処理を実装する

# やりたいこと
前回の記事(https://qiita.com/mkttks/items/5220724fdd10ff51333d )ではWebサイトにログイン機能を実装しました。今回はAWS LambdaとAmazon DynamoDBを使ってバックエンドの処理を実装します。(Webサイトとバックエンドの処理をつなぐのは次回です。)

内容は引き続き下記の公式チュートリアルに沿ったものです。
https://aws.amazon.com/jp/getting-started/hands-on/build-serverless-web-app-lambda-apigateway-s3-dynamodb-cognito/

# システム構成図
![lambdaとdynamoDBのシステム構成図](https://d1.awsstatic.com/Test%20Images/Kate%20Test%20Images/Serverless_Web_App_LP_assets_04.76030d61413ff43bd6aa75fbd16e02ad23aec67a.png)
公式チュートリアル

元記事を表示

lambda 関数Aでerrorという文字列がログに出た時、関数BをCloudWatchのサブスクリプションフィルターで実行する

# 概要

– 関数Aで`error`という文字列がログに出力されたら、関数BをCloudWatchのサブスクリプションフィルターを用いて実行する方法を簡単にまとめる。

# 方法

– 関数Aと関数Bは下記記事で使用した関数A(echo-error)と関数B(hello-world)を使用する。関数Aに若干の修正を加える。関数AのIAMロールに付与したカスタマーポリシーなどはそのままにしてある。

https://qiita.com/miriwo/items/5b835d98a4e9e3d04af4

– 関数A(echo-error)を下記の様に修正する。(9行目をコメントアウトするだけ)

“`js
import { LambdaClient, InvokeCommand } from ‘@aws-sdk/client-lambda’;

const lambdaClient = new LambdaClient({ region: ‘ap-northeast-1’ }); // 適切なリージョンを設定

export async

元記事を表示

lambda 関数Aで例外が発生した場合、関数BをAWS SDKで実行する

# 概要

– lambda関数A(echo-error)のログに「error」という文字列が出力されたことをきっかけに、lambda関数B(hello-world)を実行する方法を簡単にまとめる。
– 両lambda関数のランタイムはNode.js18とする。

# 方法

1. 関数A(echo-error)の作成
1. 下記の内容で関数を作成する。
– 関数名: echo-error
– ランタイム: Node.js 18.x
– アーキテクチャ: x86_64
– ロール: 「基本的なLambdaアクセス権限で新しいロールを作成」

1. 下記のコードを記載する。

“`js
import { LambdaClient, InvokeCommand } from ‘@aws-sdk/client-lambda’;

const lambdaClient = new LambdaClient({ region: ‘ap-northea

元記事を表示

Mangumを使ってLambda + FastAPI + Dockerで最小限&サーバーレスなAPIをデプロイする

## AWSで サーバーレス API のデプロイってちょっと大変

AWSでサーバーレスなBackend APIを作りたい時、まずAPI Gatewayを選択肢に挙げるBackendエンジニャーな方は多いかと思います。

ご存知の通り、API Gatewayは単体ではコードロジックを実行できません。
なので、API Gateway -> LambdaのようにProxyさせるやり方は、ど定番で誰もがやったことあるパターンです。

とはいっても、API Gatewayは独自な仕様が多く、AWSコンソールからいじるのも色々とキツく、かといってterraformで書くのも冗長な感じで、なかなか使いこなせないと思っているAWSユーザも多いかと思います。
(少なくとも私はそうです)

API Gatewayに頼らずもっと簡単にサーバーレスしたい。
そこで、MangumとLambdaのFunctionURLを使い、Lambda単体でBackend APIをデプロイしてみましょう。
デプロイし、ブラウザでAPIを叩けたらゴールです。

## Mangum
https://mangum.io/

>Ma

元記事を表示

GitHubActionsを使いAWSのlambdaにデプロイする

## 事前準備
### 1. アプリケーション
1. GitHubにリポジトリを作成します、「lambda_github_action_test」とします
1. ※1のようなディレクトリとファイルを作成 (deploy.ymlはこの時点では空ファイルとしておく)
1. lambda_function.pyは※2のような内容で作成

※1
“`
lambda_github_action_test
├─ .github
│ └─ workflows
│ └─ deploy.yml
└─ src
└─ lambda_function.py
“`

※2
lambdaの関数にアクセスすると、json形式でHello from Lambda!が返却される関数を作成する
“`python
import json

def lambda_handler(event, context):
return {
‘statusCode’: 200,
‘body’: json.dumps(‘Hello from Lambda! Git

元記事を表示

AWS Lambdaの入門としてやってみた事をまとめた話(Python)

※2022年に下書きに書いたまま残っていた記事を2023年に投稿

`AWS Lambda`はAWSが提供するサーバーレスでコードを実行するサービスですが。

今回、`AWS Lambda`を普段さわっていない人間がその入門として、下記のような流れで学習してみました。

– AWSの各種ドキュメントを参照
– AWSのチュートリアルを実施(Python)

3つ実施したチュートリアルのうち最後に実施したひとつ。[チュートリアル: Amazon S3 トリガーを使用してサムネイル画像を作成する](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/with-s3-tutorial.html)
でドキュメントに書いてある内容の理解に時間を要し、チュートリアルを完了するのにだいぶ苦労しましたが。

それ以外は概ねスムーズに学習できたかと思います。

2022年現在、`AWS Lambda`を知らない所からの理解の助けにはなったと思うの、どのように学習を進めたのか本記事に記載しておきます。

あと自分は、[チュートリアル: Amazon S3

元記事を表示

OTHERカテゴリの最新記事