Lambda関連のことを調べてみた2020年06月28日

Lambda関連のことを調べてみた2020年06月28日
目次

API Gateway + LambdaでS3にある画像を表示

## 概要

* API GatewayとLambdaでS3にある画像を返却する
* クライアント側からは単にURLにアクセスしたら画像が表示されるように見える
* S3をpublicにすることなく画像を表示することができる (限定公開などが可能)
* pythonでの実装

仕様がよく分からずハマったのでメモを残します.

## やること

1. Lambdaの作成
2. API Gatewayの作成

S3は作成済みとします.

## 1. Lambdaの作成

Lambdaを適当な名前で作成します.ここでは`get_image`としました.

また,ランタイムはPython 3.8を選択しました.

![スクリーンショット 2020-06-27 22.24.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/401124/77615c8f-9cac-814a-7709-f5702e3b44dc.png)

そして関数コードに![スクリーンショット 2020-06-27 23.07.20.png](

元記事を表示

【AWS;Lambda入門】第三弾;Linebotなじゃんけんゲームで遊ぶ♬

今回は、apigatewayを利用したnode.js@Lambdaでじゃんけんゲームを作ってみた。
環境構築やプログラムなどは、全て以下の参考①~④を参考に進めた。
だいたい、最初の①と②でLinebotが動く。そして③と④でLambda版のLinebotが動いた。筆者も言っているように感動ものである。
ちなみに、ほぼ1日でLinebotが動くようになった。
したがって、コードのほとんどは参考のまんまであることをお断りしておきます。
【参考】
①[LINEBotをみんなで作ろう〜環境構築編〜【GWアドベントカレンダー1日目】](https://qiita.com/inoue2002/items/a87df2b520f8b6e37f42)
②[LINEBotをみんなで作ろう〜おうむ返しbotを作ろう編〜【GWアドベントカレンダー3日目】](https://qiita.com/inoue2002/items/dcf40d5ebfe2454796fa)
③[LINEBotをみんなで作ろう〜レイヤーとAPIgateway設定編〜【GWアドベントカレンダー7日目】](https://qiita.

元記事を表示

S3に保存されたwavファイルをLambdaでGoogle Cloud Speech-to-Textを使って文字起こしする

# S3に保存されたwavファイルをLambdaでGoogle Cloud Speech-to-Textを使って文字起こしする
## はじめに
以下リンク記事を参考に、S3に保存されたwavファイルをLambdaでGoogle Cloud Speech-to-Textを使って文字起こしをやってみたのでまとめておきます。

[S3 + ElasticTranscoder + Lambda + Google Cloud Speech-to-Text APIで、動画の音声を自動でテキストにする](https://qiita.com/inoue37/items/e526cc8d389808863943)

?完全なる上位互換なので、私の記事は読む必要ないかと。

## 1. S3の作成
特別なことはしないです。
1-1. 適当なバケット名、リージョン(私は東京)で次へ
1-2. オプションの設定はノータッチ
1-3. アクセス許可の設定もノータッチ(パブリックアクセスをすべてブロック)
1-4. 確認

## 2. ローカルでGoogle Cloud Speech-to-Text APIをイン

元記事を表示

AWS Lambda から Amazon EFS へのアクセス

AWS Lambda から Amazon EFS へアクセスできるようになったとのことでやってみた。

これによりLambda の仕様上、512 MB という仕様制限がありましたが、これを超えるファイルの操作が可能になります。

また、S3は結果整合性ですが、EFS を利用することによりデータの一貫性が保てることができます。

[新機能 – Lambda関数の共有ファイルシステム – Amazon Elastic File System for AWS Lambda](https://aws.amazon.com/jp/blogs/news/new-a-shared-file-system-for-your-lambda-functions/)

#1.セキュリティグループの作成#

##AWS Lambda 用セキュリティグループの作成##

|セキュリティグループ||
|—|—|
|インバウンドルール| なし|
|アウトバウンドルール|すべてのトラフィック|

##Amazon EFS 用セキュリティグループの作成##

|セキュリティグループ||
|—|—|

元記事を表示

AWS Lambdaのリソースベースポリシーのサイズが上限に達して困った話

## はじめに
AWS samを利用しAPI gateway + Lambdaの構成を作成していたのですが、Cloudformationの変更セットを実行中に以下のエラーを取得してしまいました。

“`
The final policy size (20857) is bigger than the limit (20480).
(Service: AWSLambda; Status Code: 400; Error Code: PolicyLengthExceededException;
Request ID: xxxxxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx)
“`

このエラーが示す内容としては、 **Lambdaのリソースベースポリシーがサイズ上限に達した** ということを示しています。
この状態になるとAPIのメソッドの統合リクエストのタイプにこのLambdaを指定することが出来なくなります。

## 調べてみて
いくつか記事を漁っていると、以下の記事を発見しました。
[Lambda エラー「最終ポリシーサイズが制限を超えています」を

元記事を表示

【AWS】サーバレスで Hello, World! を実行するまでのチュートリアル

通常、プログラムのコードを実行するためには Linux などのサーバを立てて、初期設定して、実行環境をインストールして・・・と手間が多いです。
しかし、AWSには **Lambda** という、上のようなサーバ側の準備を意識することなくコードを実行でいるサービスがあります。

このチュートリアルでは、サーバレス≒サーバの構築なしでコードを実行し、 “Hello, Wolrd!” を返すまでの手順を学びます。

## Lambdaコンソールを起動
[AWSマネジメントコンソール](https://console.aws.amazon.com/console/home)にアクセスし、AWSアカウントでまずはログインします。

ログインできたら「サービス」をクリックし、検索ボックスに「Lambda」と入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364501/3f4ddc36-85c4-c14f-838f-3f385290e1a9.png)

これでLambdaコンソールへアクセ

元記事を表示

DjangoをLambdaを使ってサーバレスにデプロイする

DjangoをAWS Lambdaにデプロイできました。Serverless Frameworkを使うと簡単です。
URLとレポジトリはこちらです。
[https://django-sls-helloworld.umihi.co/](https://django-sls-helloworld.umihi.co/)
[https://github.com/umihico/django-sls-helloworld](https://github.com/umihico/django-sls-helloworld)

slsのデフォルトプロジェクトを作成し、[f1a13ba](https://github.com/umihico/django-sls-helloworld/commit/f1a13ba)
動作確認したらカスタムドメインをプラグインをインストールします。[0970afe](https://github.com/umihico/django-sls-helloworld/commit/0970afe1228ceeb646042c0c2a1012a2c44646a3)
API

元記事を表示

S3 に view ファイルをアップロード ( Severless Framework x Laravel )

# はじめに

この記事に書かれているのは、AWS コンソールで、IAM と S3 bucket を作成した後の手順なので、それ以前の設定はご自身でご自由にしてください。

# 1. .env を編集

“`
ASSET_URL=https://[S3 のバケット名].s3-ap-northeast-1.amazonaws.com

AWS_ACCESS_KEY_ID=XXXXXXXXXXXXX
AWS_SECRET_ACCESS_KEY=XXXXXXXXXXXXX
AWS_DEFAULT_REGION=ap-northeast-1
AWS_BUCKET= S3 のバケット名
“`

# 2. Serverless Framework にプラグインインストール

“`
$ sls plugin install -n serverless-s3-sync
“`

# 3. serverless.yml への記述

“`yml
plugins:
– ./vendor/bref/bref
– serverless-domain-manager
+ – serverl

元記事を表示

【AWS】VPC内のLambdaから別のLambdaを呼び出す

ちょっと前にやったことなので記憶があいまいですが、
今後もやる可能性のある事なので備忘録として残しておこうと思います。

#VPC内で実行するLambda
AWSのEC2やRDSなどのVPC内のリソースにLambdaでアクセスする場合、
LambdaにVPC設定をすることで可能になります↓

[【AWS】LambdaをVPC内で実行し、EC2のMySQLにアクセスする
https://www.geekfeed.co.jp/geekblog/lambda_vpc](https://www.geekfeed.co.jp/geekblog/lambda_vpc)

しかし一方で、VPCにpublicなサブネットを設定していない場合、VPC内Lambdaからは外部のネットワークに接続することができなくなります。
つまり以下のアクセスが不可能となります。

1. VPC内Lambda→VPC内Lambda
2. VPC内Lambda→VPC外Lambda
3. VPC内Lambda→VPC外リソース(PrivateLinkがサポートされているもの以外)

例えば、VPC内リソースからデータ取得後

元記事を表示

Lambda + S3 Presigned URLを用いてS3バケットにファイルをアップロード

[つばさ株式会社](https://www.world-wing.com/)でのアルバイトにおいて署名付きURL(S3 Presigned URL)を使用する機会があったので、備忘録として実装の流れをメモしておきます。
ちなみにこの記事を書いている時間も時給を頂いています。最高です。

– S3PresignedURLは日本語訳で署名付きURLとされています。今回は署名付きURLという名称で統一します。
– この記事では、署名付きURLについての軽い説明と、実際に実装していく際の流れについて説明しています。
– 強い人には当たり前な内容についても細かめに書いているので、基礎的なことはわかっていて公式リファレンス読める人はそっち読んで下さい。
– 自分が担当した部分が局所的であったため、局所的な記事になっていますがお許し下さい。
– 目次がありますので、要らないところは適宜スキップして下さい。

#目次
1. 署名付きURLって?
2. S3を使うと何が嬉しいの?
3. 実装開始
4. IAMロールの作成
5. Lambda関数の作成
6. API Gatewayの設置
7. テストして

元記事を表示

【Amazon Connect】電話でEC2インスタンスを停止したり、再起動したりする。

#解決したいこと
“`
仮想カスタマ「しもしも!? サーバーの調子おかしいんだけど!??マッハでリブートして!!」
オペレータ 「おかのした」
※フィクション
“`

ここからカスタマの情報を確認して、EC2インスタンスの状態をチェックして、カスタマのインスタンスかどうかをダブルチェックして、オペレータが心の準備をしてからインスタンスを再起動する。

#いや、無駄ちゃう?
自分はセールスなんで実際に作業をしている訳ではないですが、割と前述みたいな電話がかかってくることは多いです。
そして、確認して作業して…。
大したこと無い作業ですが、その割には影響が大きい(聞いたことはありませんが、他のインスタンスをリブートしたりとかのリスクを懸念する)ので、脳味噌ゼロでやれるようなことでもありません。

いやでもそれにしてもこんなことに時間を取られるのは如何なものか。
「いっそ、電話受付無くしたら?」という声も聞きますが、それならそれに代わるサービスを考えねばなりません。

#お客様で作業を完結してもらう
電話受付を無くす&お客様で作業をしていただく方向性で考えました。

**【使うもの】**

元記事を表示

急激なリクエスト増が発生した場合のAWS Lambdaの挙動を確認する(1)

### はじめに
AWS LambdaはAWSの様々なAWSサービスをイベントソースとしてシームレスに連携して起動可能なサーバーレスなコンピュートサービスです。カタカナばかりで分かりにくいかもしれませんので別の表現をすると、
`「AWS Lambdaは様々なAWSサービス(、例えば、Amazon S3,Amazon API Gateway, ELB( Application Load Balancer), Amazon SQS, Amazon SNS, Amazon DynamoDB (Streams)等)をイベントソース(入力元、起動のトリガー)としてシームレスに連携して起動可能なサーバーレス(サーバの運用や**サーバのスケール**等の運用が不要な、アプリケーション開発者が開発をしやすくすることができる)コンピュート(アプリプログラム実行環境)`サービスです

上述する通り、サーバーのスケールの考慮が不要と記載がありましたが、AWS Lambdaがどのようにスケールするか仕様を確認したうえで、ご自身のワークロードに適しているか判断してご利用いただくことが重要です。

余談ですが、過

元記事を表示

【AWS;Lambda入門】第二弾;jsonファイルから文章抽出してS3保存♬

[前回](https://qiita.com/MuAuan/items/49cbc0a18dcf6c6406bb)は、以下のコードでs3://バケットに配置されたmp3ファイルをtranscribeしてテキストに変換して、jsonファイルをOutputBucketNameのS3;バケットに配置した。
今回は、このjsonファイルを呼び出して、テキスト変換された文章を抽出しようと思います。わざわざ前回コードを出したのは、今回もコードが似ているからです。

“`py
s3 = boto3.client(‘s3’)
transcribe = boto3.client(‘transcribe’)
def lambda_handler(event, context):
bucket = event[‘Records’][0][‘s3’][‘bucket’][‘name’]
key = urllib.parse.unquote_plus(event[‘Records’][0][‘s3’][‘object’][‘key’], encoding=’utf-8′)
try:

元記事を表示

AWS LambdaのCORSでハマったからreturnを共通化した

# はじめに
前回、AWS Lambdaを使用したサーバーレス開発について、私がハマった箇所をまとめました。
[インフラエンジニアがやってみた AWSでサーバーレス Webアプリケーション開発](https://qiita.com/wakoit/items/aef089dd04533025f142)

そこでCORSについて毎回returnでハマるのでreturnを共通化しました。
文中のAWS LambdaのソースはPython 3.8で書かれています。

# 言いたいこと
CORSでエラーが出たらLambdaのreturnを疑え。

# Why?
JavascriptのコンソールにCORSのエラーが出るとき、十中八九Lambdaで正しくreturnしていないからです。

CORSの仕組みや考え方は以下の参考ページが大変詳しいです。
[なんとなく CORS がわかる…はもう終わりにする。](https://qiita.com/att55/items/2154a8aad8bf1409db2b)

ある程度仕組みを理解して頂いたところで、CORSのエラーが出るパターンは以下になります

元記事を表示

Lambda layer作成のコツ

コツ
# コツ

コンパイル情報?を必要とするものと必要としないものがあるので注意。

必要としないもの→local PCでもOK.

必要とするもの→amazon linux (nomal)にて作成しなければならない

★展開して250MBこえるとアウト
★layerは5つまでしかできないので固めるのが吉


#### コンパイル情報を必要としないもの(localPC実施)
– 基本的にbinは消していい
– dist-infoも消していい
– キャッシュも消していい
– ドラックアンドドロップしてたらDSStore入っているので消す(ゴミなので)

“`
find . -name “__pycache__” | xargs rm -rf
find . -name “*dist-info” | xargs rm -r
find . -name “*.so” | xargs rm
rm -r bin
find . -name “.DS_Store” | xargs rm
“`

必ず親をpythonという名前のディレクトリにしてそれごと固めること!

“`
ls
pyth

元記事を表示

AWS Lambda Nodejsのバージョンが8から12に強制アップデートされたら Error: Cannot find module ‘jmespath’ と出る問題

# 要約
AWS Lambdaで利用するnodejsのバージョンが nodejs8 -> nodejs10以降のアップデートすると aws-sdkが組みこまれるようになるため
node_modulesにaws-sdkを含んでいるとエラーになるので、取り除く必要がある

# 本文

nodejs8で書かれたAWS Lambdaスクリプトは非推奨となりました。
AWS Lambdaのnodejs10やnodejs12環境で同じスクリプトを実行すると、以下のようなエラーメッセージが表示される。

“`
{“errorType”:”Runtime.ImportModuleError”,”errorMessage”:”Error: Cannot find module ‘jmespath'”,”stack”:[“Runtime.ImportModuleError: Error: Cannot find module ‘jmespath'”,” at _loadUserApp (/var/runtime/UserFunction.js:100:13)”,” at Object.mod

元記事を表示

Java – ラムダ式を利用するSQLの実行 – SQL Runner

### 1. 基本構想

lambda式とFluent APIを適用してSQLを実行したい。同じコード(ボイラープレート/定型コード)を何度も記述するDAOは避けたい。DAOを作成すると、メソッドが一つのSQL専用になり融通がきかない。時間を無駄にするし、バグも発生しやすい。仕様変更に伴う修正箇所も多くなる。

以下を実現したい。1) SQL文を与えて、2) プレースホルダーに値をセット、3) 結果をDTOに変換する。この3つがSQL実行の本質であり余分なコードはいらない。2)、3)はlambda式で実現する。この機能を、SQL Runner と呼ぶことにする。

“` Java
List list =
SelectorRunner<>(“SELECT ID, NAME FROM EMP WHERE ID = ?”)
.bindParams(preparedStatement -> preparedStatement.setInt(1,103))
.mapResult(resultSet -> {
Emp emp = new Emp();
emp.setId(re

元記事を表示

API Gateway + Lambda のCORS関連エラーの対策

API Gateway と Lambda でウェブアプリのAPIエンドポイントをつくって外部サイトのシステムから呼び出そうとしたらCORS(Cross-origin resource sharing)のエラーになってしまい、設定に躓いたのでメモ

# 基本的な対策
## API Gateway でCORS有効化
API Gateway のアクションからCORSの有効化を設定するのが基本的な対策です。
通常はこれでOKのはず。

## エラーが出て設定が反映できないとき
自分の環境で、以下のようなエラーがでてうまく設定ができませんでした。
`Invalid Response status code specified`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73833/6daf7c6f-67d3-292a-010e-60d04c2f7333.png)

### 対策(レスポンスヘッダーを手動で設定)

1. 上記画面でエラーになった内容をメモ
2. リソースからエラーになっている

元記事を表示

Lambdaのトリガーの作成中にエラーが発生しましたの対処法

#Lambdaでトリガーを指定したい

###エラー内容

LambdaでS3のputをトリガーを指定しようとした時

#####trigger の作成中にエラー が発生しました: Configurations overlap. Configurations on the same bucket cannot share a common event type. (Service: Amazon S3; Status Code: 400; Error Code: InvalidArgument; Request ID: 8659097E5FCA60E1; S3 Extended Request ID: 2PrYTEd8BysODQscbugs/nK2CtkwOQPjw4JXuWgP6rF18PrrvTkq7cgsbs5gDDwKZdB+9qXAE1o=; Proxy: null)

というエラーが出ました。

同じバケットで同じイベントタイプでは作れませんよ的な内容です。

##同じトリガーの関数を消すだけではダメ

消しても同じエラーでした。

##解決策

トリガーで指定していた

元記事を表示

laravelのbref を利用し、lambda にデプロイする

# はじめに
laravelで制作したアプリをサーバーレス用ライブラリbrefを使い、AWSにデプロイしました。デプロイは、serverless frameworkがやってくれます。

ちなみに、参考にした先輩の記事はこちら。

**Laravelのサーバレス用ライブラリbrefを使い、lambdaでhello world
PHP**
https://qiita.com/umihico/items/64fcf159f68ebd866170
#アプリ作成とbrefインストール

“`terminal
$ composer create-project –prefer-dist laravel/laravel laravel-demo #プロジェクト作成
$ cd laravel-demo
$ composer require bref/bref #肝のbrefインストール

“`
#編集するファイル
.env

“`.env
– SESSION_DRIVER=file
+ SESSION_DRIVER=array
+ VIEW_COMPILED_PATH=/tmp/storage

元記事を表示

OTHERカテゴリの最新記事