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

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

サーバレスとAWS Lambdaについてまとめてみた

# はじめに
このブログはサーバレスとAWS Lambaについて自身が学習した内容のまとめ記事となります。
自身が理解しやすいように平易な表現を使って構成しているため、著しく正確性に欠ける情報がありましたらご指摘いただけると筆者は大変喜びます。

# サーバレスについて
釈迦に説法かもですが、Lambdaを理解する前にサーバレスについて大きくまとめました。
サーバレスという言葉で調べると「Google Cloud Functions」や「Azure Functions」など各社類似したサービスや説明がありますが、本記事では「AWSにおける」を枕詞として読み進めてください。

## サーバレスとは
アプリ開発者がサーバーを意識せずにアプリを開発・運用できることを指します。
サーバレスでは、サーバーの構築・保守・負荷対策までをサーバーレスの提供会社が担います。実際にはサーバ自体は存在するため、サーバレスという言葉は「アプリ開発者」目線に立った表現という理解でいるとわかりやすいと思います。

## 従来通りサーバを所有すると
通常アプリの開発・運用にはサーバを用意し、必要に応じたOSや

元記事を表示

cdk-nag(python)で特定ルールを対象外(サプレス)とする方法

# はじめに
皆様、AWS CDK(以後、cdk)はご利用されているでしょうか。
AWS公式が出しているIaCということでリソースのアップデートも早く、便利ですよね。
そのcdkのチェックツールとして**cdk-nag**というツールがあります。cdkで作成するリソースがAWSのベストプラクティスなどのルールに則っているかをチェックしてくれるツールです。
(例:S3のバケットはSSEの暗号化がされていること)

https://aws.amazon.com/jp/blogs/news/manage-application-security-and-compliance-with-the-aws-cloud-development-kit-and-cdk-nag/

このcdk-nagはcdk deployコマンドを打つと自動でチェックしてくれますが、どうしても**特定のルールはチェック外にしたい**ということがあると思います。そんなとき、python版のcdk-nagだとどのように記載すればよいかを調査しました。

# やりたいこと
– python版のcdk-nagで、IAM4のルー

元記事を表示

Brefを使いPHPのコードをLabmdaにデプロイする

# はじめに
はじめまして!
ジョージと申します。
先日PHPで書かれた業務委託先のサブシステムを既存サーバーからLambdaに移行する作業を行いました。
その時にPHPでLambdaにデプロイしている記事が少ないように感じたため、今回の記事を書こうと思いました。

