Lambda関連のことを調べてみた2020年08月16日

Lambda関連のことを調べてみた2020年08月16日
目次

[AWS初心者向け]LambdaでDynamoDBクライアントのインスタンス化コストを検証してみた

# クライアントのインスタンス化コストってどれぐらい?

AWS公式ドキュメントの[Lambda を使用する際のベストプラクティス](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/best-practices.html)には以下のように記述されています。

> AWS のサービスのクライアントは、ハンドラではなく初期化コードでインスタンス化する必要があります。これにより、AWS Lambda コンテナは、コンテナの有効期間中は既存の接続を再利用することができます。

DynamoDBやS3などのクライアントはLambdaの初期化処理でインスタンス化しましょう、ということですね。

私はこのドキュメントから、クライアントのインスタンス化にどれぐらい時間が掛かるのか気になりました。ベストプラクティスに沿って開発していれば要らないトリビアです。

この記事ではDynamoDBクライアントを対象に、インスタンス化のコスト検証と、実際にありそうなgoodとbadのケースを用意してパフォーマンス検証を実施しました。

### インスタンス化の

元記事を表示

[AWS] Step Functionsで遊んでみる(SAM + Lambda) Part.1

# Step Functionsとは
AWS Step Functionsとは、マイクロサービスコンポーネントをワークフロー化するためのサービスです。

## 状態
Step Functionsでは、状態によって様々な動作を制御できます。
状態には、以下のようなものがあります。

| 状態 | 制御 |
|—|—|
| Task | ステートマシンで何らかの作業をする |
| Choice | 実行の選択肢間で選択する |
| Fail or Succeed | 失敗または成功で実行を停止する |
| Pass | 入力を単純に出力に渡す、または一部の固定データを出力する |
| Wait | 一定時間または指定された時刻/日付まで遅延を提供する |
| Parallel | 実行の並列ブランチを開始する |
| Map | ステップを動的に反復する |

## Taskで利用可能なサービス
Step FunctionsのTaskには、以下のサービスを指定できます。

– Lambda
– Batch
– DynamoDB
– ECS
– Fargate
– SNS
– SQS

元記事を表示

Terraformを使ってAPI Gatewayとlambda(aws-serverless-express)でAPIを構築する

## はじめに
最近サーバーサイドやインフラを勉強中の新米エンジニアです。
勉強のためにnodejsとexpressでWebAPIを構築してローカルでモックとして利用することが結構あるのですが、お盆休みを使ってデプロイ方法を勉強しました。
AWSのAPI GatewayとLambdaを利用します。業務でALBとLambdaの組み合わせは使っているのですが、個人でやるならコスト的にAPI Gatewayかなと思い選定しました。

## 前提
– terraform&aws cliの環境構築済み
– nodejsの環境構築済み

## API Gateway
https://aws.amazon.com/jp/api-gateway/
>フルマネージド型サービスの Amazon API Gateway を利用すれば、開発者は規模にかかわらず簡単に API の作成、公開、保守、モニタリング、保護を行えます。API は、アプリケーションがバックエンドサービスからのデータ、ビジネスロジック、機能にアクセスするための「フロントドア」として機能します。API Gateway を使用すれば、リアルタ

元記事を表示

AWS Step Functionで大きいpayloadを渡す

lambdaからlambdaに渡してゴニョゴニョする必要が出てきて「step function」を初めて使ってみた。
タイトルとはかけ離れているが、学習の記録を兼ねて。

## まずは動画で基礎を学習

兎にも角にも基本的な用語や基本的な設定方法がわからないと話にならないので手っ取り早く動画を見る。
この動画でほぼ7割〜8割程度のやりたいことが出来るようになる。

##何をしようとしているのか

「2つの外部APIにリクエストを投げてそのレスポンスを受け取って加工する」 ということをやりたかった。

