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

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

Chart.jsのグラフを画像ファイルに出力するAWS Lambda関数をコンテナイメージで構築する

## はじめに
こんにちは。READYFORでプロダクトエンジニアをやっておりますtoyocです。
この記事は「[READYFOR Advent Calendar 2022](https://qiita.com/advent-calendar/2022/readyfor)」の7日目の記事です。

## 概要
AWS Lambda x [Chart.js](https://www.chartjs.org/) で画像ファイル出力する際に、コンテナイメージベースでデプロイすることで、めちゃくちゃめんどくさかった構築が、まぁまぁめんどくさいぐらいで済むようになったというお話です。
Chart.jsでグラフを書いたり、実際に画像出力する部分のコードは割愛します。

## あらすじ
> 「いい感じのグラフをこのページに作ってほしい!」
「じゃあ[Chart.js](https://www.chartjs.org/)でいい感じのを作ろう。…ほいできた。」
「いいね!ページに載せるのはこれでいいんだけど、ページのサムネとかにも使いたいからこのグラフ画像化してくれる?」
「毎日データが変わるページだから

元記事を表示

LambdaのPythonライブラリ追加にEFSを使ったときのメモ

AWSのLambdaでPythonのライブラリを読み込みたいときに、一番簡単な方法として、ライブラリをzipにしてレイヤーにアップロードするという方法があります。
ただしこれには制限があって、解凍後に500MBまでのファイルしかアップロードできません。
その解決策としては、
1. EFS(Elastic File System)を使う。
2. LamdaをDockerにする。

という方法があります。
ここでは、より簡単な、EFSを使う方法をとった時のメモを残したいと思います(自分がやった時のメモなので、より良い方法があるかもしれません)。

まず、インバウンドルールをタイプ:NFS、ポート範囲:2049にしたセキュリティグループを作ります。
![スクリーンショット 2022-12-07 6.53.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3025503/4780f6ad-b871-f3a4-4517-adaf0c1dbc40.png)
使用するEFSを用意します。
EFSの管理画面にアクセス

元記事を表示

AWS FinchでAmazon LinuxのJupyterLab環境を作ってみた。Lambdaレイヤー作成用にも使える!

# はじめに

FinchでJupyterLab環境作ります。
さらにLambdaレイヤー作成用にも使ってみます。

# 開発環境
– MacBookPro 2018

# Amazon LinuxのJupyterLab環境を作成
1.[Finch-v0.1.0-x86_64.pkg](https://github.com/runfinch/finch/releases)をインストール

2.finchを初期化

$ finch vm init

~~~
INFO[0000] Using default values due to missing config file at “/Users/user/.finch/finch.yaml”
INFO[0000] “/Users/user/.finch” directory doesn’t exist, attempting to create it
INFO[0000] binaries directory doesn’t exist
INFO[0000] Requesting root access t

元記事を表示

non-pure-Pythonの外部モジュールをLambda上で扱うのに苦労した話

# はじめに
こんにちは、GxPの@ttanaka-gxpです。
この記事はグロースエクスパートナーズ Advent Calendar 2022の7日目です。

Serverless Frameworkを使ってnon-pure-Pythonの外部モジュールを含んだPythonアプリをデプロイした際に苦労した話です。
ハマりどころがあるというのは認識していたので覚悟はしていたのですが、思った以上に時間を取られてしまいました…
その分、勉強にはなったので自分の中での整理も兼ね、今回記事にさせて頂きます。

# やりたかったこと
RDS for SQL Serverに保存している基幹データに対し、関連システム向けに参照用途でのデータ連携の仕組みを構築したいというのが要件としてあり、API Gateway+Lambda+RDSの構成でデータ参照のAPIをPoCとして構築することになりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/942766/0907b6cb-c0ea-6ccc-552

元記事を表示

[AWS CDK]SSMのパラメータストアに登録したデータを環境変数にセットする方法

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

LINEのチャネルシークレットとアクセストークンをSSMパラメータストアから取得してlambda環境変数にセットした方法をまとめました。

## AWS Systems Manager(SSM)とは
> AWS Systems Manager は、AWS クラウド で実行されるアプリケーションとインフラストラクチャの管理に役立つ一連の機能です。Systems Manager により、アプリケーションとリソースの管理が簡略化され、オペレーション上の問題の検出と解決にかかる時間が短縮されるほか、AWS リソースを大規模かつ安全に管理できるようになります。
https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/what-is-systems-manager.html

## AWS Systems Manager

元記事を表示

Google AnalyticsのレポートをLambda&Pythonで取得しSlackに投稿する

## まえがき
### やること
Google Analyticsで集計したデータ(ここでは1昨日の投稿ごとのページビュー)をPythonで取得してレポートを作成し、Slackに投稿してみたいと思います。
PythonはLambdaで動かします。

### 書くきっかけ
毎日、Google Analyticsで投稿ごとのページビューを確認しています。
スマホアプリで開いて確認したり、WEBで確認したりしています。
これをプログラムで行うことができないかと考え始め、[Google Analytics Data API](https://developers.google.com/analytics/devguides/reporting/data/v1)というものがあることを知り、挑戦してみることにしました。

### 構成図
今回作成するものを構成図にすると、以下のようになると思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252459/0d916d83-ebb7-d85e-5

元記事を表示

AWS CDK + LocalStackでAWSサーバーレス環境をローカルに構築してみた

# はじめに

昨年度書いた[こちらの記事](https://qiita.com/yasomaru/items/fa708a1f21a79e637868)のLocalStackが2022年7月に正式リリースされたということで、今年のアドベントカレンダーもLocalStackについて書きます。
今回はAWS CDK (AWS Cloud Development Kit)を使用し、LocalStack上にサーバレスアプリケーションを構築します。

https://localstack.cloud/

# 環境構築

:::note warn
LocalStackの環境構築については、[こちら](https://docs.localstack.cloud/getting-started/installation/#installation)を参照してください。
:::

## LocalStackの起動

LocalStackの起動方法はいくつかありますが、今回は以下のコマンドでLocalStackを起動します。

“`sh
localstack start
“`

元記事を表示

AWS SAM について初心者なりに見えてきたこと

# 背景
一か月ほど、AWS Lambda 周りに取り組んできたので、ここらで一度振り返ってまとめてみよう

想像力とは知識の再構築であることから、自分の理解しているものをまとめるのは役立つので

新しいことを学ぶときは、自身の理解していることを書き留めることは大切なはず、だって忘れるんですもの :hamster:

# sam command
`sam init` でプロジェクト名でフォルダを作成しつつ初期化
`sam build` で構築して
`sam deploy` でクラウドへ

`sam sync` で、高速デプロイ

https://docs.aws.amazon.com/ja_jp/serverless-application-model/latest/developerguide/sam-cli-command-reference-sam-sync.html

https://docs.aws.amazon.com/ja_jp/serverless-application-model/latest/developerguide/serverless-sam-cli-c

元記事を表示

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

元記事を表示

OTHERカテゴリの最新記事