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

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

Lambda で返ってくる文字列でハマった

# 問題
Lambda、API Gateway を使って Web ブラウザからの入力結果を処理していた。Lambda 関数の戻り値に不要なダブルクォーテーションがついていた。

以下のような Lambda 関数を作成した。

“`lambda_function.py
if bool:
return ‘Exist’
else:
return ‘NotExist’
“`

lambda_function.pyの戻り値がresponse.text()に格納されるのだが、bool が True であるにも関わらず、result === ‘Exist’ の結果が false になっていた。

“`main.js
fetch(url, requestOptions)
.then(response => response.text())
.then(result => {
if (result === ‘Exist’) {
alert(‘存在します。’);
} else {
alert(‘存在しません。’);
}
})
“`

ログを見ると、res

元記事を表示

【AWS IoT】AWS IoT初心者がAWS IoTを100時間触って「つなぎ」の部分をわかった範囲でまとめてみた

#はじめに
エッジデバイスとAWSサービス(IoT CoreまたはS3)間でとりあえず通信ができるところまでの手順と簡単さ、注意点についてまとめてみた。コード更新のしやすさ、管理のしやすさなどは考慮に入れていない。初心者の記事なので、間違っている箇所があるかもしれないのでご了承いただきたい。

#1. 対象となる機種
今回エッジデバイス代表としてはよく使われる以下の2つを対象とした。
ESP32(OSなし)
ラズパイ(Raspbian OS)

