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

Lambda関連のことを調べてみた2022年05月22日
目次

【公式ハンズオン和訳】Node.js+PrismaをServerless Frameworkを使用してAWS Lambdaにデプロイする

:::note
この記事は、Prisma公式の「Deploying to AWS Lambda」の和訳(意訳)です。
翻訳元とライセンスについてはページ下部に記載しています。
:::

このハンズオンでは、Serverless Frameworkを使用して、AWS LambdaにサーバレスなNode.jsのREST APIをデプロイする方法をお伝えします。

AWS LambdaはAWSのサービスの一つで、これを使うとサーバ管理不要のサーバレス環境でコードを実行できます。一方で、REST APIをLambdaにデプロイするためには、S3でファイルをホスティングしたり、API GatewayでAPIをHTTPで公開する必要もあります。

Serverless Frameworkを使えば、CLIでワークフローを自動化し、AWSリソースのプロビジョニングも行うことができます。

今回作成するREST APIでは、Prisma Clientを使用してデータベースのレコードの取得・作成・削除を行います。具体的には、それぞれの関数はRESTリソースのエンドポイントを表し、Prisma Client

元記事を表示

Lambdaで絶対にエラーならないレイヤーの作成方法

# 背景
Lambda関数でS3のファイルをSFTPサーバへ転送したいです。調べたところ、paramikoライブラリーの利用を決めたより、Lambdaのparamikoレイヤーを作成する必要があります。

# 現象
requestsライブラリーなどのレイヤーを作成した方法のように、「`pip install paramiko .`」コマンドを使って、ライブラリーをインストールして、Zipファイルを圧縮して、レイヤーを作成しても、関数でparamikoを使う時にエラーになります。
原因を推測すると、paramiko自分自身の依頼が複雑で依頼しているライブラリーはLambdaの後ろに存在するEC2サーバ上にはインストールしてないかと思っていますね。なせならば、コマンドを実行する端末環境はLambda後ろのEC2サーバと違うでしょう。

# 解決方法

### 1、ローカルにDocker をインストールする

[Docker Download and install](https://docs.docker.com/desktop/#download-and-install)を参照してくださ

元記事を表示

Lambda から直接ステータスコードを返す

# 問題
こんな感じで ステータスコード 400 を return する Lambda を書くとする。

“`jsx
exports.handler = async (event, context) => {
let response = {
statusCode: ‘400’,
body: JSON.stringify({ error: ‘Bad Request’ }),
};

return response;
};
“`

しかし、API Gateway を介してこの Lambda にアクセスしてみると、なぜかステータスコード 200 が返ってくる。
これは Lambda のレスポンスが API Gateway によりラッピングされてしまうことが原因。
なので、Lambda のレスポンス内容をもとにマッピングテンプレートを利用し API Gateway 側でレスポンスコードを指定する必要があった。
でも面倒なので、Lambda で直接ステータスコードを設定したい。

# 対処
`callback` にレスポンス内容を渡してあげれば中身が

元記事を表示

ECRへのPUSHをトリガーにECSのローリングアップデートを行う

# ■Lambda

ローリングアップデートを行うための処理を作成

### ▼Lamdaを作成する際の選択値

| 項目 | 値 |
| — | — |
| name | test ※仮でtestとします |
| 関数の作成 | 一から作成 |
| ランタイム | Node.js 16.x |

### ▼コード

:::note alert
Node.js での現時点でのSDKサポートは v2 になります
※ 最新版を使用したい場合は自身でデプロイを行う必要があります

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

“`index.js
const aws = require(‘aws-sdk’)

// async は付けないでください
exports.handler = (event, context) => {
const ecs = new aws.ECS({region: event.region});

// 環境変数は「Lambda」の「設定」

元記事を表示

英語の長文がスラスラ読めるようになる「トレーニングアプリ」を作ってみた。。。

# ■まえがき
皆さんはスラッシュリーディングとサイトトランスレーションという言葉を聞いたことがありますか?
私はスラッシュリーディングは知っていたのですが、先日、サイトトランスレーションという長文読解の速読トレーニング法を知り、AWSやプログラムの勉強も兼ねてWEBアプリ化してみました。↓
[Slash Reading & Sight Translation](https://16sw92fztg.execute-api.ap-northeast-1.amazonaws.com/Prod/input/)

しかし、出来上がった画面を見るとデザイン力がなさすぎることに気づかされる。。。
(´;ω;`)

