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

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

[API Gateway→ Lambda] Lambdaでクライアント情報を取得してみました

場合によっては、Lambda Functionsでクライアント情報を取得する必要があります。
たとえば、クライアントのIPアドレスを確認します。

API Gateway(Lambda Proxy)→ Lambda Functions(Golang)を構築してみました。
Lambdaで、APIGatewayを呼び出したクライアントの情報を取得しました。

Golangのサンプルコード:
“`
package main

import (
“context”
“fmt”
“github.com/aws/aws-lambda-go/events”
“github.com/aws/aws-lambda-go/lambda”
)

func handleRequest(ctx context.Context, request events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) {
strInfo1 := request.RequestContext.Identit

元記事を表示

AWSLamdbaのエフェメラルストレージ10GB拡張を試してみた

# まえがき
普段サーバサイドエンジニアをしています。
今回はじめてQitaに記事を掲載します。

# 概要
3/24のLambdaのアップデートにてエフェメラルストレージが最大10GBまで対応できるようになったため、実際に使ってみました。
https://aws.amazon.com/jp/about-aws/whats-new/2022/03/aws-lambda-configure-ephemeral-storage/

元々Lambdaには「ファイルシステム」からEFSを設定することが可能でしたが、
VPCに接続する必要があったり、スループットが必要な案件ではかなり高価なEFSを使う必要がありました。

# 設定
マネージメントコンソール上の「設定」から「一般設定」に「エフェメラルストレージ」が増えており、
こちらから更新すること可能ですが、既にServerless frameworkで対応されていましたので、こちらからデプロイしてみたいと思います。
※「エフェメラルストレージ」の機能を使用するにはServerless framework 3.10.0以上を使用する必要がありま

元記事を表示

Redshift Data APIを使ってS3のJSONデータを取り込む

Redshiftへ取り込みたいデータがWeb APIでしか提供されていない場合にLambdaでAPIを叩いて取得したデータをRedshiftに取り込むということになると思います。今回はそのような実装したので紹介します。細い説明は省きます。

#### 1. Redshiftのデータベースとテーブルを作成する
#### 2. LambdaでRedshift Data APIを使ってS3にあるJSONデータをRedshiftに取り込む

今回のアーキテクチャは以下の通りです

# IAM周りのセットアップ

#### 1. LambdaのIAMロールに「AmazonRedshiftFullAccess」ポリシーをアタッチする

#### 2. Redshift用のIAMロールを作成 & 「AmazonS3ReadOnlyAc

元記事を表示

CloudFrontによる静的Webホスティング+署名付きURLの生成

# はじめに

LambdaでCloudFrontの署名付きURLを生成し、S3オブジェクトのキャッシングを実装。

S3とCloudFrontの直接参照は不可とする。

## S3

– 新規でバケットを作成し、ファイルをアップロード
– アクセス許可:パブリックアクセスを全てブロック
– 静的ウェブサイトホスティング:無効

## CloudFront

– 新規ディストリビューションを作成
– オリジンドメイン:作成したS3バケット
– S3バケットアクセス:
– OAIを使用(新規で作成)
– バケットポリシー:自動更新

キーペアを生成後、「ビューアーのアクセスを制限する」を変更

## キーペアの作成

今回はOpenSSLで生成

“`
openssl genrsa -out private_key.pem 2048
openssl rsa -pubout -in private_key.pem -out public_key.pem
“`

public_keyをAWSにアップロード

– CloudFrontの左メニューから「パブリックキー」を選択

元記事を表示

LambdaでBasic認証掛けようとしたらLambda@Edgeが無い時

東京リージョン(ap-northeast-1)だとアクションのプルダウンメニューにLambda@Edgeが表示されない
バージニア北部(us-east-1)で組み込むこと

![スクリーンショット 2022-04-05 17.00.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23195/20d085d6-8004-dc76-3fff-a5ce404f46e0.png)

元記事を表示

IoT CoreからAMP(Amazon Managed Service for Prometheus)へデータ登録するLambdaを作った話

IoTデータをPrometheusに入れてGrafanaで見れたらおしゃれな気がする。理由はないけど。

しかーし

**IoT CoreのルールアクションにPrumetheusがない(泣)**

2022/4/3現在の指定できるアクションはこちら。

![ap-northeast-1.console.aws.amazon.com_iot_home_region=ap-northeast-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/2cd343f6-a326-b811-93fe-932ab775761d.png)

ないならLambdaで作ろうと思い立ち、作ったのがこちら。

https://github.com/moritalous/iot2aps-lambda

構成はこのようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/85d2428e-16b0-2ab

元記事を表示

東京ドームのイベント情報をSlackに通知させてみた

# はじめに
私が通っている大学のすぐ近くには東京ドームがあり,コロナ禍に入る前はライブ帰りの客で駅や電車がやたら混むということがよくありました.
今年に入ってからイベントが再開されてきていることもあり,またこういったことが起こる気がしたので,予めイベント情報を知れる仕組みを作りたいと思いました.

# 使用した技術
* Go
* goquery
* Serverless Framework
* AWS Lambda
* Github Actions

# プロジェクトの作成
予め作成したディレクトリに移動した上で,以下を実行します.
“`
$ sls create -t aws-go-mod
“`
そうすると,最低限動くServerless Frameworkのプロジェクトが作成されます.
もしServerless Frameworkをインストールしていない場合は,以下のコマンドでインストールしましょう.(Node.jsが必要)
“`
$ npm i -g serverless
“`
or
“`
$ yarn add global serverless
“`

# 実装

元記事を表示

LambdaでS3のファイルを読み書きする

Lambda(Python)からS3へファイルをアップロードしたり、読み書きしたりすることがあったので書き記しておきます。

権限周りの話は以前こちらに書いてあるので参考にして下さい ↓↓↓

https://qiita.com/ymktmk/items/174ab4fecb14a0a3c7e0

## Client APIとResource APIの違い

https://aws.amazon.com/jp/sdk-for-python/

・Client APIはレスポンスが辞書型なので必要な情報を取り出しにくい
・Client APIはHTTP API 操作との 1 対 1 のマッピングが提供される
・Resource APIの方がオブジェクト指向っぽく書ける
・Resource APIが用意されていないことがあるサービスもある

* Resource APIはresponse.bodyというようにオブジェクトを取得してから属性を参照できると書いてあったが自分はなぜかレスポンスが辞書型であった。よく分からない。

## S3にファイルをアップロードする

* 上書きするときもs3

元記事を表示

Lambdaで画像分類AIをサーバレスAPI化して得た5つの知見

AWS上でAIを実現する場合は通常SageMakerを使いますが、軽量なモデルを使う場合であればサーバーレスで実現することもできると思い環境を構築しました。実際に構築することで得た知見を5つ紹介します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1180441/f7e37019-ecf3-e41e-8f7f-81fd3c49541c.png)

以下のチュートリアルで作成した犬と猫を見分けるモデルを使用しました。

https://www.tensorflow.org/tutorials/images/classification?hl=ja

// 余談ですが、言語表示を英語にすると、犬と猫の識別ではなく、花の分類に題材が変わります。

# TenslorFlowのライブラリーはCPU版を指定する

Lambdaでの推論はCPUで行いますので、TensorFlowのライブラリーもCPU版を指定します。
また、内部で使用するKerasのバージョンも合わせておかないとエラーとなりま

元記事を表示

[AWS SAM] Preflight(OPTIONS)をLambda関数で自作する(複数originの許可対応)

# この問題にぶつかるまでの経緯

– 単純でないリクエストでPreflightリクエストが送られるが、そこで特定の複数originからのリクエストのみパスさせたい
– 本番環境では特に `Access-Control-Allow-Origin: “*”` はだめなので…
– しかし、`Access-Control-Allow-Origin: “https:hoge.com,https:huga.com”` のような形式で複数のorigin を指定することはApiGatewayの仕様上できないらしい
– ではどうするか?次のように考えた
– PreflightリクエストはOPTIONS
– OPTIONSメソッドを自分で作ったLambda関数に統合して、定義したホワイトリストに合致するoriginからのリクエストだった場合パスさせるようにする

# 対応方法まとめ

– 複数originのCORS許可対応をさせたいメソッドについて
– (下記手順内の例ではExampleFunctionというGE

元記事を表示

API Gatewayを試してみた

# 背景・目的
– [LambdaからDynamoDBを操作する](https://qiita.com/zumastee/items/93f9301e7c8cea8883c0)で作成したLambdaをWebリクエストをもとに実行したい。
– 今回は、API Gatewayを使って実行する。
– 本ページでは、まずAPI Gatewayのチュートリアルを対象とし、実際に接続する方法は次回以降に試す。
# 概要
## API Gatewayとは
– REST、HTTP、WebSocketなどのAPIを作成、公開、維持、モニタリング、セキュア化するためのサービス
– 最大で数十万個の同時 API コールの受け入れ処理に伴うすべてのタスクを取り扱う

## 特徴
– ステートフル (WebSocket) およびステートレス (HTTP と REST) API のサポート。
– 強力で認証メカニズム
– IAMポリシー
– Lambdaオーソライザー関数
– Cognitoユーザプール
– API発行するための開発者ポータル
– 変更を安全に進めるためのCanaryリリ

元記事を表示

LambdaからDynamoDBを操作する

# 背景・目的
– 以前、「[VPC内のLambdaからインターネットに接続する](https://qiita.com/zumastee/items/21c77e66156a8d26856e)」と「[DynamoDBを試してみた](https://qiita.com/zumastee/items/ef8a5c855161f9e4ba92)」で作成したLambdaとDynamoDB(以降、DDBという。)を使用してQiitaの記事一覧を取得し、その内容をDDBに登録する。

# 内容
## 前提
### DynamoDBテーブル
– DDBのテーブル名は「qiita_user_articles」、各項目は以下の通りとする。

| 項目名 | キー/インデックス | タイプ| 例|
|:— | :—- | :—- | :—- |
| user_id | パーティションキー| 文字列 |test|
| article_id | ソートキー | 文字列 |00001|
| title | グローバルセカンダリーインデックス | 文字列|test title|
| url |

元記事を表示

Lambdaを定期実行する

# 背景・目的
– [VPC内のLambdaからインターネットに接続する](https://qiita.com/zumastee/items/21c77e66156a8d26856e)で作成したLambda関数を定期的に実行する。
– 定期実行には、EventBridge Ruleを利用してみる。

# 内容
## 実装
### 1. EventBridgeルールの作成
– EventBridgeのルールをクリックしトップ画面から、「ルールを作成」をクリックする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/768de97d-5740-9d9b-52a7-8d8ba39fc58b.png)

### 2. ルールの詳細
– 名前と説明、イベントパス、ルールタイプ「スケジュール」を選択して「次へ」をクリックする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/6

元記事を表示

Pythonの組み込みhash関数を使ってバグを作った話

# 経緯と問題

DynamoDB で効率よいシャーディングの実施のために、キーの末尾に特定の識別子を付与する方法はベストプラクティスとして公式でも紹介されている。

https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/bp-partition-key-sharding.html#bp-partition-key-sharding-calculated

今回は、このシャーディングを行うためにユーザー固有のID (文字列) を元に識別子を計算したいと考えた。 その対策として、以下のようなコードを書いた。

“`python:バグありなのでこのコードは利用しないこと!
def primary_key(uid: str) -> str:
num = hash(uid) % 10
return f’SampleData.{num:02d}’
“`

[`hash` 関数](https://docs.python.org/ja/3/library/functions.html#hash

元記事を表示

VPC内のLambdaからインターネットに接続する

# 背景・目的
インターネット上のAPIを呼び出して、データを取得したい。
これを、Lambdaで実現する方法を試す。

# 内容
## 概要
– [Qiita API](https://qiita.com/api/v2/docs#get-apiv2tags)の“/api/v2/items“を使用して記事の一覧を作成日時の降順で取得する。

## 前提
– ネットワーク(VPC、サブネット、ルートテーブル)、インターネットゲートウェイ、NATゲートウェイなど正しく設定されているものとする。

## 実践
### Lambda関数の作成

– 上記の他に、予め作成したVPC、サブネット、セキュリティグループを指定する。

### コード
– 以下のコードを書いて、Deploy&Testを実行。
“`
import ur

