Lambda関連のことを調べてみた

Lambda関連のことを調べてみた

GitHubActionsでLambdaとLambdaレイヤーの構築をしていて躓いた。

# はじめに
今回はGitHubActionsを利用してLambdaとLambdaレイヤーを構築します。
LambdaとLambdaレイヤーを紐づける際に上手くいかなかった箇所や解決方法を備忘録として残していきたいと思います。

# 目次
・つまづいたところ
・解決方法
・事前準備
・LambdaレイヤーのCloudFormation
・LambdaのCloudFormation
・Lambdaレイヤー構築のGithubActions
・Lambda構築のGithubActions
・動作確認
・最後に
・参考

# つまづいたところ
Lambdaレイヤーを複数のLambdaに紐づけることとなり、
GitHubActionsでLambdaレイヤーとLambdaのCFnテンプレートを分けて構築することになりました。
そのため、Lambdaを構築する際にLambdaレイヤーの情報をテンプレート外から取得することになったのですが、Outputsで対応した際にバージョンまで取得することができず、躓いてしまいました。

# 解決方法
デプロイをGitHubActionsを活用していたため、バージ

元記事を表示

Node.jsランタイムでSJISのcsvファイルを出力するLambda

# 一覧データをcsv出力
データベースにはUTF-8で補完されているものの、
「ファイルの文字コードは **Shift-JIS** で(Excelでそのまま開きたい)」
という要件があったとします。

今回は **AWS Lambda(Node.jsランタイム)** で構築したアプリケーションだったので、その例です。

ポイントは以下2点です。
1. UTF-8からShift-JISへのエンコード
1. Lambdaペイロード制限を考慮してS3署名付きURLを利用

