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

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

AL2 ベースの Lambda 上で Selenium4 を使う CDK Stack

# 概要

Amazon Linux2 ベースイメージの AWS Lambda で、Seleniumを利用したWebクローリング処理をCDKでデプロイするサンプルコードを書いたので紹介します。本記事のタグの技術要素を普段から利用されている方は、特に本記事の解説を読んで頂く必要はありません。コードを覗いてみてください。

https://github.com/coleyon/amazonlinux2-py310-selenium4x-cdk-example

参考にさせて頂いたはコードこちらです。ありがとうございます。

https://github.com/umihico/docker-selenium-lambda

# 背景

APIの開発がすぐにはできない社内のWebアプリでページを表示し、内容に応じて複数ある内の一つのボタンをポチっとしたいケースがありましたので、Seleniumを利用する事にしました。

特に大規模な処理に使うわけではないのですが、将来的に Stepfunctions や APIGateway 経由で叩けるように拡張できるようにしたかったので、Lambdaで動

元記事を表示

ハッカソン参加時の備忘録 ~ 第3回:AWS LambdaとAWS RDS(MySQL)を連携させてみよう ~(1)

こんにちは。ITエンジニアのきゅうです。
第3回目は業務アプリケーションでは必ずと言っていいほど使うデータベースに接続させてみたいと思います。

そもそもAWSには様々なデータベース(以降DB)が用意されており、
特にNonSQLをAWSはプッシュしている様に思いますが、
今回は使い慣れたRDSの中でもMySQLを使用していきたいと思います。
以下、今回作成するアーキテクチャイメージになります。
![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3618971/8b73423b-f55c-73be-cd20-c430198e107f.png)

# VPCの作成
“`
使用するサービス:VPC
使用する機能:VPC
“`
### 1.VPCの作成
RDSはVPCを設定する必要があるので、事前にVPCを作成しておきます。
AWSにログインしたら、まずは検索ボックスより「VPC」と入力し、開かれた『VPC』のダッシュボードより「VPCを作成」ボタンをクリックします。

### 2.VPCの設定をす

元記事を表示

Amplifyで作ったAppSyncへLambdaからmutateするとSubscribeに失敗する

# 事象
掲題のとおり。
さらにWebSocketをデバッグツールで見ると、4エラーがサブスクリプションイベントとして受信されていた。
“`json
[
{
“message”: “Cannot return null for non-nullable type: ‘AWSDateTime’ within parent ‘Hoge’ (/onCreateHoge/createdAt)”,
“path”: [
“onCreateHoge”,
“createdAt”
]
},
{
“message”: “Cannot return null for non-nullable type: ‘AWSDateTime’ within parent ‘Hoge’ (/onCreateHoge/updatedAt)”,
“path”: [
“onCreateHoge”,
“updatedAt”
]
},
{
“message”: “Cannot return null for

元記事を表示

boto3でAWS Batchジョブ定義の最新リビジョンを取得するときにハマった

# はじめに
Lambda経由でBatchを実行しようとしたら古いリビジョンのジョブ定義が呼ばれてしまった。
困ったのは**同条件でも最新リビジョンが取れてしまうことがあった**という点。
同じコードを実行しているのに挙動が変わるので、原因がコードにあるのか、それとも他にあるのか、という段階から当たりをつけていくことになり、迷走しました。

# 目次
1. [原因](#原因)
1. [コード](#コード)
1. [解決方法](#解決方法)
1. [最大100件の制限を忘れない](#最大100件の制限を忘れない)


# 原因

原因はコードにありました。
“`python
client.describe_job_definitions()
“`
このdescribe_job_definitions()は
アカウントの同一リージョンに存在するすべてのジョブ定義から最大 100 件のジョブ定義のみを取得するメソッドでした。
一方アカウントに存在するジョブは200件を超えていました。
同じコードでも最新リビジョンが取れてしまうことがあったのは最大100

元記事を表示

サクっとchaliceでlambdaをデプロイするまで

# はじめに
サブシステムの開発などでスピード感をもって **lambda** をリリースしたい時がよくあります。
割と「あれ、どうやって環境構築したっけ?」ってなることが多いので、まとめることにしました。

**sam**でもいいですし、何を使ってデプロイするかはその組織や案件によって様々考えられると思いますが、私の場合は **chalice** でデプロイすることが多いので、今回は **chalice** でデプロイするまでの流れを記述します。

# 技術
– python 3.12.1
– chalice 1.30.0

# 前提
AWSアカウントを所有していること

# 環境構築
1\. direnvインストール
goコンパイラが入っている場合
“`bash
~/ $ git clone https://github.com/direnv/direnv
~/ $ cd direnv
direnv $ sudo make install
“`

macの場合
“`zsh
~/ $ brew install direnv
~/ $ brew install openssl r

