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

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

SAMでAWS Lambda(カスタムイメージ) + API Gatewayを構成するときに、できるだけ効率的なlambda関数のunit testを考える

# 概要

Lambda + API GatewayをSAMを使って構成するときに、カスタムイメージを使ったlambda関数に関する情報があまり出て来なかったので、試行錯誤した内容を残す。具体的には以下の内容。

– lambda関数をカスタムイメージで作るときに、作った関数をunit testするときのtips

# カスタムイメージを使ってlambda関数をunit testすることの難しさ
カスタムイメージを前提としたLambda + APIGatewayを構成しようとすると、大体以下のようなディレクトリ構成になる。

“`
.
├── README.md
├── __init__.py
├── lambda_function
│   ├── Dockerfile
│   ├── __init__.py
│   ├── app.py
│   └── requirements.txt
├── events
│   └── event.json
├── samconfig.toml
├── template.yaml
└── tests
├── __init__.py

元記事を表示

運用中のAPIでエラーが出たときどうやって検知してSlackに通知しよう 〜実装編〜

# はじめに
これは [KWC Advent Calendar 2022](https://qiita.com/advent-calendar/2022/kwc) の記事です。

はじめまして、KWCに新卒で入社して、バックエンドエンジニアをしているユウスケと申します。
テックブログは初めてです!

**\*紹介\***
昨日の記事で[運用中のAPIでエラーが出たときどうやって検知してSlackに通知しよう 〜概要編〜](https://qiita.com/Suzurikawa/items/cad72315337bb01bb414) の続きとなりますので、先に概要編を読むことをおすすめします!


https://qiita.com/Suzurikawa/items/cad72315337bb01bb414

# 目次
1. [概要編をサクッとおさらい](#概要編をサクッとおさらい)
1. [システムの構成](#システムの構成)
1. [いざ実装へ](#いざ実装へ)
1. [まとめ](#まとめ)

# 概要編をサクッとおさらい
今回や

元記事を表示

Lambdaを使ったPDFファイル作成とダウンロード

## 課題

Lambdaを利用したSPA(Vue)アプリケーションにおいて、ユーザーに必要な情報をPDFファイルにまとめてダウンロードさせる必要が生じました。
「Lambda」と「PDF作成」で検索すると、`chrome-aws-lambda`を利用してPDFファイル作成を行えば実現できそうなことがわかったのですが、PDFファイルを生成して直接ダウンロードさせるようなコードは見つからなかったため調査・作成することにしました。

## 準備

### chrome-aws-lambda

Puppeteer を使ってPDFファイル作成を行うため、まずは chrome-aws-lambda をLambda Layerとして登録しました。
詳細な手順は以下の記事にありましたので、それを参考に進めています。

https://dev.classmethod.jp/articles/run-headless-chrome-puppeteer-on-aws-lambda/

### 日本語フォント

デフォルトの環境だと日本語が文字化けしてしまうようです。
参考にしたコードではURL参照でロード

元記事を表示

DynamoDBのレコードを主キー以外で取得するLambda

# 概要
LambdaからDynamoDBのレコードを主キー以外で取得する方法を紹介します。

# 前提条件
– DynamoDBにテーブルが作成されており、データも登録されていること
– 必要なIAM権限が付与されていること

# 環境
– ランタイム:Python3.9
– リージョン:ap-northeast-1

# コード
“`python
import boto3
from boto3.dynamodb.conditions import Attr

dynamoDB = boto3.resource(“dynamodb”)
table_name =
table = dynamoDB.Table(table_name)

def lambda_handler(event, context):
column = <検索に使うカラム名>
data = <検索に使う値>

responce = table.sc

元記事を表示

AWS CDKでのTestを実行するときにLambdaのスタックがあると実行が途中で止まる問題の解決法

ミロゴス開発Gでは基本的にインフラにAWSを使うことが多いです。古くから存在するシステム等もあるものの、新規のシステムに関しては、なるべくサーバーレスな環境で設計するよう心がけています。

インフラ部分はAWSのIaCツールであるAWS CDKを使っています。CDK PipelinesでCI/CDも手軽に組めるので大変気に入っているのですが、Lambdaのコードのユニットテストは書いているものの、AWS CDK自体のテストは今まで避けてきました。

ちょうどこのあたりに手を付けられるタイミングだったので、いざ書いてみたものの、表題の通りLambdaのスタック作成でエラーにハマり、だいぶ時間を溶かしてしまいました。
あまり日本語でまとまった記事もなかったので、問題の詳細と解決方法をしたためておこうと思います。

– サーバーレスな弊社環境の例
![スクリーンショット 2022-11-16 14.36.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141823/043bcdee-127c-2e8c-5

元記事を表示

API GatewayとLambdaを連携させる

# 構成図
APIGateway→Lambda→SNS
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2989225/2bbc334f-32e6-af61-149a-7f5ba0e9fe4e.png)

