- 1. AWSLamdbaのエフェメラルストレージ10GB拡張を試してみた
- 2. Redshift Data APIを使ってS3のJSONデータを取り込む
- 3. CloudFrontによる静的Webホスティング+署名付きURLの生成
- 4. LambdaでBasic認証掛けようとしたらLambda@Edgeが無い時
- 5. IoT CoreからAMP(Amazon Managed Service for Prometheus)へデータ登録するLambdaを作った話
- 6. 東京ドームのイベント情報をSlackに通知させてみた
- 7. LambdaでS3のファイルを読み書きする
- 8. Lambdaで画像分類AIをサーバレスAPI化して得た5つの知見
- 9. [AWS SAM] Preflight(OPTIONS)をLambda関数で自作する(複数originの許可対応)
- 10. API Gatewayを試してみた
- 11. LambdaからDynamoDBを操作する
- 12. Lambdaを定期実行する
- 13. Pythonの組み込みhash関数を使ってバグを作った話
- 14. VPC内のLambdaからインターネットに接続する
- 15. S3に格納されたファイルを検知し、EC2上のシェルを自動実行する
- 16. 【AWS】【Salesforce】CTIフローからLambda関数を呼び出す
- 17. Annotations Frameworkを使って、C#でのAWS Lambda 関数実装をもっと楽にしよう
- 18. AWS Lambda /tmp領域が10GBまで拡張できるようになったのでディスク読書速度を測定してみた。
- 19. 【Ruby】Googleカレンダーに服薬記録をつけるAlexaスキル作ってみた
- 20. AWS LambdaによるBolt for Pythonの話
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へ取り込むデータがAPIでしか提供されていない場合にLambdaで外部のWeb APIを叩いて取得したデータをRedshiftに取り込むということになると思います。今回はそのような実装したので紹介します。細い説明は省きます。
#### 1. Redshiftのデータベースとテーブルを作成する
#### 2. LambdaでRedshift Data APIを使ってS3にあるJSONデータをRedshiftに取り込む今回のアーキテクチャは以下の通りです
# IAM周りのセットアップ
#### 1. LambdaのIAMロールに「AmazonRedshiftFullAccess」ポリシーをアタッチする
#### 2. Redshift用のIAMロールを作成 & 「AmazonS3ReadOnlyA
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 ラムダ関数を記述するための新しいプログラミングモデルです。大まかに言うと、新しい
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. 「アレクサ、[スキル名]を開いて」
→利用方法の案内を
AWS LambdaによるBolt for Pythonの話
# 今回のお話
AWS Lambda環境でBoltを動かしてみた話と動かすまでのアプローチの方法について書いていきます。下記記事のコード部分のみ参考にさせていただきました。
https://dev.classmethod.jp/articles/bolt-lambda/
Boltに関してはWindowsのvenv環境でpip installしたライブラリで問題ありません。
# API Gatewayについて
概ね参考記事の通りで、公式の通りSlackアプリとLambda環境を整えていきます。さて、API Gatewayですが、諸々諸事情により使い始めた頃から、プロキシの統合の使用を使わずマッピングテンプレートなるものを使ってました。
正確ではないかと思いますが、指定のContent-Typeでリクエストが来た場合にヘッダーを取り除いたり、Bodyの部分をJSONに整形したりなどLambdaに渡す前にデータを変換してくれるものです。
あまりちゃんと調べて使っていたわけでないので、Boltに渡すデータ形式とは?という所で躓きました。
結論はリクエストペイロードはそのまま