##1-1. ESP32
マイコン代表。1000円。ESP8266(500円)に比べてスペックが高いのでZerynthで簡単なPythonが動かせたりAmazon Free RTOSも乗る。NodeREDをかませればAWS IoTとも割と簡単につながる(NodeREDは基本無料)。一番使われているのはArduino IDEでの開発らしい。確かに敷居が低く、ESP32が手元にあればLチカまでの時間は驚きの5分(ESP32のArduino IDEでの開発に関しては[こちら](https://qiita.com/hdmn54321/items/15

元記事を表示

ecsクラスタにあるコンテナたちのヘルスチェックを AWS Lambda(boto3)で実装してみた

## 概要
ECSクラスタ内でバッチ処理を行うコンテナが常駐しているのですが、
ここ最近Fargateのメモリを食い潰してて、よろしくない挙動をしていました。

問題はつくりにあったのですが、それより問題だったのはヘルスチェックが実装されていなかったこと。

そこで既存のコンテナたちを変更することなく、
boto3を利用したヘルスチェックを実装することにしました。

## 図にしてみると
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/927949/2be1e760-26a5-3156-2691-7ebae0145208.png)

元々内部でログ検知の仕組みがLambdaで動いているので、アラート自体はそちらに任せることにしました。
ヘルスチェックのログを別関数でチェックしてもらうイメージ。

## やったこと
とりあえずLambdaだけで構築なので、Serverless Frameworkでやりました。
ただ一点厄介事がありました・・(詳細は後述

## lambda実装

“`p

元記事を表示

【学習メモ】AWS Lambda

#Lambda
サーバーレス。
FaaS(Functions as a Service)
AWS Lambdaはサーバーがなくても、コードを実行することで効率的なアーキテクチャを実現できるサービス。

##特徴
・実行基盤は全てAWSが管理
・AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能
・100ミリ秒単位でコード実行時間に対しての課金でありコスト効率が非常に高い
・オートスケール
・Python/Java/Node.js/C#/Go/Rubyで書かれたコードを実行

##仕組み
イベントの発生がトリガーとして、Lambdaコートが実行される。

##利用モデル
###Pushモデル
・AWSサービスとカスタムイベントが直接実行することによって、Lambdaへイベント通知して、コードを実行する。
※コード実行の順序は保証されない

###Pullモデル

・LambdaはDynamoDBとKinesisなどのデータ処理へポーリングを行い、コードを実行する。
※一度ストリームに入れることによって、イベントの順序を保つことができる

####パーミッ

元記事を表示

aws-sdkを使用して、sesでメールを送信する

lambda内で処理した結果をsesを使用してメールで送信する。

## 環境
“`
serverless -v
“`
>Framework Core: 2.1.1
Plugin: 4.0.4
SDK: 2.3.2
Components: 3.1.3

“`
node -v
“`
>v14.7.0

## 目次
1. メールアドレス登録
2. serverless create
3. コード追加

## メールアドレス登録
awsマネジメントコンソールにアクセス、sesのコンソール画面に移動。
![スクリーンショット 2021-03-14 19.06.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1022774/b2cbc0fa-2a27-243f-2a5e-ac9498bb9442.png)

画面上部のVerify a New Email Addressをクリックする。
![スクリーンショット 2021-03-14 19.07.14.png](https://qiita-image-s

元記事を表示

LambdaでAWS利用料のグラフをS3に保存し、Slackに通知する

## はじめに
AWSアカウントの管理者になってから、ほぼ毎日Cost Explorerで利用料を確認し、料金の急増がないかをチェックしています。ただ、

– 手動での確認はやはり手間がかかり、もっと手軽な方法でやりたい
– 利用料の状況をチームメンバーにも共有し、コストの管理意識を芽生えてもらいたい

というニーズがあり、日々の利用料をSlackに通知するためのLambda関数を実装しました。

## 参考記事
まず、アーキテクチャとソースコードはこちらの記事を参考し、一部カスタマイズして作りました。(@hayao_kさん、ありがとうございました!)
[日々のAWS請求額をグラフ付きでSlackに通知する](https://qiita.com/hayao_k/items/5a1e279ae4e142ca525a)

ただ、弊社のSlackワークスペースにおいては、ファイルアップロードのための `files:write` スコープが規則上認められていないため、アーキテクチャを一部変更し、Slackへの直接アップロードではなく、一度S3に保存したうえ、グラフのオブジェクトURLをリンクと

元記事を表示

【AWS】Lambdaの初回起動を早くする方法

# はじめに
個人請負でとあるサイトをサーバーレスで構築しています。
よくあるAmazon API Gatewayでリクエストを受けてAWS Lambdaで処理を行って結果を返却する簡単な構造なのですが・・・Lambdaからのリクエストが初回だけとにかく遅い!
原因は関数実行前の準備に時間がかかるからです。
Lambdaというサービスの内部では、初回実行時に実行する関数のパッケージのロードや展開、ランタイムの起動など色々な**「実行前準備」**をやってくれています。
しかし、一定時間関数が呼び出されないと**「実行前準備」**がアンロードされてしまうのです。そのため実行頻度の低いLambdaの場合は毎回遅い初回実行になってしまいます。

今回は色々と試してみてなんとか解決した方法を載せておきます。

#前提
この方法が有効なケースは以下の場合です。

+ Lambdaの実行頻度が低い。※30分に1度程度しか実行されないなど

デプロイパッケージのサイズをランタイムに必要な最小限のサイズにしていることやJavaよりPythonを選択している等も速度に影響してきますが今回は実行頻度が低い場

元記事を表示

AWS CDKでApi Gatewayを設定しLambdaから読み出してローカル実行を行ったメモ

## 概要
[前回はLambda Layerを導入した。](https://qiita.com/hibohiboo/items/b8b575d7194aef3d1b57)
今回はAPI Gatewayを使ってHTTPでLambda Functionsを叩けるようにする。

[ソースコード](https://github.com/hibohiboo/develop/tree/903dca887820b1fc29a33d41e9aae8c07aa1eaa1/tutorial/lesson/aws/typescript/projects/cdk_sample)

## やること
* ローカル実行
* POSTのテスト
* GETでパラメータを取得できることのテスト

## やらないこと
デプロイ

## コード
### GET用のFunctionsの追加

“`ts:src/lambda/handlers/get-echo.ts
import { APIGatewayProxyHandler } from ‘aws-lambda’;
import * as response from ‘

元記事を表示

SAM+Node.jsでLambdaをInvokeした際に「Error: Cannot find module ‘luxon’」が出た時の対処法

## 問題点
以下でluxonをインストール

“`
npm install luxon –save-dev
“`

package.jsonに以下が追加される

“`package.json
“dependencies”: {
“luxon”: “^1.26.0”
}
“`

SAM+Node.jsでLambdaをInvokeした際に以下エラー発生

“`bash
sam local invoke TranslationFunction –event request.json
Invoking index.handler (nodejs12.x)
Skip pulling image and use local one: amazon/aws-sam-cli-emulation-image-nodejs12.x:rapid-1.20.0.

(中略)

2021-03-12T22:47:33.403Z undefined ERROR Uncaught Exception {“errorType”:”Runtime.ImportModuleError”,

元記事を表示

Lambdaの実行結果をS3にアップロードする

## 記事について

* 基本的なLambdaの設定などについては省略し、S3にアップロードする点についてのみ説明

## 環境
* AWS Lambda
* Serverless Framework standalone (
* Framework Core: 2.11.1 (standalone)
* Plugin: 4.1.2
* SDK: 2.3.2
* Components: 3.3.0

## Serverless.ymlにS3アクセスの設定を追加する

“`
provider:
iamRoleStatements:
– Effect: Allow
Action:
– s3:PutObject
Resource: “arn:aws:s3:::/*”
environment:
S3_BUCKET:
“`

## 実行ハンドラ

“`
import boto3
import os
import json

def hand

元記事を表示

AWS CDKでLambdaのTypescriptをトランスパイルしてローカル実行したメモ

## 概要
AWS CDKでのビルドに苦労したので備忘録。

[ソースコード](https://github.com/hibohiboo/develop/tree/8b29fac27168801aca180cb977cca2accf48b614/tutorial/lesson/aws/typescript/projects/cdk_sample)

## やること
* AWS CDKを使ったトランスパイル
* SAMを使ったローカル実行
* 設定によってどんなファイルが出るかの確認

## やらないこと
* デプロイ

## 環境
* Windows Home
* docker desktop 3.2.1
* wsl2 ubuntu20
* SAM CLI, version 1.20.0
* aws-cli/2.1.28 Python/3.8.8 Windows/10 exe/AMD64 prompt/off

## 前提知識

* [CDK Workshop][*1]にざっくり目を通していること
* [cdk コマンドの機能を 実際に叩いて理解する][*2]の表をざっくり見ているこ

元記事を表示

[AWS] Lambda + API Gateway でサーバーレスWeb APIを作る ②Amazon API Gateway HTTP API篇

# この記事は

[[AWS] Lambda + API Gateway でサーバーレスWeb APIを作る ①Lambdaファンクション篇](https://qiita.com/akumachan/items/1b6e36ec6dc3a7437934)の続きです。

# HTTP APIとREST API
Amazon API GatewayではHTTP APIとREST APIという2種類のAPIを作成できます。
違いは公式を見てみてください。
[HTTP API と REST API 間で選択する](https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/http-api-vs-rest.html)

– HTTP APIの方が**安価**
– REST APIの方が**現状では機能が多い**
– **OIDC/OAuth 2.0認証**をサポートしているのはHTTP APIだけ

今回のゴールはどちらの方法でも達成できそうです。今回はHTTP APIで実装してみます。

# 今回の実装
今回

元記事を表示

AWS Lambda(python)でデータを暗号化する際のメモ

初心者の苦闘ログとして残しておきます。
# やりたかったこと
– AWS Lambda内で画像を暗号化して、S3に保存すること
– S3に保存されたデータは、復号鍵を持つまたは復号権限を持つ人が、復号して取得できること
– Pythonでやること

# 事前準備
– ① Lambdaを作成する
– ② KMSのマスターキーを作成する
– ③ KMSのデータキーを作成し、`CiphertextBlob`をLambdaの環境変数に設定する
– ※アクセス権限はLambda、KMSともに設定してくだい

# Lambdaの処理の流れ
– ②で作成したKMSを用いて③のデータキーを復号し、平文の暗号化キーを取得
– 画像データを取得
– 平文の暗号化キーをもとに、画像データを暗号化
– 暗号化した画像データをS3にPUT

# ソースコード
“`lambda_function.py
import os
import json
import urllib.parse
import boto3
import base64
from Crypto.Cipher import AE

元記事を表示

Greengrass(V1)のコアデバイスにLambdaをデプロイ・実行してみた

#はじめに
Greengrassの特徴の1つとして、エッジ環境でLambdaを実行できることがあげられます。
前回Greengrass(V1)をインストールしたJetson nanoに対して以下を実施したので、その結果をまとめます。

* Lambdaを作成してエッジ環境(以下、Jetson nano)にデプロイ
* Jetson nanoにデプロイしたLambdaの動作確認
* IoT Coreに永続的にMQTTメッセージを送る
* IoT CoreからのMQTTメッセージでLambdaを起動→IoT CoreへMQTTメッセージを送る

参考(前回):[Greengrass(V1)をクイックスタートでインストールしてみる](https://qiita.com/kt-yt/items/e2db8520c207861f2f5f)
#1 Lambda関数の作成
Jetson nano上で実行するLambda関数を用意します。
今回は「AWS IoT Greengrass Core SDK for Python」を利用しました。
#1-1 greengrasssdk for Pytho

元記事を表示

【AWS】Lambdaで別アカウントのリソースにアクセスする

##目的
* 何回かやって調べながらやったためメモ的に
* lambdaで別アカウントの各リソースにアクセスしたい
![Untitled Diagram (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643364/aced822c-25b6-e378-a9bc-a86f58f367a1.png)

##準備するもの
* アカウントA
* Lambda用IAM Role
* Lambda関数
* アカウントB
* assume role用 IAM Role

## 作成

###アカウントB
#### Role
ポリシーはアクセスしたいリソースによって変える

信頼関係を以下のように編集する

“`
{
“Version”: “2012-10-17”,
“Statement”: [
{
“Effect”: “Allow”,
“Principal”: {

元記事を表示

AWS Lambdaで猫の画像を1時間に1回 Slackに投稿する ?

# AWS Lambdaで猫の画像を1時間に1回 Slackに投稿する ?

今まで働いてきた会社には、どの会社にも当たり前のように猫に関連するチャンネルがありました。

今回は、猫の画像で時報をお知らせするAWS Lambdaの関数を作ってみたいと思います。

## 猫の画像を準備する ?

画像を自分で集めたり、それをストレージに置いてインデックスするのは大変です。

今回は、Cat as a ServiceであるThe Cat APIを利用します。

[The Cat API – Cats as a Service](https://thecatapi.com/)

### 余談 ?

犬派の人も安心してください、Dog as a ServiceであるThe Dog APIもちゃんとあります。

[The Dog API – Dogs as a Service](https://www.thedogapi.com/)

### Pricing ?

気になるお値段ですが、今回はFreeプランで十分です。

![スクリーンショット 2021-03-11 12.18.26.png](

元記事を表示

AWS_SAMを使ってLNEbotを爆速で開発する

# AWS_SAMを使ってオウム返しLINEbotを作る

こんにちは!
突然ですが、サーバレスは好きですか?僕は大好きです。
ただ、クラウドのリソース管理とかよくわからず、なかなか最初は手が出しにくい気がします。

今回はAWSのSAM(Serverless Application Model)を使ってサーバレスAPIを構築してLINEbotを作っていきます。
構築したリソースは一括削除ができるため、サーバレスアプリを手軽に体験することができます。

– aws_samとは
– サーバレスアプリケーションモデル
– サーバレスアプリケーション構築用のオープンソースフレームワーク
– yamlファイルをもちいてモデリング
– デプロイ中sam構文をCloudFormation構文に変換および拡張することで、サーバレスアプリケーションの構築を高速化することができる

★サーバレスアプリ構築用のフレームワークのようなもの、AWSに自動でサーバレスAPIの構築を行ってくれます。
★YAMLに記述したSAM構文をCloudFundationに適用し

元記事を表示

【AWS】AWS初心者がRoute53+SES+S3+Lambdaを使って、独自ドメインに送られてきたメールをGmailに転送してみた

皆さんこんにちは!!

今回はRoute53で登録した独自ドメインを使って、メールをGmailで受け取る方法を書いていきます。

例えば、“support@example.com“に送信したメールを自分のGmail“mymail@gmail.com“に飛ばすイメージです。

実際に“suppor@gmail.com“で受け取ったメールをS3にプッシュするのですが、いちいちS3にアクセスしてダウンロードして見るなんてやってられないですよね。

なので、Gmailに飛ばしちゃいましょう!!

#はじめに#

Route53で独自ドメインを登録してある前提で話を進めていきます。

なので、まだRoute53で独自ドメインを登録していない方は登録してから本記事をご覧ください。

登録方法は色々あると思うので、僕が書いた記事でよければご覧ください。

[AWS初心者がお名前ドットコム、S3、CloudFront、CertificateManager、Route53を使ってHTTPS化されたサイトを公開してみた(パート①)](https://qiita.com/akki-memo/it

元記事を表示

[Python]AWS Lambda + API Gateway

この記事ではAWSのApi GatewayからLambda関数を引数と共に呼び出し、引数で指定した企業の株価を取得するやり方を解説します。

Pipenvを使っていてDocker, Docker-composeがインストールされていることが前提です。

ライブラリは全てpipenvでインストールしてください。

スクリプトのディレクトリ

株価を取得する関数とLambda関数を作成する

“`python:testscript.py
import json
import pandas_datareader.data as web
from datetime import date,timedelta

def StockData(stock, start, end):

stock = web.DataReader(stock, ‘yahoo’, start, end).reset_index()

return stock

def lambda_handler(event, context):

# event[‘rawQ

元記事を表示

Lambda + API Gateway におけるエラーハンドリングの考察

[AWS Lambda](https://aws.amazon.com/jp/lambda/) と [AWS API Gateway](https://aws.amazon.com/jp/api-gateway/) を使えば、簡単に Web API を作成することができます

しかし、**エラーハンドリング**に関するドキュメントや記事に自分にしっくりするものがなく、迷走していたので、ここで自分なりの考察をまとめます

# 前提条件
ここで扱う API Gateway と Lambda は**カスタム(非プロキシ)統合**であることを前提に話を進めます

プロキシ統合とカスタム統合についての詳しい説明は省きますが、簡単に説明すると、プロキシ統合は API Gateway に飛んできたリクエストをそのまま Lambda 関数に `event` として入力します。出力も同様に Lambda 関数からの結果を返します。カスタム統合は、飛んできたリクエストをマッピングテンプレート等で `event` に入力するデータを変換し、Lambda 関数を呼び出す形で実行します。出力も同様にマッピングテ

元記事を表示

OTHERカテゴリの最新記事