元記事を表示

S3に格納されたファイルを検知し、EC2上のシェルを自動実行する

### S3に格納されたファイルを検知して、EC2上のシェルを自動実行する(&SNSにて、結果をメールに送信する)

(やった手順)
1.(EC2上)シェルの作成
2.(EC2上)シェルの動作確認
3.(AWS)S3バケットの作成
4.(AWS)Lambdaの作成 & IAMの設定
5.SNSの設定(トピックの作成 & サブスクリプションの作成)
6.動作確認

(省略していること)
・EC2へのsshの接続手順(teratermなどで、接続済みの状態で記載してます)
・EC2のインスタンス名などは、知っている状態で記載しています

### 1.(EC2上)シェルの作成【test.sh】
(※今回は環境の都合上、「hulft」ユーザで作成しています。)
(※合わせる必要がある箇所は、※表記していきます)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518095/9e13d193-f6c9-ba13-ecde-0e56a09e630b.png)

(【test.sh】の中身)
“`

元記事を表示

【AWS】【Salesforce】CTIフローからLambda関数を呼び出す

# 1.はじめに
どうも、ARIの名古屋支社に勤務している愛知県民です♪
(/・ω・)/

今回は少し応用として、**CTIフローからLambda関数を呼び出す方法**について記事にしたいと思います。
以下の記事の内容を組み合わせて、CTIフローからApexクラスのメソッドを、
ApexクラスのメソッドからLamda関数を呼び出すことで実現します。

https://qiita.com/Aichi_Lover/items/7d7e865a8c0ab85ef7e5

https://qiita.com/Aichi_Lover/items/30d58a7213caf8df14cc

この記事がAWSやSalesforceについて勉強中の方の参考になれば幸いです♪
(*^^)v

# 2.用語の説明

## 2.1.Apexとは
Apexとは、JavaベースのSalesforce独自のプログラム言語です。

Salesforce内のオブジェクトの検索や作成をするメソッド等が提供されており、
それらを組み合わせて処理を記述することができます。

Apexクラスとは、オブジェクト指向におけるクラ

元記事を表示

Annotations Frameworkを使って、C#でのAWS Lambda 関数実装をもっと楽にしよう

# はじめに

Visual Studio で AWS Lambda の新しいプロジェクトを作成しようとしたら、`Annotations Framework` という見慣れないプロジェクトがありました。今回はこの子がどういったものであるかを確認していきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36535/563bbcc8-1aa8-fe4b-e74d-7ac82ce28db2.png)

# Lambda Annotations とは?

AWS Labmda Dotnet の Lambda Annotations に関する [README](https://github.com/aws/aws-lambda-dotnet/blob/master/Docs/lambda-annotations-design.md) を確認すると、下記のような説明があります。

> ラムダ注釈デザインは、.NET ラムダ関数を記述するための新しいプログラミングモデルです。大まかに言うと、新しい

元記事を表示

AWS Lambda /tmp領域が10GBまで拡張できるようになったのでディスク読書速度を測定してみた。

# はじめに
いままでLambdaのエフェメラルストレージ(以下/tmp)は512MBまでだったが、2022年3月24日から10GBまで拡張できるようになった。

https://aws.amazon.com/jp/blogs/aws/aws-lambda-now-supports-up-to-10-gb-ephemeral-storage/

そこで512MBと10GBでディスクの読み書きスペックに違いがあるかを確認してみた。

# 結論から
/tmpサイズ増減によるディスク読書速度は変化は見られない。
Lambdaメモリを増やすとディスク読書速度は大幅に向上する。
ファイル読み書きサイズが大きい処理ならばLambdaメモリは大きくする。

# 計測方式
ddコマンドによる簡易的な計測
Amazon linux2からddコマンドコピーおよびzipファイルにしてLambda Layerに登録。

tmp領域のサイズによって書き込みサイズを変化させる。
` 512MBの場合     448MB書き込み = bs=64K count=7k`
`10240MBの場合    9600MB書き込

