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

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

AWS CDKとCDK Pipelinesでつくるサーバレスアプリケーション

# この記事について
AWS CDKv2でCDK PipelinesがGAになって大分たちますが、非常にラクにパイプラインが作成できて便利に感じました。
特に、サーバレスアプリケーションの場合は、Lambda関数を修正したのですぐに配備したい、というときに便利ですね。
この記事では、AWS CDKとCDK Pipelinesを用いて、以下のことを試してみます。

1. AWS CDKを利用してAPI Gateway+Lambdaでサーバレスアプリケーションを配備します。
合わせて「開発面」「ステージング面」・・・なども意識して、1つのコードから複数面の作成を行います。
1. CDK Pipelinesを用いて、上記スタックをパイプライン化してみます。
1. CDK Pipelinesのself-mutatingを試してみます。

すでにCDKでスタック作成している方も、これを参考にCDK Pipelinesにトライしてもらえると幸いです。

# この記事の対象者
– AWS CDKに興味がある方
– CDK Pipelinesに興味がある方

# CDK Pipelines

元記事を表示

画像サーバーをLambda移管した時のお話

# 0.はじめに

無尽蔵にアクセスが考えられる画像に対して、まずnginxへアクセスを行い、キャッシュを挟んだ上でリバースプロキシでApacheへアクセスし、S3から画像を取得し、指定サイズにリサイズを行った上で返すアプリケーションを運用していました。

サーバーへのアクセス数は月間で数億あったため、水平スケールを拡大して数年間動いていました。

ただ、ある日突然のアクセススパイクが発生し、サーバーが応答しない事態が発生しました。

応急的にサーバーの水平スケールを拡大して対応しましたが、そもそもこれアプリケーション挟む必要あるのか…と考えてサーバーレスサービスへの移管を検討しました。

旧環境はオンプレ環境だったため、S3へのアクセスも物理的コストが高かったため、Lambdaを採用して環境を移管する事にしました。

# 1.Lambda環境の構築

以前はPHPでAWS SDKでS3から画像を取得⇒imagemagickでリサイズを行っていましたが、Python3.9を採用したため、PILとbotoで画像処理とS3からの画像取得を行いました。

**※パスはお使いのS3に最適化

元記事を表示

[AWS]SAMでTypeScriptがサポートされたので5分でAPIを作成する

1年前にはTypeScriptサポートされていなかったので無理矢理使っていました。
Template.yamlのCodeUriをTypeScriptのビルド先のJavaScriptを指定するって感じでね。。他いろいろ工夫していました。

久々にSAMを触ってみるとネイティブサポートされていたのでサクッと立ち上げてみます。

以下参考です(てかまんまかも)。(最後にVSCode DevContainer含めたGit公開するので許してね)

https://dev.classmethod.jp/articles/typescript-native-support-in-the-aws-sam-cli/

https://aws.amazon.com/jp/about-aws/whats-new/2022/02/typescript-native-support-aws-serverless-application-model-cli-esbuild-public-preview/

# 環境

* Ubuntu-22.04 (WSL2)
* Docker(20.10.21)
* nodej

元記事を表示

AmplifyでAWS Serverless Expressを使用してCRUD処理を行う

