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

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

AWS LambdaでRESTでデータ取得してSplunkに送信してみる

#はじめに
– RESTで取得してSplunk or Splunk Cloudに取り込みたいデータがある
– Add-onがあればいいんだけど、ないものはない
– Add-on作るのめんどい
– ローカルでREST叩くスクリプト動かすとしても24時間稼働するマシン用意するのもコストがかかる
– うーん、、、AWS Lambda試してみるか → **何これすごい!** というお話です

#環境
– Lambdaからアクセス可能するためEC2などでグローバルIPを持つSplunk Enterprise、もしくはSplunk Cloud
– AWS Lambda

#設定手順の概要
1. SplunkでHEC設定
2. AWS Lambdaで関数作成
3. CloudWatchでLambdaを定期実行化

#設定手順
##1. SplunkでHEC設定
まずはAWS Lambdaからデータを受け取るためのHECを設定します。
ここは通常通りです。

1. 設定 > データ入力
2. HTTPイベントコレクターの [+ 新規追加] をクリック
3. 名前を適当に入力して [次へ] をクリック

元記事を表示

【AWS IoT】Greengrass Coreデバイス上でLambdaを起動し、ローカルファイルをS3にアップロードする際の9個のハマりどころをまとめてみた。

#はじめに
AIカメラ等のプロジェクトでほぼ必須(だと思います)の「Greengrass Coreデバイス上でLambda(boto3)を動かしローカルファイルをS3にアップロードする」手順と注意点をまとめました。エッジコンピューティングの基礎でもある機能で、一見すごく簡単そうですが、筆者自身かなりハマってしまいました。ラズパイの初期設定から最後の画像のアップロードまでハマりどころが9つあるのでそれを実際の手順にそって解説しています。
(ちなみにGreengrassはversion1を使っています)

#概略図
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1001699/c8c852f3-690f-1c49-25c8-42e5eeda2878.png)

#今回やることの大まかな流れ

**初期設定(OSインストール、ラズパイの初期設定、PCからラズパイへSSH接続、Greengrass Coreのインストール&Greengrass初期設定、Filezilla等FTPソフトウェアでラ

元記事を表示

Greengrass(V1)の自動起動設定&コアデバイスの接続情報をLambdaで取得

#はじめに
Jetson nanoにGreengrassをインストールしていますが、毎回電源を入れる度にGreengrassを起動するのが手間でした。
そこで、公式ドキュメントに自動起動の設定方法が記載されている通りに設定をしました。

また、今回はあわせてJetson nanoにssh接続するためのIPアドレスを返すLambdaをJetson nanoにデプロイしました。
結論から言うと、こちらは結果的に不要な作業だったのですが、なぜ不要だったか含めて書き残しておきます。
#1 Greengrassの自動起動設定
公式ドキュメントにある通り、systemdを利用したGreengrasの自動起動設定を行います。
参考:[Init システムを設定して Greengrass デーモンを開始する](https://docs.aws.amazon.com/ja_jp/greengrass/v1/developerguide/gg-core.html#start-on-boot)
##1-1 ユニットの設定ファイル作成
最初にsystemdでGreengrassを扱えるようにユニットファイルを作

元記事を表示

[Nest.js] API Gateway + Lambda + DynamoDB 構成を実現してみた

#概要

普段、API Gateway + Lambda でAPIを作成する時は、特にフレームワーク等は使用せず一から作成していたのですが、今回機会があり Nest.js を利用したので備忘録として残しておきます。
Next.jsとはなのですが、
・TypeScriptで書けるNode.jsフレームワーク
・GraphQL、TypeORMなどもサポートしている
・基本的な構成が用意されていたり、デコレータを利用したりと、効果的かつ安易に作成することができる
みたいな感じとのことです。

公式サイト
https://docs.nestjs.com/

#前提
・AWSを利用できる環境
・基本的なTypeScriptの知識

##NestJSインストール
NestJSはnpmパッケージとして提供されています

“`
npm install @nestjs/cli -g
“`

インストールしたCLIを使って、プロジェクトの作成を行います。

“`
nest new my-app
“`
インストレーションに従ったあと、プリケーションサーバーとして、以下コマンドで起動してみます。

元記事を表示

AWSでCloudWatch Logsのフィルター後のURLの作り方

## やること
CloudWatch Logsのフィルタリング後(filter pattern)入力後のURLを生成

## 環境
python 3.8
aws

## 背景
CISベンチマークに関するアラート通知を作った。
AWS公式ドキュメントに記載のある、フィルタリング条件で、CloudWatch Logsでフィルタリング後のURLを通知したかった。
https://docs.aws.amazon.com/ja_jp/securityhub/latest/userguide/securityhub-cis-controls.html

## やってみた

実際に[CIS3.1](https://docs.aws.amazon.com/ja_jp/securityhub/latest/userguide/securityhub-cis-controls.html#securityhub-cis-controls-3.1)を例にやってみる。
CloudWatchLogsには検索文字列、開始日時、終了日時の3つを指定できるため、それぞれ作成して最後にくっつける。

### フィル

元記事を表示

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)間でとりあえず通信ができるところまでの手順と簡単さ、注意点についてまとめてみた。コード更新のしやすさ、管理のしやすさなどは考慮に入れていない。初心者の記事なので、間違っている箇所があるかもしれないのでご了承いただきたい。

※2021年3月19日追記:ラズパイ上でGreengrass Lambdaを動かしローカルファイルを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チカま

元記事を表示

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”: {

元記事を表示

OTHERカテゴリの最新記事