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

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

RustでのAWS Lambda開発完全ガイド

## 概要

この記事はRustでAWS Lambda開発を行うにあたっての全体プロセスのガイドです。RustでLambda関数を実装し、そのコードを実行するためのDockerコンテナイメージを作成します。次にそのイメージを自動でビルドしLambda関数を更新するCI/CDをCodePipelineで構築します。他に複数のLambda関数を一つのクレートで管理し、それらを一括でデプロイする方法についても解説します。

## なぜRustでLambdaを実装するのか?

まず、Rustは素晴らしいプログラミング言語です。静的型付けによってバグの少ないコードを書くことができます。またcargoという洗練されたパッケージマネージャにより、依存関係の解決やビルドを柔軟かつストレスレスに行うことができます。

Rustで処理を実装することで(他の言語と比較して)処理時間を短く、またメモリフットプリントを小さくすることができます。Lambdaは実行時間とメモリ割当量によって課金されるため、コスト面で非常に有利です。

参考:

https://zenn.dev/hinastory/article

元記事を表示

[パート2:実行]S3に保存する前ラムダでサムネイルに画像圧縮の前処理

# 前提

せめてS3・Lambda・IAM権を持っているAWSアカウントそれともIAMアカウント用意

# 概要
こちら記事では詳細な実行を説明させて頂きます。

主な内容が下記のように進めています。

1. バケツ作成
1.1 バケツ作成
2.2 ライフサイクル作成
2. ポロシー・ロール作成
2.1 ポリシー作成
2.2 ロール作成
3. ラムダファンクション作成
3.1 環境作成
3.1.1 初期設定
3.2 ファンクション作成
3.2.1 ロールや処理時間を設定
3.2.2 トリガー設定
3.2.3 環境変数
3.3 ラムダのNode modulesについて
4. テスト行い
4.1 S3アップロード
4.2 結果をチェック
4.3 ログをチェック

## 1. バケツ作成

2つのバケツを作成し、そのうち1つを一時的なバケツとして使用します。この一

元記事を表示

[パート1:概要の設計] S3に保存する前ラムダでサムネイルに画像圧縮の前処理