# 前提知識
– AWS Lambda単体ではLambda関数の実行ができない。
Lambda関数を実行させるためには、他のサービスリソースで処理を起動させるきっかけとなるトリガーが必要
Lambdaを実行するトリガー
①トリガーと同期して関数を起動するタイプ
 例)API Gateway、手動実行
②イベントが発生したことを検知して非同期で関数を実行するタイプ
 例)Amazon S3、CloudWatch Log、CloudWatch Eventsからの実行

# 流れ
・SNSトピックの作成
・Lambdaの作成(SNS連携)
・LambdaのIAM設定
・API GatewayでAPIの作成
・動作確認

# SNSトピックの作成
マネジメントコンソールのSNSの画面からトピッ

元記事を表示

Lambda+固定IP利用におけるデメリット

# Lambda+固定IP利用におけるデメリット

この記事は[AWS LambdaとServerless Advent Calendar 2022](https://qiita.com/advent-calendar/2022/lambda) の12日目の記事です。

セキュリティ要件や対向する外部システムの制約でアクセス元を制限するため、固定IP化する必要があります。
せっかく、Lambdaを使ったサーバレス構成でシステムを構築して、リソースと運用を効率化したくても、いくつも制約が生じてしまいます。

VPC Lambdaの制約は解消しつつありますが、非VPCでLambdaを利用して固定IPが利用できるようになるといいなと思い、現状の制約をまとめてみました。

なお、AWS Dev Day Japan 2022で登壇した際の資料に運用中のシステム構成、Lambda+Neptuneとの組み合わせで発生した問題などを記載しています。また、VPC Lambda + Neptune以外に、資料記載のサービスでは、VPC Lambda + RDS Proxy + Auroraの構成のシステム

元記事を表示

運用中のAPIでエラーが出たときどうやって検知してSlackに通知しよう 〜概要編〜

# はじめに
これは [KWC Advent Calendar 2022](https://qiita.com/advent-calendar/2022/kwc) の記事です。

はじめまして、(株)KDDIウェブコミュニケーションズ でバックエンドエンジニアをしています[chihiros](https://github.com/chihiros)と言います。2021年11月にKWCへ入社し、熊本や福岡などからフルリモートで日々業務を行っています。

この記事では本番稼働中のプログラムがエラーを出したときに、どうやったらエラーの存在に気づけるのかについて書いていきます。

1日目の記事、[試用期間中に会社の主力事業のAWS環境をゼロからTerraform化した](https://hikarun-sre.hatenablog.jp/entry/2022/12/08) の中にも書かれてあるように、弊社ではビジネス向けにレンタルサーバーを提供しています。その中で一部の社内システムにはAWSやAzureと言ったクラウドを使っています。

https://hikarun-sre.hatenabl

元記事を表示

[Laravel × AWS Lambda] Brefを使って、サーバレスでLaravelを実行してみた!

## まえがき

こんにちは。
[bref](https://bref.sh/docs/)を使って、AWS LambdaでLaravelを実行してみました。

そこで、この記事では、brefの簡単な紹介をしつつ、主に「使ってみて感じたメリット」を書いています。
感想のみが気になる方は、この記事の[使ってみて感じたメリット](#使ってみて感じたメリット)だけ読んでもらえると。

## brefとは?

brefは、AWS Lambda上でPHPを実行するためのランタイムを提供するパッケージです。
紹介は公式を読んでもらった方が早いです。

https://bref.sh/docs/

> PHP サーバーレスを実行する場合:
> – サーバーをセットアップする必要はありません。クラウドプロバイダーがそれを処理します.
> – 使用した分だけお支払いいただきます。
> – アプリケーションは自動的にスケーリングします。

まんまサーバレスのメリットって感じですね。

ただ、bref特有のキモは下記です。

– LambdaでのPHPのランタイムを手軽に準備できる
– Laravel・Sym

元記事を表示

sam initでPythonのLambdaを作成したときに、pytestが付いてくる

# はじめに
`sam init`でPythonのLambdaを指定した際、`tests`というフォルダが付いてきます。
Lambdaで単体テストを行いたいと思っていて、中がどうなっているのか確認してみましたので、その内容を記事にします。

# 概要
– `sam init`でPythonのLambdaを作ると、**pytest**用のフォルダ`tests`が生成される
– PythonのLambdaを作る場合は、pytestを使った方がよさそう

# やったこと
## 環境
いつものClooud9です。コンテナを作るわけではないので、最安価インスタンスで十分かと思います。

## sam init
まずはsamテンプレートを作ります。
“`bash
$ mkdir dev
$ cd dev

$ sam init
Which template source would you like to use?
1 – AWS Quick Start Templates
2 – Custom Template

元記事を表示

[AWS] LambdaでS3の署名付きURLを発行する時に読む記事

# これは何?

LamdbdaでS3の署名付きURLを発行する時に、個人的につまづいたポイントを書いた記事です。

具体的なつまづいた現象としては、「Lamda上の処理で指定した有効期限に関わらず、有効期限が12時間程度になってしまう」というものでした。

「LambdaでS3の署名付きURL発行したけれど、長めに有効期限に指定したのに有効期限が切れてる~~~」でお困りの方、参考になると幸いです。

# 大まかな原因と解決方法

※ 私の解釈によるものが多いので、間違えていたら教えてください

## 原因

LambdaのIAMロールによって発行されたAWS Credentialを使用する場合、IAMロールによる一時的な認証が適用される。
※ 該当IAMロールの設定にもよるが、セッション期間は1時間~12時間で設定可能

https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html#permissions-executionrole-session

その際に、`IAMロールのセッション有効

元記事を表示

CloudFront DistributionからALB-Lambdaを呼び出す構築ハンズオン

## はじめに
##### 先日CloudFrontからAPIGateway経由でLambdaへの構築を行なったので、そしたらセットでALB経由でLambdaこ構築に関してもCFn化しておこうと思い立ち、さっそくハンズオンしていきます。

————

## 構成図
![](https://cloud5.jp/wp-content/uploads/2022/12/スクリーンショット-2022-12-11-8.39.11-640×284.png)

————

## ハンズオン
### 構築の流れ
#### 1.VPC作成
#### 2.Lambda作成
#### 3.ALB作成
#### 4.CloudFront作成
##### 上記の順番で構築を行なっていきます。

##### 最終的には、CloudFrontのディストリビューションドメインから、ALB経由でLambdaのメッセージ部分をダウンロードできるまでを行なっていきます。

———–

### 1.VPC作成
以前記載したブログ[CloudFormationを使ってVPC構築](

元記事を表示

CloudFront DistributionからAPI Gatewayを呼び出す構築ハンズオン

## はじめに
##### IAM認証や、ACM,Route53などの検証の際に、自分でよく利用する構築をCloudFormation化していなかったと思い着手してみました。
##### まずは背骨となる、 CloudFront から APIGateway – Lambdaを呼び出す構築部分のCFn化を行なっていきたいと思います。

————

## 構成図
![](https://cloud5.jp/wp-content/uploads/2022/12/スクリーンショット-2022-12-10-15.03.31-640×295.png)

————

## ハンズオン
### 構築の流れ
#### 1.Lambda作成
#### 2.APIGateway作成
#### 3.CloudFront作成
##### 上記の順番で構築を行なっていきます。

##### 最終的には、CloudFrontのディストリビューションドメインから、Lambdaを呼び出せるまでを行なっていきます。
![](https://cloud5.jp/wp-content/uplo

元記事を表示

【AWS】IAM認証を使用したLambdaの関数URL呼び出しをやってみた

# はじめに
LambdaをAWSの外部から呼び出す方法として、APIGatewayでエンドポイントを作成し、そのURLにアクセスすることでLambdaが実行される仕組みがありますが、Lambdaから呼び出し用URLを生成することができるようになっていたことをご存知でしょうか。(最近って程でもないですが2022年4月のアップデートです)

存在は知ってましたが動かしたことなかったので軽く触ってみようと思います。

https://aws.amazon.com/jp/blogs/aws/announcing-aws-lambda-function-urls-built-in-https-endpoints-for-single-function-microservices/

# 目次

1. [IAM認証とは](#iam認証とは)
1. [アクセスキー・シークレットアクセスキーとは](#アクセスキーシークレットアクセスキーとは)
1. [使用するコード](#使用するコード)
1. [Lambda関数の作成](#lambda関数の作成)
1

元記事を表示

【Serverless Framework】PythonランタイムのLambdaでrequirements.txtと独自モジュールをレイヤー化する

# はじめに

Lambda Layerを使うと、複数のLambdaで共通して使用するライブラリとその他の依存関係をパッケージ化することができます。

今回はServerless Frameworkを利用してLayerをデプロイし、開発環境、Lambda環境で利用する方法を解説します。

# Layerの基礎知識

押さえておくべきポイントは以下2つです。

:::note
Lmabda環境においてLayerは`/opt`以下に展開される。
:::

:::note
Lambda環境の`PYTHONPATH`には`/opt/python`が含まれている。
※ PYTHONPATHとは、Pythonが import 文で利用するモジュールを探す際のパスです。
:::

以下のような`utils.py`を共通化する場合を想定します。
“`utils.py
def hello_func():
return “Hello!”
“`
上記のポイント2つを組み合わせ、Lambda内で`/opt/python/utils.py`となるようにレイヤーを配置することで、このようにLambd

元記事を表示

ソラカメ + Lobe + AWS Lambda + Tensorflow Lite で鍵の閉め忘れを検知する

## 作成のきっかけ

師走になるといろいろと慌ただしくなり、普段しないようなうっかりミスも出てきます。私は特にうっかりミスが多い方で、布団の取り込み忘れ・風呂の栓の閉め忘れ・電気の消し忘れなど、困りごとは多岐にわたります。これらはまだ良いのですが、一番怖いのはやはり玄関の鍵の閉め忘れです。最近は後付けのオートロックも出てきているのですが、なんとなく買うのを後回しにしていたところ、何度か閉め忘れが発生し、妻からひどく怒られてしまいました (ごめんなさい)。

そんな矢先に、クラウドカメラサービスのソラカメに静止画エクスポートの API が出てきました。丁度アドベントカレンダーのネタも探していたので、これを機に画像認識を勉強してみようと思いました。

## 成果物

以下のように LINE Notify でドアの開閉と画像を送信できました。

オープンデータ(GBFS)とM5Stackを使ってシェアサイクルスイッチを作ってみた

## つくるもの
– ボタンを押すと、設定しておいたステーションの貸出可能自転車数が表示されるスイッチ

## 準備すること
– シェアサイクルオープンデータより、貸出可能自転車台数を取得:AWS Lambda の設定
– M5Stackとデータをやり取りするAPIを用意する:AWS API Gateway の設定
– M5Stackで、API経由でデータを取得しディスプレイに表示:M5Stackの使い方

## シェアサイクルのオープンデータについて

以下2つの記事に詳しく書かれています。

GBFSについての概要はこちら

https://note.com/openstreet/n/n2f4b51cd52b3

GBFSのファイル、カラムについてはこちら

https://qiita.com/kumatira/items/f9229c21d9f0db3b5ae3

## AWS Lambda の設定

– 言語はPythonを選択
– Pythonのライ

元記事を表示

同期呼び出ししたLambdaがエラーを起こした時に別のLambdaを起動したい

# なぜこれが必要?
* 非同期呼び出しでLambdaを起動した場合は、Lambda自体の機能で別のLambdaを起動できる
* しかし、同期呼び出しの場合そういうのがなさそうなので別のサービスを組み合わせる必要がある

# やること

* エラー監視したいLambdaに紐づくCloudwatchのログを開いて、Lambdaサブスクリプションフィルターを作成するをクリック
![スクリーンショット 2022-12-10 19.20.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176335/91b1adb6-4919-a065-a6b2-77fa3910298c.png)

* 設定項目をいい感じに設定して作成する
![スクリーンショット 2022-12-10 19.18.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176335/6f5aefc4-625d-d824-4768-10453e77d259.png

元記事を表示

RDS起動をEventBridgeで検知してLambdaで停止する構築ハンズオン

## はじめに
[AWS Step Functionsを使用して、自動的に開始されたRDS DBインスタンスを停止してみる](https://cloud5.jp/saitou-handson-rdsautostop/)というブログを見まして影響を受けました。

思い返すと自分が設定している環境では、RDSを自動停止するにはEventBridgeのCronでスケジュールを利用して停止させてばかりだなと思いまして、RDSの起動イベント通知をEventBridgeで検知してRDSを停止するLambdaを構築してみたいと思いましてハンズオンしました。

————

## 構成図
![](https://cloud5.jp/wp-content/uploads/2022/12/スクリーンショット-2022-12-03-19.41.58-640×253.png)

————

## ハンズオン
### 構築の流れ
#### 1.VPC作成
#### 2.RDS作成
#### 3.Lambda作成
#### 4.EventBridge作成
上記の順番で構築を行なってい

元記事を表示

S3オブジェクトをトリガーにしたLambdaからSNS通知構築ハンズオン

## はじめに
今回もCloudFormationを利用して、S3にオブジェクトを保存するとEventBridgeが検知をして後続のLambdaをターゲットにし、LambdaからSNSを自分宛に送信するような構築をしていきます。
S3からオブジェクト通知でSNSという経路もありますが、自分のリソース理解の意味も含め構築をしていきます。

————

## 構成図
![](https://cloud5.jp/wp-content/uploads/2022/11/スクリーンショット-2022-11-26-15.16.11-640×199.png)

————

## ハンズオン
### 構築の流れ
#### 1.S3作成
#### 2.SNS作成
#### 3.Lambda作成
#### 4.EventBridge作成
上記の順番で構築を行なっていきます。

最終的にS3にオブジェクトを保存すると、SNSで登録した宛先にメールが届きます。
![](https://cloud5.jp/wp-content/uploads/2022/11/スクリーンショット-2

元記事を表示

OTHERカテゴリの最新記事