## 用語説明
・サイトトランスレーション(Sight Translation)
 英文を「チャンク」と呼ばれる意味のかたまりごとに区切り、前から訳していくトレーニングの方法([引用元](https://englishhub.jp/method-2/sight-translation#:~:text=%E3%82%B5%E3%82%A4%E3%83%88%E3%83%88%E3%

元記事を表示

AWS Lambda における Python 3.6 のサポート終了

# 課題
皆さんにもこんな通知が届きましたよね。
>「AWS Lambda における Python 3.6 のサポート終了」

今回、ご丁寧に一覧表示する為のコマンドラインまでプレゼントされています。
ただ、クラウドエンジニアな私達は世界中に駆け回っているわけなので、一定のリージョンを調べるだけではダメなのです。

ということで今回は単にリージョン全てをチェックする sh をどうぞ。

# 解決
## AWS公式
>次のコマンドは、AWS CLI [3] を使用して、特定のリージョン内の Python 3.6 を使用しているすべての関数を一覧表示する方法を示しています。お客様のアカウント内のこうした関数すべてを確認するには、リージョンごとに次のコマンドを繰り返してください。

“`
aws lambda list-functions –function-version ALL –region us-east-1 –output text –query “Functions[?Runtime==’python3.6′].FunctionArn”
“`

## カスタマイズ版

元記事を表示

【python】S3上のcsvファイルから、dynamoDBのするAWS lambdaのサンプルコード

こちらでスプレッドシートをcsvに変換してS3に保存したので、csvからdynamoDBのテーブルを作成しました。

https://qiita.com/at_sushi/items/8b71927e72ac2a7465d5

サンプルコード

“`python
import os
import boto3
import pandas as pd

s3_client = boto3.client(“s3”)
dynamodb = boto3.resource(“dynamodb”)
table = dynamodb.Table(“任意のテーブル名”)

def lambda_handler(event, context):
bucket_name = os.environ[‘bucket_name’]
prefix = os.environ[‘prefix’]

s3 = boto3.client(‘s3’)
obj = s3.get_object(Bucket=bucket_name, Key=prefix)
df = pd.read

元記事を表示

Amazon EventBridge の 使い方

Cloudwatch alertを使って、[EC2のオートリカバリ](https://qiita.com/kazwata/items/feea966dbb4b76eedc37)や、SNS -> lambdaを介してSlack通知など、便利に使っていたのですが、連携できるサービスが限られているため、EventBridgeを使ってみます。

# EventBridgeとは
EventBridgeは、AWS外のSaaSやAWSサービスで発生した様々なEventを受け取って、LambdaやStep Functions などの指定したターゲットにEventを連携することができるサーバレスのマネージドサービスです。EventBridgeという名称そのままな感じですが、Eventソースとターゲットの自由度がかなり高いので、アイデア次第で色々できそうな感があります。

# EventBridgeの設定方法
「Cloudwatch alertのイベントを受け取って、lambdaに連携する」というEventBridgeを作成してみます。まずは、Amazon EventBridge > ルール > ルールを

元記事を表示

【Serverless Framework】S3アップロードしたらLambda実行できるようにする。

# この記事のゴール
・Serverless Frameworkの基本的な使い方を学ぶ。
・ESLint × PrettierでTypeScriptのソースコードを自動整形できるようにする。
・S3アップロードイベントで実行されるLambda関数を作成してみる。
  → 実用性がありそう&応用が効きそうなケース

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653955/4885ce4b-1d1e-a113-691f-91daed51734d.png)

# もくじ
o1. Serverless Frameworkプロジェクト基盤作成
o2. S3アップロード時にLambdaが発火するようにする。
o3. CSVファイル読込
o4. mysqlインポート

https://github.com/daisuketakakuwa/serverless-practice

# o1. Serverless Frameworkプロジェクト基盤作成

## プロジェクトフォルダ作成&`npm i

元記事を表示

AWS Lambda(EC2のシェル)を毎月営業日◯日に実行したい

### AWSのカレンダー機能を使って、毎月の営業日◯日目にEC2のシェルを実行する(Lambda関数を実行する)

AWS EC2上に構築したHulftの集信コマンド(utlrecv)を「月初〇〇営業日」に実行したい
…といった問題に当たりました。

以下の機能を使って実装しました。
・AWS Systems Manager(Change Calendar)機能
 → (シェル や Lambda)を実行した日時を管理
・Amazon EventBridge機能
 → Calenderの状態を確認し、条件を満たしたら、ssm経由でLambda関数を実行する
・AWS Systems Manager(ssm)機能
 → Lambdaから(EC2のシェル)をキックする

(※きれいに作る場合、Calenderに祝日や土日を設定して、その日が営業何日目かを判断したりする必要があると思いますが…今回は、実行する日時のみをCalenderに登録し、定期的にメンテナンスする前提で作成しました)

### ①カレンダーの作成
まずはカレンダーを作成します。
![image.png](https:/

元記事を表示

Slack AppでリクエストURLにLambda(Node.js)の関数URLを指定してYour URL didn’t respond with the value of the challenge parameterが出た時の対応

## はじめに

Slackアプリの Event Subscriptions -> Enable Events -> Request URLでURL設定時にタイトルのエラーが出た場合の対応方法を整理します。

## エラー内容

“`
Your URL didn’t respond with the value of the challenge parameter.
“`

– 内容としては`challenge` パラメータを指定してレスポンスを返していない、という意味です。

## 結論

Lambda(Node.js)の場合、以下のようなコードを書けばOKです。
`challenge` のみを含むレスポンスを返却するのがポイントです。

“`index.js
exports.handler = async (event) => {
// TODO implement
console.log(`event=${JSON.stringify(event)}`);
const event_body_json = JSON.parse(event.body)

元記事を表示

【Rails 6】ActiveJob + S3 + Lambda + Slack で実現する非同期 CSV ダウンロード

## 概要

– 大容量の CSV を出力をしようとした際、レスポンスが返ってくるまでの待ち時間が苦痛
– 最悪、タイムアウトエラーになりかねない
– とりあえずレスポンスだけ先に返しておき、実際の CSV 出力処理はバックグラウンドで非同期処理するみたいな事がしたい
– ActiveJob + S3 + Lambda + Slack を使う事でそれが実現できそう

軽めの CSV 出力であれば何ら問題無いのですが、サービスの運用が長続きしてたくさんのデータが蓄積すると、それらを一気に出力するのはなかなか骨が折れたりします。

実際、自分が担当しているサービスでも先日ついに処理に時間がかかりすぎてタイムアウトエラーになるといった事象が発生しました。

もちろん、 SQL の見直しだったり根本的な部分においては他にも色々やるべき事はあるかもしれませんが、とりあえず手っ取り早く対応するために非同期での CSV ダウンロードを実装してみました。

### 同期処理の場合

![同期.gif](https://qiita-image-store.s3.ap-northeast

元記事を表示

ClickUpのイベントをLambdaで取得してみた

## はじめに
業務でClickUpを使用していますが、タスクのコメントが追加された際にSlackに通知できるようにしたいと思いました。
まずは、Lambdaでイベントを受け取る方法についてまとめました。

## 準備
### Lambda
– 関数を作成する
– 今回は簡易性のためにAPI Gatewayは使わずに関数URLを使う

### ClickUp

– 以下に記載の順序でAccessトークンを取得する

> Finding your token:
> Navigate to your personal Settings
> Click Apps in the left sidebar
> Click Generate to create your API token
> Click Copy to copy the key to your clipboard

https://docs.clickup.com/en/articles/1367130-getting-started-with-the-clickup-api

– 以下コマンドでWebhookを作

元記事を表示

stepfunctionsでのDynamoDBを使用した多重実行制御

# はじめに
AWSのEventBridgeを使用して定期実行などを行う際、最低1回の実行が保証されている([参照](https://docs.aws.amazon.com/ja_jp/eventbridge/latest/userguide/eb-troubleshooting.html))。
しかし、処理によっては多重実行が望まれないものもある。
そこで今回は、DynamoDBを用いて、stepfunctionsの多重実行を制御する方法を考えた。

# 実装
今回は、日次で1回のみ行う処理をイメージした。ステートマシンの構造は以下の通りである。

– DynamoDBに実行日を表す値(yyyymmdd)を入れる
– 上の処理が正常に動作したらメインの処理が走る、エラーが起こったらステートマシンを終了する

## DynamoDBのテーブル作成
今回はtestというテーブル名で、パーティションキーをyyyymmddとするテーブルを作成した。

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

元記事を表示

GoでLambda Function URLs ハンズオン

# はじめに
この記事はGoでLambda Function URLsをハンズオンしてみる内容となっています。
筆者がLambdaでGoを扱うこと自体が初めてだったため備忘録として簡単に環境構築からデプロイまでの手順も載せています。

# 環境
MacBook Air M1

# ハンズオン

ランタイム Go1.xを選択後、
Lambdaの関数の作成画面で詳細設定を開き “関数URLを有効化”をチェックします。
(認証はパブリックな利用を想定してNONEを設定しました。)
![function_urls.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1391445/8b50af02-81e4-6645-cfa6-748df1ee3db9.png)

ランタイム設定のハンドラが`hello`となっているので適当な名前に変更します。
![runtime_setting.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1391

元記事を表示

【個人開発】今スーパーで安い食材と関連レシピをラインで探せるボットの友達が1000人超えたのでログを晒していく

以前「[レシピ作家のレシピを検索できるトイアプリがちょいバズったので爆速でLINE Botを作った話](https://qiita.com/kazukinagata/items/e40dd5ecc143532329e8)」という記事で紹介させていただいたラインボットの友達が1,000人を超えていたので、ユーザーの利用状況をログから分析して晒していきます。

![screenshot.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1201783/db8c51e1-3700-efc1-1a16-49351d2fa767.png)

※ラインボットやスクレイピングなどの技術的な話は前記事に譲って、本記事では技術については触れません。

## どんなボットなのか

1. イオン、イトーヨーカ堂、西友3社のネットスーパーから、今安くなってる食材を検索できる
2. 食材名から、リュウジさんや山本ゆりさんなど著名な料理研究家さんの関連レシピを探せる

というのが主な機能です。

Windows環境でゼロからRuby + Lambda + API GatewayでAPI作って公開するまでの記事

# 概要
この記事では、Windows環境でゼロからRubyの開発環境を作って、ローカルで作成したコードをLambdaにアップし、API Gatewayを通して公開するまでの手順を記載します。

# 対象
・細かいことは良いから、とりあえずRubyでAPI作ってWeb公開したい人
・Lambdaとやらを使ってとりあえず何か動くものを作りたいが、何から初めて良いか分からない人

# 環境
– windows10
– Ruby 2.7

# 目次
– 開発環境を作る
– Lambda関数を作る
– ローカルのコードをLambdaにデプロイする
– API GatewayでWeb公開する

# 開発環境を作る
まずはRubyの開発環境を作ります。

### Rubyのインストール
以下からRubyをインストールします。
■Ruby
https://rubyinstaller.org/downloads/

RubyはRuby+Devkitのver 2.7をDLして下さい
ver 2.7なのは、Lambda上で動くRubyが2.7なので環境を合わせるためです。
+Devkit版なのは、VSC

元記事を表示

【EC2】LambdaでEC2インスタンスを自動起動・停止

## EC2インスタンスを自動停止させたい
社内利用用のEC2インスタンスなど夜間や日中だけは停止させておきたいEC2インスタンスがあり、Lambdaスクリプトで実現させました

## EC2インスタンのタグ付け
EC2インスタンスにタグを付けて、そのタグを付けたインスタンスを自動で停止させるようにします。
タグはなんでもいいのですが
keyにAutoStop
valueにtrue
といれておきます

## Lambdaスクリプト
前提としてLambda関数にはEC2のstart・stopとdescribeの権限をIAMロールに付与する必要があります。

“`python
import boto3
region = ‘ap-northeast-1’
ec2 = boto3.client(‘ec2’, region_name=region)

def lambda_handler(event, context):

custom_filter = [{
‘Name’:’AutoStop’,
‘Values’: [‘true’]}]

元記事を表示

[Python] DynamoDBをLambdaから使ってみる

# はじめに

Boto3の公式ドキュメントを参考にしてLambdaからPythonを使ってDynamoDBを読み書きしてみます。

https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb.html

https://boto3.amazonaws.com/v1/documentation/api/latest/guide/dynamodb.html

## DynamoDBでテーブルの作成

テーブル名とパーティションキーだけ指定して作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83224/5777a24b-542f-2bac-8ac7-f0f5a7231963.png)

## Lambdaで権限設定

実行ロールをクリックして編集します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.a

元記事を表示

API Gateway+LambdaのAPI実行時にMissing Authentication Tokenとなった場合の確認観点

## はじめに
API Gateway + LambdaでAPIを作成して、アクセスした際にタイトルのエラーが発生したので、その際の確認観点を記載します。

## エラー内容
– ステータスコード: 403
– エラーメッセージ: Missing Authentication Token

## 試したこと
### Missing Authentication Tokenで検索
– 認証情報周りは特に問題なさそうでした。

### 403のステータスコードの意味を検索
ウィキペディアによると、以下と書いてあります。

> ページが存在するものの、特定のアクセス者にページを表示する権限が付与されず、アクセスが拒否されたことを示すもの。また、サイトの制作者側の設計ミスによる障害やサイトが非常に混雑している時、URLが間違っている場合にも表示されることがある。

Ref:https://ja.wikipedia.org/wiki/HTTP_403

> URLが間違っている場合にも表示されることがある。

とあったので、この観点で確認してみました。

## 原因
– 上記の通り、APIのエン

元記事を表示

OTHERカテゴリの最新記事