“`
{
“Comment”: “Search Items”,
“StartAt”: “lookupItems”,
“States”: {
“lookupItems” :{
“Type”: “Parallel”,
“Next”: “Response-Item”,
“Branches”: [
{

元記事を表示

AWS Lambdaで外部モジュールを読み込めるようにする方法

– 普通にLambdaをアップロードしただけではAWSにデフォルトでインストールされているライブラリ(AWS SDKとか)以外は使用できないみたい
– “`Cannot find module“`と言われてしまいます
– 言語はNode.js
– AWS CDKを使っている

## 方法① LambdaのZipファイルに外部モジュールを含める
– AWSコンソールを使えば、LambdaファイルをZip圧縮したものをアップロードすることができるため、このZip内にnode_moduleディレクトリを含めて外部モジュールごとアップロードしてしまえば良いです
– ただし、AWS CDKを使用してアップロードする場合、この方法は使えません(/_;)

## 方法② 外部モジュールのZipファイルをLambda Layersへ登録する
– node_modulesディレクトリをZip圧縮して、AWSコンソールからLambda Layersにアップロードすれば良いです
– ただし、せっかくLambdaのアップロードをAWS CDKで自動化しているのに、別の手作業が発生してしまうのは悲し

元記事を表示

【AWS Lambda】S3に保存された画像をリサイズして別S3に保存(Ruby利用)

##目標
S3に保存された画像データをLambda関数を利用してリサイズし、別S3に保存する。
プログラミング言語はRubyを利用しています。

##はじめに
あまりLambdaに関して詳しくないので、基本的にはLambdaの基本動作を手順として残すのが目的です。
AWSコンソールからS3にプットした画像をリサイズ(固定サイズ)して別S3に保存するという単純な処理を試してみました。

##前提
事前に2つのS3バケットを作成していること。

##構成図
![Untitled Diagram.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647616/9c6cc306-8ee1-9e03-4594-11f76ff76734.png)

##作業の流れ
| 項番 | タイトル |
|:—-:|:————-|
| 1 | [Lambda関数の作成とアップロード](#1lambda関数の作成とアップロード) |
| 2 | [Lambda環境変数の設定](#2lambda環境変数の設定)|

元記事を表示

[AWS] API Gateway + LambdaをX-Rayでトレースしてみる

# X-Rayとは
分散アプリケーションの分析とデバッグのためのサービスです。
詳細は、こちら。
[AWS X-Ray](https://aws.amazon.com/jp/xray/)

# 前提
今回も、以下構成でサンプルを構築してみようと思います。

– SAM
– Python3.8

SAMをはじめとする基本知識は、こちらを参照願います。

– [[AWS] Serverless Application Model (SAM) の基本まとめ](https://qiita.com/herohit-tool/items/420f4a7b294cfcf56ed7)
– [[AWS] Serverless Application Model (SAM) でAPI Gateway + Lambda + DynamoDBなサンプルを作成してみる](https://qiita.com/herohit-tool/items/5b0fe520f6f28fb5b4bc)

# サンプルを作ってみよう
## プロジェクト作成
例によって、SAMでHello Worldベースのプロジェクトを作成して

元記事を表示

【AWS Lambda】Lambdaで「Hello World!」

#はじめに
[「Hello, World!」をサーバーレスで実行する](https://aws.amazon.com/jp/getting-started/hands-on/run-serverless-code/)の記事で、Lambdaで「Hello World!」を行なってみた。

#手順
##設計図の選択
Lambdaコンソールで「関数の作成」を選択する。
スクリーンショット 2020-08-13 21.05.42.png
「設計図の使用」を選択。
フィルターに「hello-world-python」を入力し、「hello-world-python」を選択して、「設定」ボタンを選択。

スクリーンショット 2020-08-13 21.06.23.png

元記事を表示

息子の可愛さを普及するために、AWS + LINEでBotを作った話

2020年7月、我が家に長男が誕生。
もう天使。かわいい。CMのオファー来るんじゃないのか?(親バカ)

親族・友人に息子を会わせて、可愛さを自慢やりたかったが、このご時世それも叶わず。。。
我が息子の可愛さを普及したい。どうしよう。

そうだ。我が息子の可愛さを普及するLINE Botを作ろう。

# 1. デモ
最初にご紹介。(かわいい)
![demo.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/300430/21dbaea6-a7d8-fc69-5869-b1a5cda7fe70.gif)

# 2. 全体構成
![Design.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/300430/f004c5e4-e8ef-b69d-a4a6-67f82dac8bb0.png)

2-1. LINEBotからWebHookでAPIGateway→Lambda実行
2-2. メッセージを解析して、返信用のメッセージと画像を

元記事を表示

DynamodbをLambdaからSQLっぽく操作する

# 説明の前に

pipのモジュールを利用する方法は、下記の記事を参考にさせていただきました。
ありがとうございました。

【Python】AWS Lambdaで外部モジュールを使用する
https://qiita.com/SHASE03/items/16fd31d3698f207b42c9

# 1.準備
LambdaにPipのモジュールを持ってくる必要があるため、ローカルにDQLモジュールをインストールする。

プロジェクトフォルダ内で、下記

“`sh
$pip install dql -t ./
“`

# 2. ソースコード
ファイル名は`lambda_function.py`

“`python
import dql
def lambda_handler(event, context):
engine = dql.Engine()
engine.connect(region=”us-west-2″)
results = engine.execute(“DELETE FROM tablename WHERE tm >= 1420071600 A

元記事を表示

AWSサーバレスでSPARQLエンドポイントを構築(Apache Jena編)

AWSサーバレスでSPARQLエンドポイントの構築を試してみた第2弾です。
第1弾はこちらです。

AWSサーバレス環境でSPARQLエンドポイントを作ろうとしたが上手くいかなかった話
https://qiita.com/uedayou/items/bdf7a802e27fe330044e

前回は利用したライブラリの関係で検索速度に難があり限定した用途であれば使える、という感じでした。
今回はRDFストアとしては実績がある[Apache Jena](https://jena.apache.org/)を使ってみました。

## 環境

– [AWS Lambda](https://aws.amazon.com/jp/lambda/)
– [Amazon API Gateway](https://aws.amazon.com/jp/api-gateway/)

前回と同じくAWS Lambda+API Gatewayという構成です。
Apache Jena は

– [jena-core](https://jena.apache.org/documentation/rdf/index.h

元記事を表示

Lambda関数をCodeCommitで管理する

# 概要

Lambda関数のコードを、Gitでソース管理したい。

↓こんな感じでできるんじゃないかと。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185989/d5eb8e57-be50-ee8e-4b03-070e356e30bc.png)

データの流れはこんな感じ↓
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185989/02b9681c-db84-9547-710d-76eab46eabaa.png)

# 登場人物

AWSSDKで、ソースを外から突っ込む系は以下のコマンドでできるみたいです。

– [Lambda.createFunction](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Lambda.html#createFunction-property)
Lambda関数の属性値(メモリ・

元記事を表示

【lambda】インスタンスの状態を取得してlambdaでslackへ通知する

# 概要
インスタンスを立ち上げてテストしたあと、よく停止し忘れるのでlambdaでEC2/RDS/ElastiCacheの状態を確認し、不要なインスタンスが起動中であればslackで通知する処理を作る
(強制停止だと不味い場合があるので通知だけ)

# フロー
CloudWatchEventのスケジュール -> lambda実行

# 前準備
lambda実行用に以下のポリシーがついたロールを用意
・AmazonEC2ReadOnlyAccess
・AmazonElastiCacheReadOnlyAccess
・AmazonRDSReadOnlyAccess

# コード

“`
import boto3
import json
import urllib.request

ALLWAYS_RUNNING_EC2_INSTANCE_ID_LIST = [
‘i-hogehoge’, # hogehoge
]
AS_INSTANCE_NAME_LIST = [
‘auto-scale-instance-name’,
]
ALLWAYS_AVAILABLE_RDS_I

元記事を表示

LambdaのIP固定

実行毎に変わるLambdaのIPを固定。
呼び出し先のAPIにIPをホワイトリスト登録するなどで利用。

## 構成図

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406130/b3ee9513-b85e-63fc-a15f-e068edcb559a.png)

## 環境

1. VPCを1つ用意する。
2. サブネットとルーティングテーブルを2つずつ用意し、それぞれアタッチする。
3. インターネットゲートウェイを作成し、VPCにアタッチ
4. パブリックサブネットのルーティングテーブルの`0.0.0.0/0`をインターネットゲートウェイに向ける。
5. EIP確保、NATゲートウェイ作成、プライベートサブネットのテーブルの`0.0.0.0/0`をNATに向ける。

## Lambdaの作成/配置

1. IAMロールの作成。ポリシーは`AWSLambdaVPCAccessExecutionRole`
2. Lambda作成。
3. LambdaコンソールのVPCを編集し、上記

元記事を表示

[AWS] SAM + Lambda(Python)で、PythonライブラリをLayerに追加して利用してみる

# SAMのインストール
「[[AWS] Serverless Application Model (SAM) でAPI Gateway + Lambda + DynamoDBなサンプルを作成してみる](https://qiita.com/herohit-tool/items/5b0fe520f6f28fb5b4bc)」を参照ください。

なお、今回のサンプルに限っていうと、DynamoDBをローカルに持つ必要はないので、Dockerのインストールは不要です。

# プロジェクトの作成
では、例によって、HelloWorldベースのプロジェクトを作成していきましょう。

“`bash
$ sam init –runtime=python3.8
Which template source would you like to use?
1 – AWS Quick Start Templates
2 – Custom Template Location
Choice: 1

Project name [sam-app]:

Cloning app templates from htt

元記事を表示

[AWS] CodeStarを使うと、Lambdaで動作するSpring(Java)のプロジェクトをたった3分で構築できるのです!!

# CodeStar
AWS CodeStarは、アプリケーションを迅速に開発・デプロイすることができるための環境を構築することができます。
いくつかのテンプレートが用意されており、マネジメントコンソール上からポチポチと選択していくだけで、開発プロジェクトが構築できてしまいます。

## 構築される環境

– コードリポジトリ(CodeCommitと、GitHubを選択可能)
– CodeBuilde環境
– CodePipeline環境
– アプリケーション
– IDE(Cloud9選択時)

## 料金
CodeStar自体は料金は発生しません。
CodeStarによって構築されるコードリポジトリや、パイプライン、デプロイされたアプリケーションに係るリソース使用料のみです。

## 注意事項
リージョンに東京リージョンを選択すると、IDEにCloud9を選択することができません(2020年8月現在)。
今回はCloud9で環境を構築したいので、リージョンにバージニア北部(us-east-1)を選択することとします。

# 環境構築手順
まずは、マネジメントコンソールで、サービスよ

元記事を表示

S3で色々お試しして遊んでみる(VPCエンドポイント&静的Webホスティング性能編)

# はじめに
S3。単なるマネージドでサーバレスなバックエンドストレージなだけでなく(いや、それだけでも充分すごいんだけど)、暗号化できたり、セキュアアクセスができたり、ファイルの中身にクエリ発行できたり、ウェブサイトのホスティングができたり、イベントトリガになったり、なんだか色々できてすごいぞ!

これを使い倒さずに、毎回「とりあえずバケット作っておくか」な使い方をしているだけではもったいない!

ということで今回は、色々ある機能の内、VPCエンドポイントと静的Webホスティングの機能について触れてみる(いずれもさわりだけなので、たいした検証にはなっていないのだが……)。

# VPCエンドポイント
VPCエンドポイントの詳細は[公式](https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/vpc-endpoints.html)を見てもらうと良い。
要するに、S3のAPIはインターネットに口を向けているので、何も考えずにVPCからaws cliを実行したりすると、インターネットを通ってしまう。内部通信をしたいのに!というときに利

元記事を表示

【AWS】Amazon SNSからHTTP/Sで通知する時、エンドポイントでやることを調べた

# はじめに
Amazon SNSを使ってHTTP/SでAPIを叩いていきます。
ここでは各AWSサービスの説明は省きます。
AWS超初心者です。

# 目的
– Amazon SNSからHTTP/SでAPIを実行する。
– Amazon SNSからWEBAPIを実行するとき、エンドポイント(受信側)でやることはなにか調べる。
(記事がほとんど見つからなかった)

# 構成
今回は、APIはAPIGateway + Lambdaで用意。
![amazon_sns_image.dio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/395395/ada46e8f-8a2d-d9db-7858-875a73b593ef.png)

# エンドポイント(受信側)でやること
[AWSの公式ドキュメント](https://docs.aws.amazon.com/ja_jp/sns/latest/dg/sns-http-https-endpoint-as-subscriber.html)を見たら、やることは大きく分

元記事を表示

AWSサーバレスで(SPAではなく)画面遷移型のWebアプリをつくる

# 経緯
AWSサーバレスを採用してWebアプリ(画面)を作ることになりました。コンシューマ(一般ユーザ)向けの画面ではなく、企業向けの管理画面です。

メンバーの皆さんにReactとかを学んでいただく時間的な余裕はなかったため、SPAではなく、メンバーの皆さんに経験のある「画面遷移型」の構成にしました。

ただ、AWSサーバレスで画面遷移型のWebアプリを作る、という事例を見つけることができず、実現方式をあれこれ考える必要がありました。構成が固まるまでに悩んだことや、自分なりの解を記事にすることで、同じようなことに悩まれている方のヒントになればと思ってます。

# アーキテクチャ

スクリーンショット 2020-08-08 21.04.25.png

ポイントは以下のとおりです。

* Lambdaでは[aws-

元記事を表示

Nuxt.jsをAWS Lambdaで動かす。【TypeScript編】

# 概要

vue.jsのサーバサイドレンダリングで行う[Nuxt.js](https://ja.nuxtjs.org)をAWS Lambda上で動かしてみます。あくまでも試験的に試すことが目的の記事です。もし,本番サービスでの導入する場合には慎重な議論をお願いします。

なお、この記事は以前私が書いた[Nuxt.jsをAWS Lambda上で動かす.サーバレス・サーバサイドレンダリング](https://qiita.com/hiroyky/items/ff955af81df67c30b852)をTypeScriptでも実現できるようにしたものです。JavaScriptで書きたい人はリンク先を参照して頂きたいと思います。なお、内容自体はこの記事単体で完結します。

# 構成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73358/db485ca9-f538-85aa-09c9-119db83f8e0c.png)

– AWS Lambdaでnuxt.jsを可動させる
– API Gat

元記事を表示

OTHERカテゴリの最新記事