[ACCESS Advent Calendar 2022](https://qiita.com/advent-calendar/2022/access) の6日目になります。

この記事は、幅広いAWSサービスを活用できるプラットフォームのAWS Amplifyで、LambdaをExpressで構築できる`AWS Serverless Express` を使用して、DynamoDBと接続してCRUD処理を行う書き方についてとなります。
参考となった記事は「[Create a REST API integrated with Amazon DynamoDB using AWS Amplify and Vue](https://gerard-sans.medium.com/create-a-rest-api-integrated-with-amazon-dynamodb-using-aws-amplify-and-vue-5be746e43c22)」となります。ほぼその記事通りの実装となります。

## 環境構築

LambdaでCRUD処理を書く前に環境を構築します。

### 各pac

元記事を表示

Serverless Frameworkを使ってLambda + API Gateway + DynamoDBの環境を構築してみる

## 目次
1. Serverlessのインストール
2. サービスの作成
3. サービスをデプロイしてみる
4. API Gatewayの設定
5. DynamoDBの設定
6. まとめ

## 1. Serverless Frameworkのインストール
Serverlessはnpmのパッケージとして公開されているため、ターミナルより以下を打つとグローバルにインストールされる。
“`shell
$ npm install -g serverless
“`

正しくインストールできているかserverless –versionと打って以下の表示になっているかどうかで確認できる。
“`shell
$ serverless –version
Framework Core: 2.72.3 (local)
Plugin: 5.5.4
SDK: 4.3.2
“`
## サービスの作成

Serverlessではサービスという単位で実行環境を構築しているら

元記事を表示

【AWS Lambdaテスト】sinonで1つのLambdaで複数のDBを参照しているときのLambdaTest

# Lambda Testこんなときどうするの
シリーズ化できたらいいな~

# AWS Lambdaで複数のDBをscanしてる、このDBをstubにしたい
以下のようなケースについて☟

“`JavaScript:Lambda.js
//aws-sdkを定義
const AWS = require(‘aws-sdk’)

//dynamo-DBを定義
const dynamo = new AWS.DynamoDB.DocumentClient()

// 野菜DBから全取得
// Dynamoの野菜DBの内容をscan
var yasaiDB = await dynamo.scan({ TableName: ‘vegitable’ }).promise()
// 八百屋DBから全取得
var yaoyaDB = await dynamo.scan({ TableName: ‘Yaoya’ }).promise()

“`

野菜DB、八百屋DBそれぞれから情報をscanしてきて、その情報をほにゃほにゃしてる状況。

このLambdaをsinonや

元記事を表示

ssh2-sftp-clientを使ってAWS Lambda(Node.js)からSFTPサーバーにファイルをアップロードする

# イントロダクション

この記事は、[ミロゴス Advent Calendar 2022](https://qiita.com/advent-calendar/2022/milogos) 5日目の記事です。

AWS Lambda(Node.js)からSFTPサーバー宛にS3上のファイルを転送したいという要件がありました。
Pythonであればparamikoあたりを使うところですが、Node.js(TypeScript)で開発したかったのでライブラリを探してみました。
使い勝手がよさそうものとして `ssh2-sftp-client` が見つかったので使ってみることにしました。

# ssh2-sftp-clientとは

– https://www.npmjs.com/package/ssh2-sftp-client
– https://github.com/theophilusx/ssh2-sftp-client

ssh2-sftp-clientは、Node.jsのSFTPクライアントです。
[ssh2](https://github.com/mscdex/ssh2) のラッ

元記事を表示

AWS Lambda + Serverless Framework + Selenium でつまずいたこと

これは YAMAP エンジニア Advent Calendar 2022 5日目の記事です。

https://qiita.com/advent-calendar/2022/yamap-engineers

# はじめに
以前に Heroku で Selenium を動かすということをやっていたのですが、諸般の事情により Heroku から AWS Lambda への移行が必要となりました。簡単にできるだろうと高をくくっていたのですが、いくつかハマりポイントがあったのでここに記しておきます。

https://qiita.com/higuhey/items/565cad6f6cc37f66b153

# やりたいこと
とある Web サイトを表示して、スクリーンショットを AWS S3 に保存します。

# 結論
最終的には以下の構成となりました。

## 環境/バージョン情報
– serverless
– Framework Core: 3.24.1
– Plugin: 6.2.2
– SDK: 4.3.2
– ChromeDriver 2.40
– Headless C

元記事を表示

40代おっさんREST API サーバーレスを学ぶ③

## 本記事について

この記事はプログラミング初学者の私が学んでいく中でわからない単語や概要を分かりやすくまとめたものです。
もし不正などありましたらコメントにてお知らせいただければ幸いです。

## 前回

## REST API リソース作成

API Gatewayを開く

APIタイプを選択で REST API 選択

選択したら画面遷移しますので

![API作成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641940/5d5f9ddb-3896-e69d-50c9-b6d619b17e3e.png)

プロトコルを選択を
REST

新しいAPIの作成
新しいAPI

API名を入れてください

入れましたらAPIの作成をクリック

### リソース

リソースを選びます。

次にリソースのアクションを選び
リソースの作成を選ぶ

リソース名を入れたら
右下のリソースの作成を

元記事を表示

絶対に止めれないシステムの作り方

# 絶対に止めれないシステムとは
もちろん銀行システムとかのクリティカルなシステムもそうなのですが、今回は、そこまでではないのですが、データ連携上一部のapiは止めれないシステムを指します。
僕は直面したのが、Lineでのユーザー登録によるwebhookを受け取るって奴です。
昔のキャリアのユーザー登録であれば、止まっていた時には別途データが飛んできてまとめて処理とかも出来ましたが、Lineさんのはありません。ユーザー登録時のwebhookを取りこぼすと2度と受信出来ないのです。
同様にSNS等で登録時にwebhookが来て、対応する必要があるシステムもあると思います。
LINE、現在は再送機能があるみたいです。
https://developers.line.biz/ja/news/2022/04/19/webhook-redelivery/

# どうすれば良いか?
先ず思うのは、AWSでLambdaで受け取って処理すれば良いと思うでしょう。
これでも良いのですが、Lambdaがエラー処理で落ちたりすることもあります。
## 最初の構成
![image.png](https://q

元記事を表示

DynamoDBにデータを追加する際、「エラー」が出てこない問題に対する解決策

# はじめに
Lambdaを使ってDynamoDBにデータを追加する簡易システムを作っていた際、エラーログすら出力されない問題に当たったので、ここではその知見共有をしたいと思います。

# 1. 今回使用するDynamoDBの構成
### order_infoテーブル

今回は、order_infoテーブルにレコードが追加されるたびにプライマリーキーであるid属性を連番設定し、数を1ずつ増やしていきます。
|id|created_at|host|name|price|quantity|
|:—|:——-| :–|:–|:—–| :——|
|number|number|string|string|number|string|

### id_sequenceテーブル
order_infoテーブルのid属性の連番を管理するためのテーブルです。
※DynamoDBには、オートインクリメントの機能がないため、Lambdaでコードを読み込むと数字をインクリメントするという処理にします。
|target_tabele|sequence|
|:—|:——-|

元記事を表示

AWS CDKのILocalBundlingでLambda FunctionとLayerを構築する

# 概要

AWS CDKを使ってLambda FunctionとLayerを構築する。
やりたいこととしては、

– FunctionのソースはTypeScriptで書く
– Functionにはnpmモジュールを含めない
– Layerはnpmモジュールのみ含める
– 開発中は `node_modules` を参照/解決できるようにする
– 事前準備のためのスクリプトを用意したくない
– 設定ファイルでパスをゴニョゴニョしたくない
– AWS CDK標準の仕組みを使う(FunctionとLayerへのバンドリングの話)

やってないこと/考慮してないことは、

– Layerにユーザー定義のモジュールを含める
– `sam local invoke` で動作すること
– `bash` の動かない環境でのローカルバンドリング

# ファイル構成

最終的にこのようなファイル構成になった(主要なファイルのみ)。
`project/package.json` の `devDependencies` には型定義やら開発時に必要なものが色々入っている。
`project/src/lambda

元記事を表示

AWS Lambdaの関数URLとコールドスタートの付き合い方について

この記事は、[Supershipグループ Advent Calendar 2022](https://qiita.com/advent-calendar/2022/supership) の4日目の記事になります。

## はじめに
Supership株式会社の [@masahito-suzuki](https://github.com/masahito1977) です。
最近ではAWSやDatabricksに関する管理を中心にコストレポート・見える化などをAWS Lambdaを中心に作成しています。
今回Lambdaを久しぶりに利用していると見慣れない機能「関数URL」と言うものがあり、これについて調べてみると、なるほど「今までより簡単にWebアプリが作れる」ようで、更に深掘りして調べた結果を記載しまとめてみました。

serverless関連に興味のある方は是非見ていただければと思います。

## 関数URLとは
2022/04/05 より AWS Lambdaアップデートで新機能 `関数URL` が登場しました。
これまで`API Gateway`を使って、Lamdaを実行する形で

元記事を表示

【AWS】VSCode Remote-SSH+EC2な開発環境を安く安全に作る〜3. スポットリクエスト作成〜

[前回](https://qiita.com/soujiroy/items/7798448fdc71a07005c6)で作成した起動テンプレートを使い実際にスポットリクエストを作成していきたいと思います。今回実施するのは以下の内容です。

1. スポットリクエストの作成
1. (オプション)スポットリクエスト起動用のLambda作成

# スポットリクエストの作成
[この画面](https://ap-northeast-1.console.aws.amazon.com/ec2/home?region=ap-northeast-1#SpotInstancesLaunch:)からスポットリクエストの作成を行います。以下の値以外はデフォルト値で大丈夫です。

* 起動パラメータ
* 起動テンプレートを選択し、前回作成した起動テンプレートを選択
* ネットワーク
* 前提条件で作成済みのVPCを選択
* アベイラビリティーゾーンは前回データ保存用EBSなどを作成したアベイラビリティーゾーンを選択
* インスタンスタイプの要件
* 選択したAMIや開発環境の

元記事を表示

Lambda SnapStart を実現する MicroVM Snapshots の論文を読み解く

# 概要

本記事は、[aws Advent Calendar 2022](https://qiita.com/advent-calendar/2022/aws) の 3日目の記事となります。

* 今回は、先日(2022/11/28)発表された Lambda SnapStart を実現する MicroVM Snapshots について書かれた論文「Restoring Uniqueness in MicroVM Snapshots」を読み解いていくという内容になります。

https://aws.amazon.com/jp/blogs/aws/new-accelerate-your-lambda-functions-with-lambda-snapstart/

## Lambda SnapStart とは

* 一言でこの機能を表すのであれば、Lambda のコールドスタート、初期化処理によるレイテンシーを大幅に削減する仕組みです。

### 機能
#### Lambda の実行環境について

* Lambda は関数の実行が行われた場合、下記の図のような動きを行う。

1: S3バ

元記事を表示

denoとapi gateway with websocketを使ったリアルタイムチャットを作ってみる(fresh, appRunnerも)

api gatewayがwebsocket向けに利用できるという事を知ったのと、個人的にwebsocketの知識が足りていないのと、denoのFreshというFWを触ってみたかったのとあって、やってみることにしました。あと使った事なかったのでApp Runnerも使っておきます。

# 使いたいサービス、技術

– Lambda
– api gateway
– deno
– Fresh
– sam cli
– App Runner
– Docker
– DynamoDB

だいたいこんなところでしょうか。

# 事前準備

このあたりを参考にして進めてみます。

https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/websocket-api-chat-app.html

これをベースにしつつFreshでチャットを作ってみようかと思います。

で、

> このチュートリアルの完了には約 30 分かかります。

とありまして、ボリューミーなんだろうなと思うのでこのへんは要点だけ残しておくことにします。

##

元記事を表示

社内向けチャットボット プログラム説明

# 目次
– [1.はじめに](#1はじめに)
– [2.チャットボットの動き](#2チャットボットの動き)
– [3.処理の流れ](#3処理の流れ)
– [4.入力内容の確認](#4入力内容の確認)
– [4-1.データの取り出し](#4-1データの取り出し)
– [4-2.返答内容の決定](#4-2返答内容の決定)
– [5.メッセージの作成](#5メッセージの作成)
– [5-1.質問・回答文の作成](#5-1質問回答文の作成)
– [5-2.選択肢の作成](#5-2選択肢の作成)
– [6.まとめ](#6まとめ)

# 1.はじめに
昨年作成した、Amazon lexとSlackを使った社内向けチャットボットのプログラムについて
自社のチーム内で説明、共有する機会がありました。
その際に自分の作成したプログラムを他者に分かりやすく説明することが難しいと実感し、
今回このQiitaの記事にそのプログラムについて、簡単な説明を備忘録も兼ねて投稿しようと思います。

昨年作成したチャットボットについての記事は以下になります。
https://qiita.co

元記事を表示

Lambda で MedliaLive の稼働状況を監視して Slack に通知するようにした話

:::note
AWS LambdaとServerless Advent Calendar 2022 2日目の記事です?
:::

## はじめに
みなさん、おはようございます!リバネス開発チームのトミー(@tomyf)です?

弊社では、自社サービス向けのライブ配信システム(以降、ライブ配信システムと表記します)で AWS Elemental MedliaLive を活用しています。
ライブ配信システムを簡単に説明しますと、リバネスが運営する [超異分野学会](https://hic.lne.st) や [テックプランター](https://techplanter.com/) 、ウェビナーなどの配信を、リバネスIDを持つユーザ限定で視聴できるプラットフォームです。

現在はライブ配信が必要なイベントごとに、専用のチャンネルを作成してライブ配信システムに紐付けており、イベント担当者がライブ配信システムからチャンネルの起動/停止を行っています。
皆さんご存知かもしれませんが AWS Elemental MedliaLive は実際の映像のアップストリームとは別に、チャンネルが起動している

元記事を表示

SAMを利用したLambda(Function URLs)デプロイ

## はじめに

[フューチャーAdvent Calendar 2022](https://qiita.com/advent-calendar/2022/future) の2日目です。
この記事は今年2022年4月にリリースされた「Lambda Function URLs」を実務で利用したところ非常に簡単だったので、そのやり方を紹介する記事です。
SAM初心者の方向けの内容になります。

こんにちは、Future CSIG所属の二瓶賢です。
今年から[FutureVuls](https://vuls.biz/)という脆弱性管理サービスの開発チームで働いています。

さて、FutureVulsでは決済サービスにStripeや、メール送信サービスにSendgridといったwebサービスを利用しています。
そういったサービスではwebhookで異常を通知するケースが多いかと思いますが、それらwebhook受信用エンドポイントを都度用意するのが面倒という気持ちもあるかと思います。(私はそうです、特にサービスの検証段階だと猶更です。)

そこで、この記事では[AWS Lambda Funct

元記事を表示

【AWS】EventBridge SchedulerでEC2の自動起動・自動停止

EC2を使用していると、料金を抑えるために使用する時間帯以外は停止する運用をよくします。
その際今までは、手動だと停止し忘れが発生するので、EventBridge + Lambdaで自動化していました。

しかし、2022/11/10にEventBridge Schedulerが発表されたことにより、この機能のみで様々なリソースの自動停止が実現できるようになりました!
EC2を例にして、機能の特徴と作成方法を説明します。
![event_bridge_scheduler.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1166959/81cf816a-0bbc-5cd7-ddc2-531bc72f142f.png)

# ターゲット

– AWSの最新機能を学たい
– EC2, RDS等を自動停止/起動したい
– すでにEventBridge + Lambdaで運用しているが、もっと簡略化したい

# EventBridge Schedulerのいいところ

EventBridge Sche

元記事を表示

OTHERカテゴリの最新記事