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

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

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

元記事を表示

node.js(express)でDB(Postgresql)にアクセス

# 背景

今日はバックエンド関連。

これまでバックエンド(主にDBアクセスまわり)は、ほぼJavaでしか書いたことがなかったので、
node.jsでDB(Postgresql)にアクセスする際には、どんな方法があるのか簡単に調べてみる。

ついでに、接続先のDBがAWSのRDS(Aurora/Postgresql)だった場合に、現時点ではどういう構成が最適なのかについても調べてみようと思う。

# 実装

まずは、node.jsでDB(Postgresql)にアクセスする際の実装(コーディング)方法について調べて試してみる。

## 調査

ネットを漁って軽く調べてみた感じ、以下の2つのパターンがありそう。

1. ORマッパーとしてSequelizeというライブラリを利用してDBにアクセスする
2. pg(node-postgres)を直接使って、自分でSQLを書いてDBにアクセスする

参考)
https://sequelize.org/
https://node-postgres.com/

ネット上の記事を見る限り、Sequelizeを使うケースのほうが多いような印象(ま

元記事を表示

ECSとLambdaでTwitter botを作ってみた(自動RTとInstagramから自動投稿)

# この記事について
この春、緊急事態宣言下で全国の動物園、水族館は休園を余儀なくされていました。
そんな中、各園が少しでもお客さんに楽しんでもらおうとSNS上で動物たちの様子を発信していました。

それが「#休園中の動物園水族館」というタグです。

このタグの投稿が少しでも広まるようにという思いから、
このタグ付きのTwitter及びInstagramの投稿を自動でリツイート及びツイートするbotを作りました。

元記事を表示

[AWS] CloudFront + Lambda@Edge で IP 制限をかける

# はじめに

[こちらの記事](https://qiita.com/ksh-fthr/items/ee2b7880a9e6c0fc6f88) の 「[まとめにかえて](https://qiita.com/ksh-fthr/items/ee2b7880a9e6c0fc6f88#%E3%81%BE%E3%81%A8%E3%82%81%E3%81%AB%E3%81%8B%E3%81%88%E3%81%A6](https://qiita.com/ksh-fthr/items/ee2b7880a9e6c0fc6f88#まとめにかえて))」で触れたとおり、 CloudFront へのアクセスに対して IP アドレスで制限をかける方法について触れる。
実現にあたり、本記事では CloudFront と Lambda@Edge を利用する。

# 注意

本記事は 2020年6月21日 時点の情報です。
ご覧になられた時点で UI が変更されている可能性がありますので、その点ご注意ください。

# 前提

– [こちらの記事](https://qiita.com/ksh-fthr/items

元記事を表示

SQS → Lambdaのリトライ処理について整理してみた

2018年の6月より、AWS LambdaのイベントソースとしてSQSが選択できるようになりました。

今回はLambdaのイベントソースでSQSを選択し、Lambda側で処理が失敗した場合、どのようにリトライ処理が行われるのかについて整理してみました。

# リソースの作成

今回は、SNS → SQS → Lambda の構成で検証していきたいので、それぞれのリソースを作成いたします。

## SQS

“inu-queue”というキュー名でキューを作成いたします。キューの種類は標準で各設定値はデフォルトです。

そして、”inu-dlq”というキュー名でDLQ(デッドレターキュー)用のキューも作成します。こちらもキューの種類は標準で各設定値はデフォルトになります。

2つのキューを作成したら”inu-queue”のDLQの設定を行います。

DLQの設定方法は、AWSコンソール画面だと以下の手順で設定することになります。

inu-queueのキューにチェックをつける → [キューの操作]をクリック → [キューの設定]をクリック → デッドレターキューの設定で[再処理ポリシー

元記事を表示

【AWS入門】初めてのLambdaはTranscribe♪

これは備忘録のために、参考のとおりにやってみた記録です。
参考記事はすっきり書かれていてわかっている人なら簡単なんだと思いますが、AWS初心者には難しい内容でした。そのあたりを泥臭く解説したいと思います。
なのでやったことは、最終的に参考記事のまんまです。
【参考】
・[S3 → Lambda → Transcribe → S3 で文字起こしパイプラインを作成する](https://qiita.com/leomaro7/items/ad9726391d547ea3bcfd)
###やったこと
・1 S3に(input)用のバケットを作成
・2 Lambdaを開く
・3 Lambda関数の定義と意味
・4 CloudWatch Logsの見方
・5 S3に(output)用のバケットを作成
・6 Lambda修正
・7 実行ロールの変更の仕方
・8 Lambda functionを編集する
・9 Transcriptionの確認の仕方
###・1 S3に(input)用のバケットを作成・5 S3に(output)用のバケットを作成
AWSの左上のサービスを押すと全サービスが表示されて、こ

元記事を表示

Alexaにlambda連携させて中野区のゴミの日を教える

# やりたいこと
Alexaからlambdaを呼び出して中野区のゴミの曜日を返します。
全く触ったことのない人でも一から作れるように書きました。

![alexa.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619762/479c5032-72bd-f550-e10d-bcc353a8af8c.png)

[ALEXAで開発入門してみたので自分なりに纏めてみる](https://qiita.com/godan09/items/6dafc3da51b10532dbe1)
こちらの記事を参考に作ってみました。
細かいところまで説明されていてとても勉強になりましたが、
AWSの仕様変更のためか途中でつまづいたのでその辺りも本稿で記載します。

# 必要なもの

* [Amazon開発者ポータル](https://developer.amazon.com/ja/)のアカウント取得 (Alexaのスキル作成に必要)
* [AWSマネジメントコンソール](https://aws.amazon.com/jp/c

元記事を表示

ServerlessFrameworkでLambdaからFargateコンテナを呼びだす

Lamdaからboto3でFargateのコンテナを起動する際の手順です。
ググると簡単にできそうなのですが、私はなぜか盛大にハマってかなり時間がかかったので注意点を記載します。

## serverless.ymlの設定

まず、IAMでECSアクセスのポリシーを付与します。

“`serverless.yml
provider:
iamManagedPolicies: # Optional IAM Managed Policies, which allows to include the policies into IAM Role
– arn:aws:iam::aws:policy/AmazonECS_FullAccess
“`

なお、上記のポリシーが付与されていないと以下のようなエラーが出力されます。
翻訳すると「実行が許可されていません。」ということらしいです。

“`
An error occurred (AccessDeniedException) when calling the PutRule operation: User: arn:aws:

元記事を表示

AWS Lambda 新機能「EFS 統合」の検証と、新しいユースケースの開拓

2020/6/16のアップデートで、AWS Lambda から Amazon Elastic File System (EFS) が利用可能になりました。
本記事ではこの EFS との統合機能を検証し、今回のアップデートによって生まれる新しいユースケースとは何かを考えます。

# アップデートの概要
AWS Lambda 関数が Amazon Elastic File System(EFS)をマウントできるようになりました。
これまでの EFS の主たる用途は、複数の EC2 インスタンスで共有するファイルシステムです。
端的に言えば、1つまたは複数の同時実行される Lambda 関数、従来から対応している EC2 と Fargate を跨ってデータ (ファイル) を永続的に保存および共有できるようになります。

# 前提条件 (構成図)
EFS は VPC 内のリソースとなりますので、VPC Lambda である必要があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21198

元記事を表示

Zoomのクラウドレコーディング完了をAPI, Lambda経由でSlackに通知する

# これは何
zoomのクラウドレコーディング完了を、slackの特定のチャンネルに通知
今回は

– Slack App (Incoming Webhook)
– AWS Lambda(python)
– AWS api gateway
– Zoom App (Outgoing Webhook)

などを使用します。
※練習も兼ねて手順を細かめにメモしています。

▼クラウドレコーディングが終わってしばらくすると通知が来る。それだけ。こっからカスタマイズしていきたい
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/94687/4d649e2b-805c-603c-412a-a3d118fec9cb.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/94687/a9d862d6-63b0-baa0-498f-b95f2eab059d.png)

### 作成のきっかけ
– エ

元記事を表示

OTHERカテゴリの最新記事