元記事を表示

【Ruby】Googleカレンダーに服薬記録をつけるAlexaスキル作ってみた

# 背景

最近買ったEcho Show 5で、頓服薬の服薬記録をつけられたら便利だなと思ったことがきっかけです。

– 既存の服薬記録系Alexaスキルだと、Echo Showやスマホの画面で記録を確認することが難しそう
– スマホからの記録の表示や変更・削除はできるだけ楽に実現したい(できれば開発したくない)ので、記録をGoogleカレンダーに予定として入れたい
– 利用者(家族)が使いやすいよう、できるだけシンプルな操作で記録をつけたい
– Alexaのデフォルトカレンダーとして設定しているGoogleカレンダーと、服薬記録用のGoogleカレンダーを別IDに分けたい

という理由で、自分でスキルを作ることにしました。

# 概要
スキルを呼び出すと、話しかけた内容によって下記3つの挙動をします。
1. 「アレクサ、[スキル名]を開いて、記録をつけて」
→Googleカレンダー上に、現在時刻〜5分後の予定(=服薬記録)を作る
2. 「アレクサ、[スキル名]を開いて、記録を見せて」
→画面に当日の服薬記録を表示する
3. 「アレクサ、[スキル名]を開いて」
→利用方法の案内を

元記事を表示

OTHERカテゴリの最新記事