前の[記事](https://qiita.com/17021084/items/e1078bacc2fbc32d3183)の次に、今回は実践のユーケースを説明させて頂きます。

以下の2つのパートに分かれています。

– パート1:概要の設計(本記事)
– パート2:[詳細な実行](https://qiita.com/17021084/items/0e077c7c85bd5fce657d)

## **概要**

1. 前提
2. 背景
3. 目的
4. 構成・経過
5. 評価
6. その他

## 1.前提

– Node Js 20.xx
– Lambda x86_64
– [sharp](https://sharp.pixelplumbing.com/install) (os linux, cpu x86)
– AWS console 操作ため、管理権があるアカウントは必要

## 2.背景

SNS系アプリでよく見かけるサムネイルです。これらの処理には時間がかかりますが、たまにしか実行されません。メインのサーバーにサムネイル処理を置くと、他のサービスに影響を与える可能性があ

元記事を表示

API超入門!最速で使えるAPIを実装する

# はじめに
こんにちは、ユーゴです。
最近、趣味でクラウドプラットフォームを遊んでいます。AWS, GCP, Azureなど色々と試しており、「こんなことができるのか、すげ〜」という感じです。
今回は、AWSを使用して、「とにかくAPIを自作してみたい!」という方に実装方法を紹介します。

# 結論
1. 「**Lambda**」でバックエンドを作成
2. 「**API Gateway**」でエンドポイントを作成
これだけで、APIを実装できます。しかも、今回はGUI操作で完結します。

# 対象読者
・**サーバーなんもワカランの人**
→ 今回は、サーバーレスで実装できます。AWS偉大。GASのデプロイと似たような感じです(GASでもAPIは作れるけど、APIのためのデプロイという感じではないので、APIを体系的に学習できない)

・**APIはちょっと分かるの人**
→ 「Slack API 叩いてみたことはある」という感じで、なんとなくAPIがどういうものか分かっていれば十分です

# 0. AWSアカウントを作成
今回は、APIを作成するために、AWSを使用して構築していき

元記事を表示

c#+Lambda+API Gatewayで最小構成のRestAPIを作成する方法

直近ではPythonを使ってLambda+serverless framework+APIGatewayでRestAPIを作成していたのですが、そちらのプロジェクトが終わって知見を広めようとバックエンド系の言語を調べていた所、C#の文字を発見!
これまでC#はwindows用のアプリを開発する言語として利用してきたので、バックエンドでも使えることを知ってびっくりしました。

まだまだ初歩も初歩の部分をやっているのですが、初歩の部分のハードルがかなり高くて、自分でも2回目やるときにまた調べなきゃいけないことになりそうだったので、最小のAPIを作成してデプロイするところまでを手順化してみます!

# 環境
windows11
VisualStudio2022Community 17.8.6
.NET6

# まずVisualStudioを変更する
1. VisualStudioInstallerを起動して、変更を選択します。
2. **ASP.NETとWEB開発**にチェックを入れて右下の変更を押します。
3. しばらく待つとVisualStudioが変更されるので、これで完了です!

元記事を表示

サーバレスで Minecraft と外部サービスを連動させてみた話

この記事は2分で読めます。
色々あるので一部ぼやかして書いてます。

# はじめに
AWS の Lambda と API Gateway を使って Minecraft と外部サービスを連携させてごにょごにょ色んなことをやってみた話を簡単にまとめました。
Minecraft は全世界でもっともプレイヤー数の多い人気ゲームですが、アプリ自体は旧世代のアプリケーションなので現代のサービスと連携して有効利用しようと思うとそれなりに工夫が必要になります。Steam や Discord との連携機能も無ければ、Web からのアクセスもできなければ、サーバコンソールからでも Minecraft 専用のコマンドが必要になるという勝手の悪いゲームです。ついでに公式のサーバにはヘルスチェックやトラップも備わっていないので Minecraft サーバは壊れたところで自動では何もできません。
ということで何とかします。

# やったこと
Lambda と API Gateway を使ってバニラの Minecraft を外部サービスと連携させます。プラグインも Mod も要らないので公式のバニラサーバでも実装で

元記事を表示

Prisma + zod を使用したLambdaのファイルサイズ肥大を抑えるために Lambda Layersを利用したメモ

## 概要

[前回](https://qiita.com/hibohiboo/items/ed08b21799dd92bedc3e)に作成したファイルだと、バンドル時にハンドラファイルにスキーマファイルを含めてしまい、サイズが肥大化する問題があった。

今回、Lambda Layersを使用し、スキーマファイルを外だしできるようにする。
[/opt/nodejs/ にレイヤーのパスが通る][*1]ため、そこにスキーマファイルを入れるように設定した。

[ソースコード](https://github.com/hibohiboo/kartagraph-monorepo/tree/e48a851f4eef7dfeb5b7410b8b8432505d816af0/)

## ソースの変更
### Lambdaの定義ファイル
tsconfigを修正し、ソースを直接読みにいっていた部分を、デプロイ後のパスである`/opt/nodejs/`以下のフォルダを見に行くようにする

“`diff:backend/tsconfig.json
“paths”: {
“@kartag

元記事を表示

AWS Lambdaの内部構造

# はじめに
AWS Lambdaは、開発者がサーバーのプロビジョニングや管理を心配することなくコードを実行できるサーバーレスコンピューティングサービスです。
この記事では、Lambdaの仕組みとそのコンポーネントについて詳しく解説し、サーバーレスアーキテクチャがどのように開発のパラダイムを変えているかを探ります。

# AWS Lambdaの概要
AWS Lambdaは、「書いたコードを実行するだけ」のシンプルさで知られています。
開発者はコードを提供するだけで、後はLambdaがスケーラビリティ、実行、およびセキュリティを管理します。
Lambda関数は、トリガーに応じて自動的に実行され、使用した分だけ課金されます。
このモデルは、リソースのオーバープロビジョニングやアンダープロビジョニングを心配する必要がないため、効率的でコスト効果が高いです。

### コンポーネントの深掘り
AWS Lambdaのアーキテクチャは主に二つの大きなコンポーネントに分かれています。
呼び出しリクエストのルーティングとコンピュートインフラストラクチャです。
これらのコンポーネントはLambdaの柔軟

元記事を表示

サーバレスDBのNeonからDBファーストでPrismaを使ってスキーマを作りzodを連携して型解決をしたlambda(Node.js)を作成したメモ

## 概要
[前回は](https://qiita.com/hibohiboo/items/827f0e99afd0597d6425)Neonに繋いでSQLを発行することを試した。
今回は、型を自動的に作成して使用することを試す。

大まかな手順

1. Prismaでスキーマファイルを作成
1. スキーマファイルにzodの連携情報を追記
1. zodファイルをgenerate
1. zodで型解決
1. lambdaから使用

[ソースコード](https://github.com/hibohiboo/kartagraph-monorepo/tree/662909d018ca81a70058a20d4eeb9739edf76284/prisma)

なお、この手順だとバンドルファイルが肥大化する。対応は[Prisma + zod を使用したLambdaのファイルサイズ肥大を抑えるために Lambda Layersを利用したメモ](https://qiita.com/hibohiboo/items/a024126d8b44362405c3)に追記。

## 準備

### ライブラリの

元記事を表示

AWS Lambdaで.NET 6から.NET 8に移行したときにやったこと

# はじめに
 AWS LambdaでLTSである.NET8がランタイムサポートされました。AWS Lambdaでは.NETの以前のLTSである.NET6のランタイムサポートの廃止を2024/11/12に予定しており、廃止後も一定期間は関数の作成と更新が可能ですが、2025/1/11には新規作成がブロックされ、2025/2/11には更新もブロックされるようになります。このためLambdaで.NET6を利用しているユーザーは早期に.NET8に移行する必要があります。

# やったこと

## ターゲットフレームワークの変更
プロジェクトファイルのターゲットフレームワークを変更します。

“`diff_xml:***.csproj
net6.0
+ net8.0
“`

## aws-lambda-tools-defaults.jsonの修正

AWS Toolkit for Visual Studioのテンプレートを使っている場合

元記事を表示

Terraform の external data sourceでbashスクリプトを実行しようとしてハマった

# 環境
– Terraform 1.7.4
– Terragrunt 0.55.1
– hashicorp/aws 5.36.0
– hashicorp/external 2.3.3
– WSL2(Ubuntu)

# 経緯
TerraformでLambda関数をデプロイするためにpnpmのプロジェクトをtfファイルと同一階層に配置し、apply時にトランスパイルや不要ファイルの削除を行いzip化しようとしていた
そのためにexternal data sourceやarchive_file data sourceを利用していたのだが、なぜかbashファイルの実行に失敗するという現象でハマってしまった

# ディレクトリ構成
.
├── bin
│ └── build.sh
├── lambda
│ ├── index.ts
│ ├── jest.config.js
│ ├── node_modules
│ ├── package.json
│ ├── pnpm-lock.yaml
│ ├── tests
│ │ └── index.spec.ts

元記事を表示

Lambda(Node.js)でSSM パラメータストアの値を取得・更新する

# はじめに
パラメーターストアをNode.jsで扱う系の記事がパッと見つからなかったので「扱ってみた」を書き残します。

難しい事は無いのですが、色んな記事の行ったり来たりや、公式ドキュメントを読むのが面倒な~~私みたいな~~人向けに書いています。
# 手順
1. パラーメータストアを作成する
1. Lambdaを作成する
1. IAMポリシーを追加する
1. Lambdaを実行する

## 1. パラメーターストアを作成する
マネコンの検索窓に「Systems Manager」と入力してSystems Managerに移動する。左ペインの「パラメーターストア」をクリックする。

![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/349281/2a71dd45-74aa-b08e-0c69-1716a48b512c.png)

「パラメータの作成」をクリック。

![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0

元記事を表示

ハッカソン参加時の備忘録 ~ 第6回:【Python】AWS LambdaとAWS Rekoginitionを連携させてみよう ~

こんにちは。ITエンジニアのきゅうです。
前回、AWSのLambdaとAWSのS3(ストレージサービス)を連結させるサンプルを備忘録したので、今回は当方が良く使うAWSのAIサービスの一つであり、簡単に画像解析を行うことが出来るサービス『Rekoginition』と連結したいと思います。

今回作成するシステム構成図です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3618971/7c64153a-d89e-581e-df58-a8148b63e814.png)

※前回の備忘録に記載した『S3』が登場しております。
 これはRekognitionに読み込ませる画像をS3などに格納しておく必要がある為です。
 ですので、今回の記事では以下の記事の設定がしてあることが前提となります。

https://qiita.com/kyuu2197/items/201d33437ba33665f840

# Amazon Rekoginitionについて
改めて、Rekognitionについて

元記事を表示

AWS CloudFormationでCognitoのサインアップ前トリガーを実施

# はじめに
今回はCognitoでのサインアップ前LambdaトリガーをAWS CloudFormationを用いて構築していきたいと思います。
これにより、Cognitoで登録されるアカウントを制限することが出来たりすることが可能になります。

# 目次
・構成について
・Lambdaの設定項目
・LambdaのCloudFormation作成
・Cognitoの設定項目
・CognitoのCloudFormation作成
・事後確認
・最後に
・参考

# 構成について
CognitoとLambdaのみで構成します。
Lambdaのコードを呼び出すのにS3を利用しますが、特に今回作成する構成に影響は出ないです。
CloudFormationの構成として、初めにLambdaを構築し、その後にCognitoを構築します。

# Lambdaの設定項目
今回はnodejs.18.xを利用し、コードについてはS3から取得してくるようにします。
IAMロールは作成しますが、Cognitoへのアクセスを許可するためのポリシーステートメントはCognitoのIDが必要なためCognitoのCl

元記事を表示

CloudWatch Alarm もしくは EventBridge から SNS に通知した時の内容を整理してみた

# CloudWatch Alarm からの通知

## SNS

次の通り、SNS トピックを用意しておきます。

![スクリーンショット 2024-02-19 11.22.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/7372ab0d-5178-963c-5f0a-a7700b0548bf.png)

## CloudWatch アラーム

CloudWatch アラームで先程作成した SNS を通知の送信先としておきます。

![スクリーンショット 2024-02-19 15.46.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/dd61c57c-afef-5c1c-f7ea-d20cea60684d.png)

![スクリーンショット 2024-02-19 15.46.41.png](https://qiita-image-store.s3.ap-northeast-1.am

元記事を表示

AWS+Lambda+API+GOでオウム返しLine Bot

# はじめに
– 「AWSとGoを勉強したい!」ということで、オウム返しをするLine Botを作成しようと思いました。
– AWSを使ったサーバーレスの基本の勉強にもなってよかったです!

# 目標
– 以下の感じでオウム返ししてくれるbotを作成します。
![oumu_kansei.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3525798/a1e1c91b-42f7-49c5-9445-6436b0eeb809.png)

# 全体の構造
– Lineにメッセージを送ると、LINEプラットフォームは設定されたWebhook URLに対してPOSTリクエストを送信する。
– API Gatewayは、このリクエストをトリガーにLambda関数を実行する。
– Lambda関数はGo言語で書かれたコードを実行する。

![line_bot_aws_oumu.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com

元記事を表示

Secrets Managerをアカウント間で同期する

# はじめに
こんにちは。1年ぶりの記事です。
サボっていたわけではありません。ただ、生きている喜びを実感していただけです。
素敵やん。

今回担当案件でどうしても実現したい事象がありました。
それはSecrets Managerの値を別アカウントのSecretsManagerに同期したいというものでした。
説明下手でわかりにくい箇所等あるかと思います。ご了承ください。
備忘録程度なので雑ですみません!権限はもっと絞れるはずです!
もっと簡単な方法あるぞ!という意見お待ちしています。

# 前提
AWSアカウントAとAWSアカウントBがあり、それぞれ異なるECサイトを運用しています。
アカウントAにAuroraがあり、そのDB情報等をjsonファイルとしてSecretsManagerに格納しています。
アカウントBはアカウントAのAuroraをクロスアカウントで利用しています。
この度、お客様よりアカウントBにもアカウントAと同期されたSecretsManagerを作成してほしいとの要望がありました。

# 課題
いやいやわざわざSecrets作成しなくても下記の方法でクロスアカウント

元記事を表示

TypeScriptで書いたLambdaを、node_modulesを含めてデプロイする

# したいこと
– TypeScriptで書いたLambdaをnode_modulesを含めてDeployしたい
– 長期使用する前提で、メンテナンスの手数やメンテ時のオペミスリスクを減らしておきたい
– CodeBuildを使用してCI/CDする前提

# 結論
– Build後 dist/内に node_modules を配置した上でzipにして、Deployする形式を採用

## 処理の流れ
### 事前準備
– Lambdaの容量制限を気にして node_modulesの容量を削減するため、処理に必要なモジュール以外は `npm install -D` で devDependencies として入れる
– 処理に必要な内、例外的にaws-sdkは LambdaのNode.jsランタイム内に含まれているので devDependencies 側としてinstallする

### CodeBuildの処理
– `npm ci` で devDependencies込みでnode_modulesを入れる
– Testの実行
– TypeScriptをBuild
– (Build環境

元記事を表示

[AWS] CloudFormation で Lambda の更新が Update complete cleanup in progress から変化しなかった

## 以下の操作をしたら発生

– Control Tower 経由でアカウントを作成(以下、その新しいアカウントでの操作)
– いくつか Lambda関数を手動で作成した
– Lambda の同時実行数をコンソールで操作しようとしたら変更ができなかった
– Lambda の Concurrent executions のクオータが 10 であった
– Lambda の Concurrent executions のクオータを 1000 にするよう申請し変更された
– その後、 CDK で SQS と Lambda のリソースを新しく作成しようとした
– Update complete cleanup in progress から30分以上変化しなかった

## 確認したこと

– CloudTrailを確認するとCloudFormationの一番最後の操作は Lambda関数の同時実行数を変更する操作だった
– 既存の他のLambda関数の同時実行数を見てみると、その数値が10だったものが899などの大きな数値になっていた(原因不明)

## 対応

– 既存の他のLambda関数の

元記事を表示

AWS CloudWatchのLiveTailがLambdaデバッグに便利

最近、でもないけど半年ほど前?に追加されたLiveTailがLambdaのデバッグにめちゃ便利だった話。

## 前置き
直接環境にアクセスできるときはTailコマンドを使ってアプリケーションのログをリアルタイムで見ることはよくあります。それのクラウド版です。
ELB配下で複数台動くマシンのログをリアルタイムで確認するのに少しだけ使っていました。
これはこれで強力です。だって特定のマシンに乗り込んじゃうとロードバランスされた後でどこにログが落ちるかわからないので。
と言ってもそこまでありがたみを感じることなくあんまり使ってませんでした。

## 環境
AWS CloudWatch Logs – LiveTail
Lambda python3.12

## Lambdaのデバッグ
初期のDebugにはprintを使ってResultに表示されるログを確認しながら作業します。
VisualStudioを使ってやるという人、ごめんなさい。ローテクでお話が進みます。
ほとんどこれで事足りるぐらいの比較的軽い処理しか乗せないので大丈夫です。

![スクリーンショット 2024-02-20 1516

元記事を表示

OTHERカテゴリの最新記事