# 前提
今回は[bref](https://bref.sh/docs/)というライブラリを使用するため以下の公式ページの手順を事前に行う
– [イントール手順公式ドキュメント](https://bref.sh/docs/installation.html)
– サーバーレスをインストールする
– AWSのアクセスキーを作成する
– Brefをインストールする

# 初期化
次のコマンドを打ってファイルを作成する
“`cmd
vendor/bin/bref init
“`

以下のように聞かれるため今回は「0」をコマンドで打つ
“`cmd
What kind of lambda do you want to create? (you will be able to add more functions

元記事を表示

【AWS】作成から一定期間経過したSnapshotを自動削除する仕組みを導入してみた

# 前提
メンテナンス時など、バックアップを取る際にスナップショットを手動で取得している。

# 課題
メンテナンスが問題なく完了した後、不必要になったスナップショットの削除を行う運用ルールがなく、無駄なコストが発生していた。

# 目的
スナップショット作成から一定期間経過したものは削除する仕組みをLambdaに関数登録し、トリガーとしてCloudWatch Eventsで日時実行する。
原則AMIに登録されているスナップショットの削除は行わない。

# ソース
~~~powershell:auto_delete_snapshot.py
import boto3
from datetime import datetime, timedelta
import dateutil.tz

########## 変数定義 ##########
# AWSアカウントID
acountId = “xxxxxxxxxx”
# 何日前以前を削除対象とするか指定 default=7
days = 7

########## 削除処理 ##########
def lambda_handler(even

元記事を表示

AWS CDK初心者が爆速でLambda Layerにpythonライブラリを入れた裏技

# はじめに
AWS CDKについて初心者用にまとめた記事はこちら

https://qiita.com/besmero628/items/dbab08287a8bc2d1893a

# 概要
最近AWSCDKを使用してpythonベースのlambdaを書いたのですが、pandasやらboto3やら使用する必要がありました。

もちろん素のpythonには入っていないライブラリなのでlambdaにパッケージごと入れる必要があるのですが、いちいちzipで固めて入れるのはめんどくさい。。。

AWSCDKをpythonで書き進めている記事もネットには少なくどうしたものかと思っていたのですが、色々調べていくうちに先人の知恵を借りられそうだったのでメモしておきます。

# 手順
:::note info
cdk languageはpythonを選択しています。
:::
## ① lambdaの作成
手始めにlambdaを作成します。
“`python:stack.py
from aws_cdk import(
aws_lambda as _lambda
Stack
)

class

元記事を表示

【初心者】【Lambda】ログについて確認し原因をしっかり追究してみた

# はじめに
どうもAWS初心者です。
今回Lambdaについて学習を行いました。
S3を利用して画像のリサイズを行う事を目標に関数を作成しました。
S3バケットを2つ用意し1つ目のバケットに画像をアップロードした際に、2つ目のバケットにリサイズした画像を上げるといった動きです。
作成しテストまでは上手くいったのですが、実際に適当な画像を上げた際に動作しませんでした。
その事について記事にしてみようかと思います。

# 原因の予測
テストで使用したファイルと同じ拡張子のファイルを利用しました。
2つのファイルの違いはサイズであり、そこに原因があると思い、サイズの小さいファイルをアップロードしてみたら成功しました。
なのでファイルが大きいことが原因だと考えました。

# 原因の解明
クラウドウォッチのログを確認することで原因の解明をしようと思いました。
しかしログを見てもエラーはありませんでした。
エラーとしては出ていなかったのですが1つ1つよく見ていく中で原因が分かりました。
![スクリーンショット 2022-10-29 21.36.01.png](https://qiita-imag

元記事を表示

【SAM】Roleの設定でちょっとはまったこと【AWS lambda】

SAMを導入することになったのでHelloWorldプロジェクトを触ってみたのですが、Roleの設定でちょっとはまりました。
解決方法をメモしておきます。

## 設定
`sam init`でHello Worldプロジェクトを作成し、
`sam build` と `sam deploy`がうまくいくところまで確認できました。

## エラー1
template.yamlをいじってアクセス権限を追加してみました。

“`yaml
Resources:
HelloWorldFunction:
Type: AWS::Serverless::Function
Properties:
Role: “arn:aws:iam::xxxxxxxxxx:role/xxxxxxxxxx” # ここを追加
CodeUri: hello-world/
Handler: app.lambdaHandler
Runtime: nodejs16.x
Timeout: 120
Architectures:
“`

元記事を表示

【C++】 Lambda関数のimmutableとは?

# Lambda関数のImmutableについて
公式ドキュメントでLambda関数はdefaultで引数がImmutable(不変)と書いてあったがよく分からなかったので、実際に試してみました。

* []の中の値がキャプチャと呼ばれていて、以下のようなCopyキャプチャは変数を変更不可能(Const)らしいですね。

“`
int x = 100;
auto hoge = [x]() {
x = 3; // compilation error
};
hoge();
“`

* ()の中の値がパラメーターと呼ばれていて、普通の関数同様に変数xに値を代入できます。
“`
auto hoge = [](int x) {
x = 3;
};
int num = 100;
hoge(num);
“`

* 普通の関数同様にconstをつければちゃんとerrorを吐いてくれます。
“`
auto hoge = [](const int x) {
x = 3; //comp

元記事を表示

Python メモ:for文で動的にlambda式を使う

# はじめに

メンテナンスツール(スクリプト)を数々作成したため、いちいちスクリプトファイルを選んで実行するのは面倒でした。そこで、TkinterによるSelect Launcherを作り、選択実行できるようにしました。
ボタンを作るたびに、その数分tk.Button宣言を記述していては、長々としたコードになってしまうので、lambda式を使用してコード量を減らします。
この時のlambda式の記述の仕方をメモに残しておきます。

## lambda式

Python 公式ドキュメント

https://docs.python.org/ja/3/reference/expressions.html

> 6.14. ラムダ (lambda)
“`
lambda_expr ::= “lambda” [parameter_list] “:” expression
“`
>ラムダ式 (ラムダ形式とも呼ばれます) は無名関数を作成するのに使います。 式 lambda parameters: expression は関数オブジェクトになります。 この無名オブジェクトは以下に定義されている

元記事を表示

Github Actionsでarm64のパッケージを作る

# 背景・目的

+ Graviton2プロセッサを搭載したAWS Lambdaだと、[パフォーマンス上のメリットがある](https://aws.amazon.com/jp/blogs/news/aws-lambda-functions-powered-by-aws-graviton2-processor-run-your-functions-on-arm-and-get-up-to-34-better-price-performance/)
+ numpyなど、プラットフォーム専用にビルドが必要なライブラリを使う場合に、arm64用のnumpyを用意する必要があった
+ これを解決するために、結構苦戦したので、備忘しておく

# 問題

+ Github Actionsだとamd64(x86_64)のCPUアーキテクチャのマシンで実行される
+ Github Actions上でarm64のdocker イメージを実行すると、`exec /usr/bin/bash: exec format error`のようなエラーが発生する
+ arm64のためのパッケージを作れなかった・・

元記事を表示

LambdaでWebページを返す

# はじめに
LambdaとDynamoDBを使用すればIOT用のグラフページを作成できるのではと思ったのでその備忘録。
この記事では図中の「グラフページ表示」部分を実施。
前回:https://qiita.com/aikawa_YO/items/79e8ef768b03e3f73315

![Lambda-DB.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/195542/82933046-6bbe-6525-d7a2-d8d23116a3ec.png)

# HTMLの中身
imgタグのsrcには前回のグラフ画像を返してくれるLambda関数URLを指定してください。

“`python
import json

def lambda_handler(event, context):
return {
‘statusCode’: 200,
‘isBase64Encoded’: False,
“headers”: {“Content-Type”:

元記事を表示

DynamoDBデータのグラフ画像作成(Lambda)

# はじめに
LambdaとDynamoDBを使用すればIOT用のグラフページを作成できるのではと思ったのでその備忘録。
この記事では図中の「グラフ画像生成」部分を実施。
前回:https://qiita.com/aikawa_YO/items/0fb84aec97e28ea33136
関数URLとLambdaのロール設定は前回と同様。
(今回は読み込みだけなのでLambdaからDynamoDBへの権限はフルアクセスいらなかった。)

![Lambda-DB.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/195542/82933046-6bbe-6525-d7a2-d8d23116a3ec.png)

# DynamoDBからデータを取得する
データを取得するためにいくつかの方法がありました。
## get_item
条件に当てはまるデータ単体を取得する
## query
条件に当てはまるデータをすべて取得する
PartitionKeyとSortKeyがある
![image.png](https://

元記事を表示

【AWS Lambda レイヤー】設定したときにハマった話

# 初めに
AWS Lambda でBoto3の最新バージョンを使いたくて、レイヤーを設定する際にハマった箇所の備忘録です。

### (そもそも)なぜレイヤーを使う?
AWS Lambda でPythonのBoto3を使うとき、
* デフォルトでのBoto3は __Ver.1.20.32__
* 最新のBoto3は __Ver.1.25.1__

となっていました。何が問題化かというと、公式ドキュメントに書かれているサンプルコードの通りに実装しても動かないんです!!(ひどい落とし穴)

### 前提
この辺りを参考にしながら進めました。とてもに参考になります。
本記事ではレイヤーの作成方法は記載しませんので、レイヤーの作成方法自体わからないという方は下記サイトをまずはご覧ください。

https://dev.classmethod.jp/articles/lambda-boto3-layer/

https://qiita.com/shimajiri/items/e0e41f2c7a8ac99f3253

# 本題
## 罠1:フォルダパス
### 動かなかったもの
“`
b

元記事を表示

AWS lamdaからS3にファイルをアップロードする

いろいろなやり方があるようで、右往左往してしまったので、その経緯を備忘録的に残します。

結論として、
* API gatewayでマッピングテンプレートを設定する
* API gatewayでバイナリメディアタイプを設定する
* lambdaロールにS3へのアクセス権限を付与する
がポイントのようです。

## lambda関数の作成

pythonで作成します。

1. AWS lambdaから関数の作成へ
![スクリーンショット2022-10-1515.50.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152192/5668787d-0900-53ad-f7cc-3e961e332c8b.png)

1. 任意の関数名を入力、python 3.8を選択して関数を作成します。
![スクリーンショット 2022-10-15 16.01.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152192/ebbf3

元記事を表示

LambdaからDynamoDBへデータを登録する(Ruby)

# はじめに
LambdaとDynamoDBを使用すればIOT用のグラフページを作成できるのではと思ったのでその備忘録。
この記事では図中上の「IOTデータ保存」部分を実施。

![Lambda-DB.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/195542/82933046-6bbe-6525-d7a2-d8d23116a3ec.png)

# DynamoDBの設定
パーテーションキーとソートキーがある
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/195542/dcdf7d30-7cf0-90cc-c534-582bb2e6db46.png)
上記例ではパーテーションキーがidでソートキーがtime
パーテーションキーのみ、またはパーテーションキーとソートキーの2つを指定する事が可能。

今回のIOT機器の場合、idが機器固有の番号、timeがデータを計測した際の時間としています。
理由としてと

元記事を表示

Serverlessでlambdaデプロイする手順とデプロイしようとした時のエラー対応

## 読者の対象

– Serverless初心者でエラーに困る方々

– windowsユーザ

————
## serverless環境のインストール

“`
# 実行ポリシーを確認(windowsターミナルを管理者実行して実行権限を確認してください)
Get-ExecutionPolicy

# powershellでチョコレートのパッケージインストール
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString(‘https://community.chocolatey.org/install.ps1’))

# チョコレートでサーバレスフレームワークインストール
choco inst

元記事を表示

AWS Lambda(Python)にてジオコーディングの一つであるGeoHash(ジオハッシュ)を扱う

# 本記事の内容

– AWSが提供するLambda(Python)にて、経緯度に基づくジオコーディング方法の一つであるGeoHash(ジオハッシュ)を扱う方法を記載した記事です。
– PythonベースのLambdaにてGeohashを扱う記事があまりなかったため、ライブラリーをLambdaに組み込み利用する方法をまとめました。

# 実施環境
– Windows 10
– Chrome
– AWS

# 説明の流れ
1. ジオハッシュライブラリーのダウンロード
2. Lambdaデプロイ用のzipファイル作成
3. Lambdaでの動作確認

## 1. ジオハッシュライブラリーのダウンロード

PythonのGeoHashライブラリーは、[ここ](https://pypi.org/project/python-geohash/#files)からダウンロードする。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2017667/0af2b50b-a1fe-21db-4f52-cdab

元記事を表示

[AWS Lambda Powertools Python]パラメータ機能のtransform動作を確認

# 概要

[AWS Lambda Powertools Python](https://awslabs.github.io/aws-lambda-powertools-python/latest/) [^1] の機能のうち、[パラメータ機能(Parameters)](https://awslabs.github.io/aws-lambda-powertools-python/latest/utilities/parameters/) [^2] にはJSONとbase64を変換してくれる機能が含まれています。
簡単なサンプルで動作を確認します。

[^1]: [AWS Lambda Powertools Python](https://awslabs.github.io/aws-lambda-powertools-python/latest/)
[^2]: [Parameters](https://awslabs.github.io/aws-lambda-powertools-python/latest/utilities/parameters/)

# 確認手順

対象はSSM P

元記事を表示

[AWS Lambda Powertools Python]パラメータ機能のキャッシュ動作を確認

# 概要

## パラメータ機能

[AWS Lambda Powertools Python](https://awslabs.github.io/aws-lambda-powertools-python/latest/) [^1] の機能のうち、[パラメータ機能(Parameters)](https://awslabs.github.io/aws-lambda-powertools-python/latest/utilities/parameters/) [^2] はAWSの下記を利用したアプリケーションパラメータ読み取り機能を提供してくれます。

[^1]: [AWS Lambda Powertools Python](https://awslabs.github.io/aws-lambda-powertools-python/latest/)
[^2]: [Parameters](https://awslabs.github.io/aws-lambda-powertools-python/latest/utilities/parameters/)

– AWS Systems

元記事を表示

処理を続けるLambdaを中断させる方法とか

JAWS-UG 朝会にてLTをやった内容をもうちょい深掘りしてみました。
Lambda の処理が止まらなくなったので、やったことをまとめてみます。

## やろうとしていたこと
KinesisからのストリーミングデータをLambdaで受け取り、よしなに処理したあとに別サービスへとAPI連携をしていこうとするつもりでした。

## CloudWatch にずっと出てくるログを見て・・・
メッセージを見るために何度かみているのですが、どうもずっと動いているようでした。
最初は継続しているのかな?と思いながら見ていたのですが、1分で出ている量がおかしいと思い、対処していくことにしました。

## まずは止めにかかる
### Lambda を一時停止させる
兎にも角にも Lambda は停止しないと無限課金されるので一旦処理を止めます。
止める方法は対象の関数から「同時実行」→「編集」から「同時実行の予約」の数を 0 に設定します。

これで処理は一旦止められたのでそこから見ていきます。
同時実行の設定を戻すと当然処理が再開されますので、一時しのぎです。

### Lamb

元記事を表示

OTHERカテゴリの最新記事