## まずはcsvデータを生成
csv形式へのパースには[Papa Parse](https://www.papaparse.com/)を、エンコードには[encoding.js](https://github.com/polygonplanet/encoding.js)を使うことにしました。
“`npm install“`しておきます。

DBから取得したデータ配列を渡して、csv形式&SJISエンコードした文字列を返す処理です。
“`javascript
const Papa = require(‘papapa

元記事を表示

【Nuxt 3とLambdaでTypeScriptの型を共有】:🔰エンジニアが感じたモノレポ構造の威力

## はじめに
こんにちは。入社2年目、実務経験約半年の駆け出しフロントエンドエンジニアです。日々の業務では主にNuxt、Vue、AWS、TypeScriptを使って開発を行っています。

今回は、最近の開発で採用した「モノレポ構造」を通じて、型の共有がどのように役立つかについてお話しします。駆け出しのエンジニアの方にとって、少しでも参考になる情報をお届けできれば嬉しいです。

## 現在の開発環境
私の現在の開発環境は以下の通りです:

– フロントエンド: Nuxt 3
– バックエンド: AWS Lambda (Node.js)
– 共通言語: TypeScript

## 直面していた悩み
フロントとバックで別々のリポジトリに分かれていると、同じ型を使いたいのに、変更があるたびに手作業で同期しなければならず、とても面倒だなあと思っていました。
結果として、型の不一致が原因でエラーが発生したりして、開発スピードが落ちることもありました。

## 型共有の課題とモノレポ構造との出会い
フロントエンドとバックエンドで型を共有する一般的な方法としては、以下のようなものがあります:

1

元記事を表示

API GatewayでLambdaを呼び出してCORS対応する方法

# はじめに
こんにちは、もちもちMAXです。
今回はAPI Gatewayでプロキシ統合したLambdaを呼び出す時にCORS対応する方法を説明します。作成するのはREST APIで適当なパラメータをbodyに格納してPOSTできるところまでをやっています。

# 手順
ざっくりとした手順は下記の通りです。
1.API GatewayでLambda関数を紐づけたREST APIを構築
2.Lambda関数にCORS対応を追加
3.CORS対応確認

# Lambda関数の作成
各手順の説明の前に、今回呼び出すAPIの実体であるLambda関数を作成します。
![image (4).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/463753/97bb1fea-bbf5-6d0b-9f3c-f46a575f60f2.png)

Lambda関数のコードは下記の通りです。
“`Python
import json

def lambda_handler(event, context):
# OPT

元記事を表示

Amplify Gen2 でLambdaを定義したらesbuildされてソースがコンソール上で見えなくなる

## はじめに

Qiitaのアカウントを初めて作成してみて、投稿記事第一号です。
関西の製造業で働いてAWSを勉強中のエンジニアのヤタクマと申します。

今回、Amplify Gen2 を触り始めてAPI GatewayやLambdaといったバックエンド環境をTypeScriptで定義できるというのは便利だなと思い、触ってみたときのメモです。

もともと、Lambdaをpythonで構築していた過去がありSAMを使うとローカルと同じソースがコンソールでも展開されているのでそれと同じ感覚で Amplify Gen2によりCDKでLambdaを定義して試していたら勝手が異なっていたため自分なりに調べていたことのメモです。

## 環境情報

* AWS Amplify Gen2
* Lambda (Nodejs 20)
* 使用言語 TypeScript

## やったこと

1. Amplify Gen2 のチュートリアルの手順したがって、amplify-next-templateのソースをgithub上でとりこみ、Amplify上でデプロイを行いました

https://docs.a

元記事を表示

【Terraform初心者】Lambdaの関数URLを構築してみた

# はじめに
Terraformで今後インフラの構築を行うので、手始めとしてLambdaを作ってみました。

### そもそも「Terraformの書き方がわからん…」って話をしてみる
Lambdaの構築を行う前にQiitaやZennなど、いくつかの記事を見てみました。
しかし、どの記事を見ても「なんでこのパラメータが必要ななんだ…?」と疑問に思ってしまい、Terraformってみんなどういう風に書いていってるかが全然わかりませんでした。
なので、自分のやり方としては、はじめにAWSコンソールで構築してみたり、公式ドキュメントを見ながら、これが「必須パラメータなんだな」とか参考にしていました。
なので、以下の記事に不適切な書き方?が載ってるかもしれないのでコメントで教えていただけると助かります!!!

# 本編
### やること
– Lambda関数はzip形式にしてアップロード
– Lambdaを構築してから関数URLを作成する
– CURLコマンドで動作を確認

## 環境
“` bash
$ terraform version
Terraform v1.5.1
on d

元記事を表示

【AWS】EC2内部でIPアドレスを変更するソフトウェアへの対応方法

# はじめに
 現場で、オンプレの**内部でIPアドレスを変更する仕組みを持つメールサーバ**をAWSのEC2に移行する際、大きな問題点がありましたので解決策とともに紹介します。

# 対象読者

– AWSを使用する現場に従事している方
– AWSの資格勉強をしている方
– AWSに興味がある方

# 1. 問題点

### **AWSでは内部でのIPアドレス変更に対応できない**
内部でプライベートIPアドレスを変更した場合でも、AWS側のネットワークインターフェースのIPアドレスは変わらないのでインスタンス同士が通信できなくなります。

今回の現場では、複数のEC2インスタンスでクラスターを作り、ソフトウェアのIPアドレス変更で障害時に自動でフォールバックするようなシステムにて問題が起きました。

# 2. 解決策

### **CloudWatchとLambdaを使用して対応**
AWSでは内部でのIPアドレス変更を検知できないので、内部ソフトウェアのトリガーとなるものをAWS側(CloudWatch)で監視し、Lambdaを使ってIPアドレスを付け替える必要がありました

元記事を表示

【AWS】Lambda関数削除手順【Lambda】

1). Lambdaを開き、削除対象の関数のラジオボタンを押し、「アクション」から「削除」を選択します。
![1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3817084/bbcde979-f26b-8bc1-9ea2-b6d17051ee2f.jpeg)

2). 赤枠に「削除」と入力し、「削除」を押します。
![2.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3817084/a399c879-2cb7-4fb7-2863-b1e384e5f296.jpeg)

3). 正常に削除されたことを確認して「閉じる」を押して完了です。
![3.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3817084/77b2d509-ea72-ee8a-e93f-7f02bca959c0.jpeg)

元記事を表示

【Lambda】pythonの画像処理ライブラリのPillowをインポートするのに手間取った話

どうもこんにちは。

今回は、AWS Lambdaを使用してPillowをインポートしようとした時につまづいたのでメモしておきます。

# Pillowってなに?

そもそもPillowって何って話ですが、以下の記事にはこのように記載されていました。

> OpenCVのようにコンピュータービジョン系の高度な画像処理(顔検出やオプティカルフローなど)はできないが、リサイズ(拡大・縮小)や回転、トリミング(部分切り出し)のような単純な処理が簡単にできる。

https://note.nkmk.me/python-pillow-basic/

ほうほう…

今回は、base64エンコードされた画像データをバイナリデータに変換し、さらにバイナリデータから画像を読み込んで画像オブジェクトに変換してS3に保存するというなんともめんどくさい処理をする必要があるので、Pillowを使用しています。

“`python
# 画像生成試してます
response = bedrock_runtime.invoke_model(
body=body,
modelId=”amazon.t

元記事を表示

AWS LambdaでHIPHOPを配信するLINEbotをつくる

AWSの勉強のために、AWS Lambda+LINEのMessaging API+spotifyAPIでおすすめのHIPHOPを配信するLINEbotを作成しました。

AWS、Messaging API、spotifyAPIのいずれも触ったことがない状態からのスタートでしたが、形にすることができたので開発の方法を紹介していきたいと思います。

## 1.完成したもの
まずは今回開発したプロダクト(?)を紹介します。
開発したのはLINEの公式アカウントで、何かしらのテキストを送信すると曲のアーティスト名、曲名、spotifyのURLが返ってくるというものです。

送信される曲は、プレイリストの中からランダムで選択されています。

処理の全体の流れは以下のようになります。
1.ユーザーがLINE公式アカウントにメッセージを

元記事を表示

【AWS】Lambdaを使ってRDSのdumpファイルをS3に保存する

以下の手順で、LambdaとRDSを同一VPCに配置し、S3にデータベースのdumpファイルを保存する環境を構築します。

## 前提条件

– AWS CLIがインストールされ、適切に設定されていること(バージョン2.0以上推奨)
– Terraformがインストールされていること(バージョン1.0以上推奨)
– Python 3.8以上がインストールされていること(Lambda関数の開発用)

## 手順

### VPCの設定

既存のVPCを使用するか、新しいVPCを作成します。VPCには少なくとも2つのサブネット(プライベートサブネット)が必要です。

Terraformを使用してVPCを作成する例:

“`
resource “aws_vpc” “main” {
cidr_block = “10.0.0.0/16”

tags = {
Name = “main-vpc”
}
}

resource “aws_subnet” “private_1” {
vpc_id = aws_vpc.main.id
cidr_block = “10

元記事を表示

AWSのlambdaを使って、KubernetesがダウンしたらSlackにアラートを流すようにしてみた

## はじめに

前回は Alertmanager を使って、Kubernetes で異常が生じた際に、Slack にアラートが流れるようにしました。

https://qiita.com/piny940/items/1e44d8caf936216ca93e

しかし、Alertmanager を Kubernetes クラスタ上に立てているため、クラスタごとダウンした際にはそれをアラートで気づくことができないという課題があります。

そこで今回は、Alertmanager のサービスの起動状況を監視する lambda を使用して、Alertmanager がダウンした時に Slack にアラートが送信されるようにしていこうと思います。

完成したコードはこちらから確認できます。

https://github.com/piny940/infra/tree/main/service-monitor

## 実装

コード自体は、Alertmanager のヘルスチェック用のエンドポイントにリクエストを送って、200 が返ってくるかを確認するだけのものです。

3 回リクエストをして、3

元記事を表示

AWS SAM 覚え書き

SAM の記事なんて今さらですけどねー。今まで長らくお世話になってきた Serverless Framework が v4 からはどうも商用では有償になるらしいですし(厳密には組織の収益規模によるようですが、細かいことは気にしない…)、Serverless Framework を使い続けることで Dependabot くんに「脆弱性あるよ早く対処しな!」と頻繁にせかされるのもいいかげんしんどくなってきたので、SAM に乗り換えるのもいいかな、と。 ~~CDK はコードをぐちゃぐちゃ書かないといけないのでメンドクサイ~~

ここでは、忘れそうになることを箇条書きでメモするだけです。役に立つ記事とかそういうのはよそを当たってください…。

## Lambda 実行ロール

Lambda 実行ロールへの基本的な管理ポリシーの付与は SAM が暗黙にやってくれるので、S3 とか DynamoDB とか自分のリソースへのアクセス権限をポリシーテンプレートなりなんなりで追加すればよい。

– 何も書かなくても、自動的に `AWSLambdaBasicExecutionRole` ポリシーが付与され

元記事を表示

AWS環境構築時のハマりポイント備忘録①

本記事は私がAWS環境構築をするなかでうっかり忘れてハマってしまうポイントを今後のためにまとめたものです。

## 1. DBを作成する前にサブネットグループを作成すること
サブネットグループは複数のサブネットにまたがるグループであり、サブネットを作成後に別途作成が必要。

例)プライベートサブネット(az-a)と(az-d)があるとした場合、それらをサブネットグループとして事前に作成した上でRDSに紐づける必要がある。

:::note warn
RDS作成時に紐づけるサブネットもしくはサブネットグループを紐づける必要があり、RDS作成後はその設定を変更することができない。
変更したい場合はRDSの再作成が必要(時間がかかる)
:::

## 2.VCP内にLambdaを配置しRDSと内部通信する場合
AWSはLambdaをVPC外に配置することを推奨しているが、LambdaとRDSを内部通信させたい場合はVPC内にLambdaを配置する必要性が出てくる。
サブネットのプライベートIPアドレスを浪費するため、他のAWSリソースに影響が出ないようLambda専用のサブネットを用意するこ

元記事を表示

LINE×AWS Lambda×Notionで支出管理用Botを作ってみた

## 経緯
これまで家計の立て替えを行った際には忘れないようにNotionで作成した支出管理用のテーブルに直接入力しておりました。

ただスマホから入力するにあたりNotionアプリの起動→対象のページに移動→1つ1つセルを選択して項目や金額や日付を埋める等手間が多く、同居人がめんどくさがって自身で入力してくれないという悩みがありました。

そこでその悩みを解決すべく考えたのが、LINEに項目と金額を入力して送信すれば勝手にNotionのテーブルに内容を反映してくれる仕組みになります。

## 作ったもの
今回作成した仕組みの全体アーキは以下のようにLINEとAWS LambdaとNotionを組み合わせたサーバレス構成になります。

![全体像.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/625929/fbfc2b94-ae52-9088-8e4f-3a00e44f7556.png)

作成したLINEのBotとのトーク画面で「項目 金額」と入力することでNotionに登録され、以下のようなレスポン

元記事を表示

lamda関数を新規作成した メモ

lamda関数を新規作成した

前提 : vpc、elastic ipの設定は終わっている
lamda作成ユーザにIAM権限が必要(ロール割当で必要になる)

1. サービスからlamdaを選択
2. 関数の作成
・ 一から作成 (あくまで自分の場合)
を選択
・ 関数名
任意でつける
・ ランタイム
nodejs20を選択
・ アーキテクチャ
x86_64 (特に何も考えず)

・ デフォルトの実行ロールの変更
→ 基本的な Lambda アクセス権限で新しいロールを作成
を選択した。(使いまわしのロールなければこれで良さそう)
→ この時はS3の権限が必要だったので以下を追加

“`
{
“Version”: “2012-10-17”,
“Statement”: [
{
“Sid”: “VisualEditor0”,
“Effect”: “Allow”,
“Action”: [
“s3:PutObject”,
“s

元記事を表示

AWSのLambda(zip)をLambda(Image)として動かす

# この記事について

AWSのLambdaには、`zip`と`Image`の形式があります。
この2つの形式にはいくつかの違いがあります。一部を上げると、下の表のような違いがあります。

||zip|Image|
|:–|:–|:–|
|実行環境|AWSが提供したもの|自由|
|デプロイにかかる時間|数秒、ライブラリによっては数分|数分~数時間|
|Web上でソースを編集|ライブラリが小さければ可能|不可|
|デプロイできるファイルサイズ|50MBまで|10GBまで|
|docker|不要|必要|

この記事で紹介する実行方法は、`zip`と`Image`のいいとこどりをします。

||zip+Image|
|:–|:–|
|実行環境|自由|
|デプロイにかかる時間|数秒|
|Web上でソースを編集|可能|
|デプロイできるファイルサイズ|10GBまで|
|docker|不要|

`zip`としてソースコードをデプロイしながら、`Image`の自作ランタイム上で動かします。

# 実際に動かしているところ

実際に動かしているところをキャプチャで紹介します。
ginza(※

元記事を表示

【AWS】Lambdaレイヤーの作成とアップロード手順

AWS Lambdaで`mysqldump`コマンドを使用するために、Lambdaレイヤーを作成し、ローカルのWindows端末にダウンロードしてからAWSコンソールでアップロードする手順を解説します。

## EC2インスタンスでのLambdaレイヤーの作成

まず、必要なライブラリを含むLambdaレイヤーをEC2インスタンス上で作成します。

### 必要なディレクトリの作成

“`bash
mkdir -p lambda-layer/lib
“`
### 依存ファイルの調査
mysqldumpコマンドが依存しているライブラリを調べるためには、lddコマンドを使用します。以下のように実行します。

“`bash
ldd /usr/bin/mysqldump
“`

実行結果には、mysqldumpが依存しているライブラリが一覧表示されます。例えば、以下のような出力が得られます。

“`bash
linux-vdso.so.1 (0x00007ffe347fb000)
libssl.so.3 => /lib64/libssl.so.3 (0x00007f025a2b100

元記事を表示

LambdaのRubyでGitLabにリポジトリを作成、削除する

## ruby版
AIにシェルからlambda用に変換してもらったらあっさり動いた。
RubyでGitLabにリポジトリを作成、削除する機能です。

### リポジトリ作成
– https://github.com/tmoritoki0227/gitlab_project_create/blob/main/create_project.rb
– https://github.com/tmoritoki0227/gitlab_project_create/blob/main/projects_and_branches.txt

### リポジトリ削除
– https://github.com/tmoritoki0227/gitlab_project_create/blob/main/delete_project_all.rb

元記事を表示

Python lambda関数、使いどころはここ!1行で書けるアロー関数風の魔法

## はじめに
こんにちは、Pythonエンジニアの皆さん!今回は、Pythonの中でも特に便利で魔法のような機能を持つlambda関数について、その使いどころと魅力をご紹介します。lambda関数は、1行で書けるアロー関数風の短い関数で、コードをよりシンプルかつ読みやすくする強力なツールです。

## lambda関数とは?

lambda関数は、Pythonの匿名関数です。通常の関数定義(`def`キーワードを使用)とは異なり、名前を持たず、1行で記述できます。構文は以下の通りです:

“`python
lambda 引数: 式
“`

## lambda関数の魅力

1. **簡潔性**: 1行で関数を定義できるため、コードがスッキリします。
2. **一時的な使用**: 一度しか使わない小さな関数に最適です。
3. **可読性**: 適切に使用すれば、コードの意図が明確になります。
4. **関数型プログラミング**: `map()`、`filter()`、`reduce()`などの関数と相性が良いです。

![image.png](https://qiita-image-

元記事を表示

OTHERカテゴリの最新記事