元記事を表示

【AWS】LambdaからSSM Parameter Storeの値を取得する (Lambda Extensions)

## 概要
Lambda Extensionsを使用することで、LambdaからParameter Storeの値を取得できるので、備忘録として残します。

## 権限
LambdaからParameter Storeの値を取得するためには、Lambdaに適切な実行ロールを設定する必要があります。以下は必要な権限です。

– ssm:GetParameter

– kms:Decrypt

kms:Decryptは、KMS (Key Management Service) でSecureStringとして暗号化されたパラメータを復号化するために必要です。

KMSを使用して暗号化していない場合(String)、ssm:GetParameterだけで十分です。

### ポリシー設定の例
“` json
{
“Version”: “2012-10-17”,
“Statement”: [
{
“Sid”: “getParameterSSM”,
“Effect”: “Allow”,
“Ac

元記事を表示

Python3.9系でSelenium4を使ったスクレイピングアプリをlambdaで動かそうと試みたが、その結果は・・・

## はじめに
定期的な情報収集をしたかったため、スクレイピングのアプリを作ったのだが、今回はクラウド上(AWS の lambda)への移植を試みた。
結局 Selenium の起動が上手くいかず完成できていないのだが、これまでの備忘としてメモを残しておく。

## 使ったサービス & 主要ソフト
– s3
– lambda (lambda layer も利用)
– Cloud9 (lambda layer に登録するための、パッケージやドライバーの取得に使用)

– pytho3.9系
– seleium 4.16.0

# メモ内容

## ⓪ まずは前提
今回は `Selenium` を使うアプリだったので、ブラウザ挙動を確認する必要があった。
そのため、開発はローカルPC(Python3.9系)で行っている。
ちゃんと問題なく動くコードである事ができた上で、AWS上のサービスで作り直しする方法を検討(コードは基本的にそのまま移行の予定)

## ① 必要パッケージやドライバーの準備
Python自体のバージョンについては、lambdaのランタイムの設定を行うときに適切なバー

元記事を表示

[Lambda] アカウント内の versioned artifact と layer の総量は75GB以下に保とう

アカウント内の Lambda の artifact version と layer の総量は75GB以下に保つ必要がある。

## 理由

> The Lambda service stores your function code in an internal S3 bucket that’s private to your account. Each AWS account is allocated 75 GB of storage in each Region. Code storage includes the total storage used by both Lambda functions and layers.
> **If you reach the quota, you receive a CodeStorageExceededException when you attempt to deploy new functions.**

しかしながら、これはソフトリミット。上限を上げることは可能。😅

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

元記事を表示

NestJS on AWS Lambda via API Gateway で ZIP バイナリを返却 

### はじめに
NestJSで実装したAPIを通じてZIPファイルのダウンロード機能を実装した後、Lamda上にデプロイし、API Gateway経由でそのファイルを適切にダウンロード可能にする方法について記述します。

### APIの実装

– NestJSのAPIをlambdaで動かすために [serverless-express](https://github.com/CodeGenieApp/serverless-express)を利用

以下のようにbootstrapを実装し、API Gateway経由でLambdaからZIPをダウンロードできるようにします。

“`
async function bootstrap(): Promise {
const app = await NestFactory.create(AppModule);
 // …
await app.init();
const expressApp = app.getHttpAdapter().getInstance();
return serverlessEx

元記事を表示

CloudWatchアラームの状態変化でLambdaアクションが実行できるようになりました

# ■概要

CloudWatchアラームのステータス変更が起きた際の地味アプデを見かけたので書いてみます。
アラームの状態が変移した際にAWS Lambdaを指定できるというものです。

Amazon CloudWatch alarms adds AWS Lambda as an alarm state change action
https://aws.amazon.com/about-aws/whats-new/2023/12/amazon-cloudwatch-alarms-lambda-change-action/

# ■CloudWatchアラームのアクションについて

cloudWatchアラームを設定する際、閾値に引っかかった時の動作を決定できます。
アクションとして、例えばよく使いそうなものだと、前もってSNSトピックにメールアドレスのリストを設定していて、そのリストにメールを送付する等です。

# ■コンソールからアクションを確認する

実際にコンソールから見てみましょう。
今回は現在設定済みのCPUアラートを編集する形で調べてみます。
アラーム編集の画面にてア

元記事を表示

Lambdaの実行速度を各言語で計測してみた

## はじめに
Javaはコールドスタート時の実行速度が遅いと言うのはよく見聞きしていましたが実際に計測したことはなかったのでやってみました。

## 環境
計測に使うサンプルプログラムを作成するのにAWS SAMを使用しています。
* Windows 10 Pro
* AWS CLI:2.6.2
* AWS SAM CLI:1.105.0

## 準備
計測は次の言語で行いました。
| 言語 | ランタイム | メモリ | コードサイズ | リージョン |
|:-:|:-:|:-:|:-:|:-:|
| Go | provided.al2023 | 128MB | 4.6 MB | ap-northeast-1 |
| Java | java21 | 128MB | 854.6 KB | ap-northeast-1 |
| JavaScript | nodejs20.x | 128MB | 1.3 KB | ap-northeast-1 |
| Python | python3.10 | 128MB | 521.1 KB | ap-northeast-1 |

計測に使用するサン

元記事を表示

【AWS】Lambdaで署名付きURLを作成する実装例【署名付きURL】

## はじめに
以前APIGatewayとLambdaの連携についての記事を投稿しましたが、この構成の使用例として、Lambda関数でのS3ファイルの署名付きURLを生成して返す実装について投稿します。

[APIGateWayとLambdaの連携についての記事]
https://qiita.com/Nana_777/items/0ce03f59045aa04401bc

## 署名付きURLを利用するメリット
### 一時的なアクセス制御
署名付きURLは有効期限を持ち、期限が切れるとアクセスが拒否されます。これにより、一時的にアクセスが必要な場合に、不要にアクセス権を与え続けることを避けることができます。

### 簡単なアクセス管理
署名付きURLを使用することで、AWS Identity and Access Management (IAM) ポリシーの設定が簡略化されます。特定のS3オブジェクトに対するアクセス許可を一時的に発行でき、必要がなくなれば署名付きURLを無効にできます。

### 安全なデータ転送
署名付きURLはHTTPSプロトコルを使用して生成され、データの転

元記事を表示

AWS Lambda

AWS Lambda では、Amazon EventBridgeによってイベントスケジュールに沿ったLambda関数を設定する。

デフォルトのタイムアウトは3秒で、AWS Lambdaのリクエストあたりの最大実行時間は900秒である。

外部の画像識別APIを利用して構成され、処理するデータ容量も大きくないアプリケーションを構築する場合は、画像識別APIを呼び出して解析を実行するLambda関数を作成することで、EC2インスタンスなどのサーバーを用いることなく、コスト効率が良いアプリケーションを構築することが可能である。

## IAMロール

他のAWSリソースと連携するLambda関数を作成する際は、IAMによる実行ロールをLambda関数に設定してアクセス権限を付与することが必要である。

## S3との組み合わせ
Amazon S3 イベント通知機能を使用して、S3 バケットで特定のイベントが発生したときに通知を受け取ることができる。S3イベント通知からLambda を起動して、ファイルを処理することができる。Amazon S3 は、オブジェクトを作成または削除すると

元記事を表示

Rust・AxumのDockerイメージをAWS Lambdaにサクッとデプロイする(Lambda Web Adapter)

先日こんな記事を書きました!

https://qiita.com/nokonoko_1203/items/57fbbdddbf7975a1d803

Rustの「Axum」というWebAPI用のフレームワークを利用して、レイヤードアーキテクチャでTodoアプリを作る記事になります。

その過程でちょっとこだわってDockerfileを作成したので、せっかくなのでこれをAWSのLambdaを使ってサクッとデプロイしてみようと思います!

Lambda Web Adapterという比較的最近リリースされた機能を利用すると、Dockerイメージをほんの数分でデプロイできるので、今回はこちらを利用していきます!

– 参考記事
– [Lambda Web Adapter でウェブアプリを (ほぼ) そのままサーバーレス化する](https://aws.amazon.com/jp/builders-flash/202301/lambda-web-adapter/)

## Dockerfileを作成

僕の書いた記事でも紹介していますが、今回はこちらのリポジトリを使っていきます。

h

元記事を表示

AWS SAMを使ってローカルでLambdaを実装、AWSにデプロイしてみた

## 概要
AWS SAMを使用することでサーバーレスアプリケーションを簡単に実装〜デプロイまですることができたので共有したいと思います。

## 対象者
– AWS SAMに興味がある方
– サーバーレスアプリケーションに興味がある方
– Lambda関数を簡単に実装〜デプロイしたい方

## 環境
– M1 Mac
– VScode
– Docker Desktop

## 目次
– 前提
– やってみた
– 最後に

## 前提
– awsアカウントの発行
– aws cliをインストール
– aws configureでアクセスキーとシークレットキーを設定

## やってみた
簡単なLambda関数を作成し、`sam build`して`sam deploy`していきます。

### AWS SAMの準備
SAMをインストールしていきます

[AWS SAM CLI のインストール – AWS Serverless Application Model ](https://docs.aws.amazon.com/ja_jp/serverless-application-

元記事を表示

[Lambda][FCM]LambdaからFlutterアプリに向けたPush通知を実行する

FCM経由でFlutterアプリにPush通知を送るにあたり、Lambda(それもPython)を使った記事が少ないと感じたので投稿します。

## はじめに

FCMコンソール側の設定・Flutterアプリ側の実装は世の中にHowToが溢れているので割愛します。

https://firebase.google.com/docs/cloud-messaging?hl=ja

https://firebase.google.com/docs/cloud-messaging/flutter/client?hl=ja

LambdaでFirebase Admin SDKを使用した、Push通知送信リクエスト実行方法のみ記載したいと思います。
なんでわざわざLambdaなのかと言われると、単にAWSで他のサービスを利用しているため選択肢に挙がったまでです。

![スクリーンショット 2024-01-05 16.55.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3661825/d7be1d85-b85

元記事を表示

EventBridge スケジュールでLambdaを定期実行する

# 目次
1. はじめに
1. CloudWatch ロググループ作成
1. Lambdaを用意する
1. ポリシー、ロールの作成
1. Lambdaの作成
1. EventBridge スケジュールの設定
1. ポリシー、ロールの作成
1. スケジュールの作成
1. 動作確認
1. 最後に

# はじめに
最近、知識をアウトプットできていなかったので、今年からちょこちょこやっていきます!
手始めに簡単なところからということで、最近触れているAWS関連の記事です。
ほかに同じような内容の記事があるかもしれませんが、できるだけ差別化できるように努力しますので、ご容赦ください。

# CloudWatch ロググループ作成
ではでは、早速やっていきましょう。
まずは、Lambdaの動作確認のために、CloudWatch ロググループを作成していきます。
設定は以下です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/209767/92d1aafe-7daf

元記事を表示

Appsheet API を Lambda で送信する方法

## はじめに

AppSheetは、ユーザーがコーディング知識なしでカスタムモバイルアプリを作成できるプラットフォームです。

AppSheet APIを使ってAWS Lambda関数からデータを操作する方法について解説します。
この記事では、AppSheetのAPIを使って、AWS Lambda経由でデータを操作する方法に焦点を当てています。
API Keyの取得方法からLambda関数の作成、APIの利用方法までを順を追って説明します。

## もくじ

1. [AppSheet API Key を取得する](#AppSheet-API-Key-を取得する)
2. [Lambda](#Lambda)
– [Lambda Layer を作成する](#Lambda-Layer-を作成する)
– [Lambda 関数を作成する](#Lambda-関数を作成する)
3. [参考](#参考)

## AppSheet API Key を取得する

AppSheet APIを使うには、API Keyを取得する必要があります。
以下の手順でAPI Keyを取得してください。

元記事を表示

S3 から Google Drive へ Lambda を使ってファイルアップロード

# はじめに

この記事では、AWSのLambdaを使用してAmazon S3からGoogle Driveにファイルをアップロードする方法を紹介します。
Google Drive APIを活用することで、プログラム的にドライブ内のファイル操作が可能になります。

# S3 から Google Drive へ Lambda を使ってファイルアップロード

## Google プロジェクトの作成

画面を見ながら操作したい方は、[こちら](https://qiita.com/w2or3w/items/b66a4a8e45e6001a9c46)を参考して作業を進めて下さい。

1. **Google Drive API を有効にする**
– Google Cloud Platformで新しいプロジェクトを作成し、Google Drive APIを有効にします。

2. **Google Cloud でサービスアカウントを作成する**
– Google Cloud Platformでサービスアカウントを作成し、必要な権限を付与します。

3. **サービスアカウントの秘密鍵を作

元記事を表示

【個人開発】草生えてないと怒ってくれるBOTを作った

明けましておめでとうございます。

新年早々少し個人で開発したのでそのアウトプットとして投稿させていただきます。

全てのツールを無料枠で抑えて作ることができるので、個人で開発してデプロイまでしてみたいと思っている人に参考になれば良いなと思います。

## 作ったもの

草(commit)がされていない場合にはその日の夕方に通知を送ってくれるLineのBOTを作りました。

**Githubリンク**

https://github.com/yuta-2001/go-no-commit-notify

## 作成動機

– 新たな年が始まって、より成長できる年にしたく継続を促せるようなものを作りたかった。
– これまで触れていないものを使って何か作ろう、自分の技術の幅を広げようと思ったから。(Goも含めて全て開発で使ったことはなかったです。)

## 使用技術・構成

– AWS Event Bridge (cron)
– AWS Lambda
– Line Notify
– Github GraphQL
– Golang

(コンテナ化(Docker)は図に乗っていますが、現在進行

元記事を表示

OTHERカテゴリの最新記事