- 1. Pose検出するマイクロサービスを作成する
- 2. S3バケットに外部からファイルのやり取りを行う(期限付きURL)
- 3. [API Gateway→ Lambda] Lambdaでクライアント情報を取得してみました
- 4. AWSLamdbaのエフェメラルストレージ10GB拡張を試してみた
- 5. Redshift Data APIを使ってS3のJSONデータを取り込む
- 6. CloudFrontによる静的Webホスティング+署名付きURLの生成
- 7. LambdaでBasic認証掛けようとしたらLambda@Edgeが無い時
- 8. IoT CoreからAMP(Amazon Managed Service for Prometheus)へデータ登録するLambdaを作った話
- 9. 東京ドームのイベント情報をSlackに通知させてみた
- 10. LambdaでS3のファイルを読み書きする
- 11. Lambdaで画像分類AIをサーバレスAPI化して得た5つの知見
- 12. [AWS SAM] Preflight(OPTIONS)をLambda関数で自作する(複数originの許可対応)
- 13. API Gatewayを試してみた
- 14. LambdaからDynamoDBを操作する
- 15. Lambdaを定期実行する
- 16. Pythonの組み込みhash関数を使ってバグを作った話
- 17. VPC内のLambdaからインターネットに接続する
- 18. S3に格納されたファイルを検知し、EC2上のシェルを自動実行する
- 19. 【AWS】【Salesforce】CTIフローからLambda関数を呼び出す
- 20. Annotations Frameworkを使って、C#でのAWS Lambda 関数実装をもっと楽にしよう
Pose検出するマイクロサービスを作成する
# 概要
Pose検出するマイクロサービスを作成しようとしたところ、意外と苦戦したのでメモ。
Edgeの処理を軽くするため、サーバーサイド(Lambda)でMediaPipeを使用したPose検出を行うマイクロサービスを作成して呼び出そうとした。
# Dockerイメージの作成
Zipの制限に収まらないので、DockerイメージでLambda関数を作成する。
“`dockerfile:Dockerfile
# AWS提供ベースイメージ
FROM public.ecr.aws/lambda/python:3.8COPY app.py ${LAMBDA_TASK_ROOT}
RUN yum -y install mesa-libGL.x86_64 make gcc curl
COPY requirements.txt .
RUN pip3 install -r requirements.txt –target “${LAMBDA_TASK_ROOT}”# モデルをダウンロード
RUN mkdir -p //var/task/mediapipe/modules/
S3バケットに外部からファイルのやり取りを行う(期限付きURL)
### AWS外部から特定のS3バケットにあるファイルをダウンロード&アップロードを行いたい
S3の期限付きURLをLambdaにて生成し、URLにアクセスしファイルのダウンロード&アップロードを行う
(補足)
手動でやる場合は、Lambdaを使わずとも、S3バケットにて2クリック程で期限付きURLの作成ができます。
今回は、URLの生成を(ファイル検知などで)自動化したかっため、Lambdaにて作成しました。(やった手順)
① S3バケットの作成
② Lambdaの作成
③ Lambda(実行ロール)の設定
④ Lambda実行&ダウンロード&アップロード確認### ①S3バケットの作成
説明省略。普通に作るだけ。### ②Lambdaの作成
(URLをメールで連携したかったので…その処理も含まれています。)
(必要に応じて削除してください)詰まった点:generate_presigned_urlでURL生成しても、S3ファイルのパスにリージョンが含まれなかった。
・import from 設定
・boto3.client(‘s3’, config=Config(
[API Gateway→ Lambda] Lambdaでクライアント情報を取得してみました
場合によっては、Lambda Functionsでクライアント情報を取得する必要があります。
たとえば、クライアントのIPアドレスを確認します。API Gateway(Lambda Proxy)→ Lambda Functions(Golang)を構築してみました。
Lambdaで、APIGatewayを呼び出したクライアントの情報を取得しました。Golangのサンプルコード:
“`
package mainimport (
“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)で組み込むこと
IoT CoreからAMP(Amazon Managed Service for Prometheus)へデータ登録するLambdaを作った話
IoTデータをPrometheusに入れてGrafanaで見れたらおしゃれな気がする。理由はないけど。
しかーし
**IoT CoreのルールアクションにPrumetheusがない(泣)**
2022/4/3現在の指定できるアクションはこちら。

ないならLambdaで作ろうと思い立ち、作ったのがこちら。
https://github.com/moritalous/iot2aps-lambda
構成はこのようになります。

“`
$ 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つ紹介します。

以下のチュートリアルで作成した犬と猫を見分けるモデルを使用しました。
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のルールをクリックしトップ画面から、「ルールを作成」をクリックする。
### 2. ルールの詳細
– 名前と説明、イベントパス、ルールタイプ「スケジュール」を選択して「次へ」をクリックする。
 を元に識別子を計算したいと考えた。 その対策として、以下のようなコードを書いた。
“`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」ユーザで作成しています。)
(※合わせる必要がある箇所は、※表記していきます)
(【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` という見慣れないプロジェクトがありました。今回はこの子がどういったものであるかを確認していきます。
# Lambda Annotations とは?
AWS Labmda Dotnet の Lambda Annotations に関する [README](https://github.com/aws/aws-lambda-dotnet/blob/master/Docs/lambda-annotations-design.md) を確認すると、下記のような説明があります。
> ラムダ注釈デザインは、.NET ラムダ関数を記述するための新しいプログラミングモデルです。大まかに言うと、新しい