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

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

Lambda(node.js)におけるaws.docClient.get(…).promise() のsinon.stubのつくりかた

#やりたいこと
以下のlambdaのテスト対象コード(main.js)をMochaでtestするときに
docClient.get(…).promise() 部分のsinon.stubをつくりたい

“`javascript:main.js
const aws = require(“aws-sdk”);
const docClient = new aws.DynamoDB.DocumentClient(…);

async function main(event) {

await docClient.get(…).primise();

}
“`

結論のテストコード
(***で囲まれているところがスタブのつくり方、それ意外はモジュールの設定)

“`javascript:main_test.js
const assert = require(‘assert’);
const sinon = require(“sinon”);
const aws = require(“aws-sdk”);
const docClient = new aws.Dyna

元記事を表示

【AWS API Gateway】Lambda関数(DynamoDB内データ取得関数)実行API作成

##目標
API Gatewayを利用して、Lambda関数(DynamoDB内データを取得する関数、Rubyでの作成とする。)実行API(※)を作成する。
※作成するAPIの詳細要件
・URLのクエリパラメータとしてDynamoDBのプライマリキー情報を指定し、取得するデータを絞り込む。
・クエリパラメータが指定されていない場合、ステータスコード400エラーを返す。
・DynamoDBからクエリパラメータに紐づくデータを取得出来ない場合も同様に、ステータスコード400エラーを返す。
##API Gatewayとは
API Gatewayを利用することでバックエンドリソースのLamda関数、その他AWSサービス、httpエンドポイントに対するRestfulAPI(※1)やWebSocketAPI(※2)を作成することが可能となります。
API Gatewayに関するより詳細な知識を掲載している記事のリンク記載致します。
[Amazon API Gateway](https://qiita.com/leomaro7/items/66ea3233097fa410fef9)
※1
URLには

元記事を表示

AWS Lambda python「デプロイパッケージが大きすぎてインラインコード編集を有効にできません」の回避方法

AWS Lambda を python で書いています。パッケージを入れてZIPでアップロードすると、「デプロイパッケージが大きすぎてインラインコード編集を有効にできません」と出て、インラインコード編集が使えません。
これを回避する方法を紹介します。パッケージを別にして AWS Lambda レイヤーに登録します。
![1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253995/1430b86d-a15a-ff1e-64c5-e38f6f6829af.png)

# 方法

## 1. python パッケージをフォルダにまとめます

“`
pip install xxx -t ./python/
“`
上記のように書くとpythonというフォルダにパッケージがまとまります。

## 2. AWS Lambda レイヤーにアップロード

![2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253995/9ac4

元記事を表示

Vue.js + AWS Lambda + dynamo DBでチャット機能を作ってみる【AWSの設定編】

今回はチャット機能を実装したので、備忘録として記事を残していきます。

AWS Lambdaの作成を行った後にフロント側の設定の記事を上げていこうかと思います。
AWS側は`API Gateway + Lambda + DynamoDB`の構成で作成していきます。
※ 2020/08/29時点での作成画面

## API Gatewayの設定

### ①API GatewayからAPI作成

API Gatewayから `APIの作成`を押下し、
WebSocket APIを作成していきます。
![1_API_gateway.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/305412/14c0f24e-72a4-7648-3b59-6e31206d2117.png)
![2_API_gateway.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/305412/556b0e7c-ad20-e8d1-5917-02dd47c

元記事を表示

[AWS Lambda / API Gateway] queryStringParameter(URL クエリ文字列パラメータ) をLambda関数内で取得する

# 概要

この記事では、`http://example.com/books/1?hoge=2`というリクエストURL内の`hoge=2`の部分、もしくは`2`のことを`queryStringParameter`(URL クエリ文字列パラメータ)と呼びます。

この、`queryStringParameter`を`API Gateway`経由で`AWS Lambda`に渡すための設定を記載しました。

# 前提・対象者

– 既に`API Gateway`経由で`AWS Lambda`の関数を呼び出すことは成功している
– リクエストURLの末尾に`queryStringParameter`を記載しているのに、Lambda関数内で取得できない

この状況に陥っている方向けの記事になります。
(私がこの状態で2時間程度悩みました….)

# 症状

本来であれば、lambdaのhandler関数の`event`引数に`queryStringParameter`が渡されるはずなのにもかかわらず、`event`引数の中身が空っぽの辞書になってしまう。

“`python:app_nam

元記事を表示

LambdaでRDS Proxy経由でAurora(MySQL)に接続する(IAM認証)

待ち望んでいた`RDS Proxy`が東京リージョンでGAされました。
https://aws.amazon.com/jp/blogs/aws/amazon-rds-proxy-now-generally-available/

早速、`Lambda`から利用する機会があったのでメモしておきます。
今回は、セキュアに接続するため、`TLS`+`IAM`認証で接続します。
上記で接続すると、`Lambda`に認証情報(具体的にはDBのパスワード)の取得コードを記載しなくて良いのがかなり良い感じです。

# 前提

`Aurora(MySQL)`は存在していること

# 手順

1. `Secrets Manager`設定
2. `RDS Proxy`作成
3. `Lambda`から接続

## `Secrets Manager`設定

マネジメントコンソールから`Secrets Manager`に移動して、認証情報を入力し、シークレットを作成します。

![スクリーンショット 2020-08-29 10.39.57.png](https://qiita-image-store.s3.ap

元記事を表示

AWS lambdaを使ったサーバーレスウェブアプリの開発

#目的と目標
今回、目的はwebアプリケーションを作る!その過程で、学びながら進めるにあたって大きな壁になるのがサーバーの取り扱いと管理の部分がありました。そこで、最近はやりのサーバーレス webアプリケーションの開発を目標にして進めていくことにしました。

##アーキテクチャー
![コメント 2020-08-28 114937.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/573931/ac919afe-2b3a-f1a4-8083-1d971ff43ada.png)

##今回使用する構成
aws cognitoを使用した認証・認可機能をつけたログイン・ログアウト機能の追加。
aws Apiを使ってaws lambdaを使って、aws DynanoDBにデータの保存と参照。
aws S3にファイルを上げることで外部からの部分的アクセス。

##デモアプリケーション!
https://www.miryuu.com/
このサイトの記事を参照してください

元記事を表示

透過lambda來自動複製S3檔案與重新命名

– [0. Intro](#0-intro)
– [1. 安裝](#1-%e5%ae%89%e8%a3%9d)
– [2. 設定](#2-%e8%a8%ad%e5%ae%9a)
– [3. 細節說明](#3-%e7%b4%b0%e7%af%80%e8%aa%aa%e6%98%8e)

## 0. Intro

先前在專案上常常會需要開放讓外部廠商把眾多的檔案上傳到S3的Bucket中,不過常常遇到檔案不符合規則或是副檔名不對的問題。
後來乾脆寫了一隻lambda來自動在S3 Object Create時幫忙處理這些瑣碎的小事。

因此借用了Serverless framework來幫忙快速完成了這樣的自動化。
整理而言,這隻lambda大致上的流程如下。

1.偵測Object Create@source Bucket,取得object name
2.透過AWS SDK – S3的copyObject來複製到新的Bucket中

開始前必須先安裝好serverless cli,如果不清楚的人可以參考先前的介紹[Serverless Framework for AWS Lambda D

元記事を表示

使用AWS Lambda來每天定時開關機EC2 instance

– [0. Intro](#0-intro)
– [1. 安裝](#1-%e5%ae%89%e8%a3%9d)
– [2. 設定](#2-%e8%a8%ad%e5%ae%9a)
– [3. 細節說明](#3-%e7%b4%b0%e7%af%80%e8%aa%aa%e6%98%8e)

## 0. Intro

對於與EC2整合的lambda有滿多應用的,不過這篇主要介紹的是透過lambda來每天定時的開機/關機特定的ec2 instance,在目前團隊內的用途主要有下面這幾種狀況

1. 每天定時的開關bastion server,避免下班後/週末閒置的$$ resource
2. 定期的batch job透過lambda來開機後自動執行相關script後就會休息。

開始前必須先安裝好serverless cli,如果不清楚的人可以參考先前的介紹[Serverless Framework for AWS Lambda Development
](https://www.p0n2.net/2020/01/serverless-framework-for-aws-lambda.html

元記事を表示

lambda最常見的四大類使用情境

– [0. Intro](#0-intro)
– [1. Automation](#1-automation)
– [2. Data Transformation](#2-data-transformation)
– [3. API Service](#3-api-service)
– [4. Message Processing](#4-message-processing)

## 0. Intro

對於一個已經雙腳踏入AWS雲中的雜端工程師而言,lambda已經被置入每天的生活中了,記得前輩曾經說過,如果開會時PM問了一些AWS的問題而你有聽沒有懂的話,可以用萬用回答來回應牠,”可以把資料先放到S3我們再研究看看怎麼用lambda來處裡”,一直到若干年後,我才發現這句話真的是真理。下面我們就來小小的歸類一下lambda常見的應用。

[本文同步Post在www.p0n2.net中](https://www.p0n2.net/2020/04/lambda.html)

### 1. Automation

對於SRE或是DevOps來說,最常用lambda來處

元記事を表示

CloudWatch Logsのフィルターで複雑な検索条件を指定して欲しいイベントだけ取得する

下図のような流れでアプリケーションログをSlackへ通知する仕組みを構築しています。
![app_err_log-slack_cloudwatch.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269716/02f49cba-6e5d-c5a6-b39e-56e64e71eeec.jpeg)

この仕組み上で通知するログの種類をフィルタリングする場合はLambdaトリガー設定時のフィルタかLambda関数内になるかと思います。
しかし、不必要な通知をLambda関数内でフィルタリング処理を行う場合、Lambda関数自体を動作させる必要がある為、料金が多く発生してしまいます。
これを避ける為、Lambdaトリガー(やCloudWatch Logs メトリクスフィルター)のフィルターパターンを駆使してフィルタリングを行う方法を記します。

# フィルターとパターンの構文について
フィルターは以下3種類に分類できます。※公式名称ではありません。
本稿では「テキストベースフィルター」及び「スペース区切りフィルタ

元記事を表示

AWS LambdaをAWS CLIで呼び出し、S3にファイルを格納する

## :libra: AWS Lambdaとは

**AWS Lambda**(エーダブルエス・ラムダ)は、**サーバレス・システム**の一つで、何らかのプログラムなどによる処理を行う際に、実行環境となるサーバを用意することなくそのプログラムを実行する環境を提供する新しい技術です。
特に、バッチ処理やオフライン処理を実行するのに適しています。

また、AWS Lambdaの実行基盤となるインフラ面(サーバリソースなど)はAWSが管理しているために、この部分についてのメンテナンス作業は不要で、利用側としては実行対象となるソースのみに集中すれば良く、コスト面・運用面でもメリットがあります。

本記事執筆時点で実行できるプログラムとして、Java、Go、PowerShell、Node.js、C#、Python、Rubyがあります。
ただし、処理の実行可能時間には上限があり、最大15分となっています(2020年8月現在)。

## :libra: この記事の目的

本記事では、AWS Lambdaを実行するためのAWSの環境設定と実行方法を確認したいと思います。
実行するプログラムとして、P

元記事を表示

AWS LambdaのqueryStringParametersとmultiValueQueryStringParametersの違いについて

##環境
Python3.7
プロキシ統合あり

##queryStringParametersを使う
API GatewayからLambdaに渡されたペイロードからパラメータを取得できます。

リクエスト
https://XXXX/XXXX/XXXX?id=1&value=foo

“`python

response = event.get(‘queryStringParameters’)

return {
‘statusCode’: 200,
‘body’: json.dumps(response)
}
“`

結果

“`json
{
“id”: “1”
“value”: “foo”
}
“`

パラメータ名で値を取得できます。

リクエスト
https://XXXX/XXXX/XXXX?id=1&value=foo

“`python

response = event.get(‘queryStringParameters’).get(‘value’)

return {
‘statusCode’: 200,

元記事を表示

AWS AppSync(GraphQL)のバックエンドにAWS Lambda(serverless framework) x Golangを使ってみる

AppSync(GraphQL)でバックエンド側でこちょこちょ計算する必要のある機能が必要になり、Lambda(serverless framework)をGolangで書いてみたのでメモ

*serverless frameworkを使うので、前提として[serverless AWS – Credentials](https://www.serverless.com/framework/docs/providers/aws/guide/credentials/)の設定をしている必要がある。

## 導入
Lambdaは[serverless framework](https://www.serverless.com/)を使って管理したいので、以下の手順でGolangのLambdaの雛形を作る。

*`serverless`コマンドは`sls`と省略できる

“`bash
# serverlessフレームワークをインストール
$ npm install serverless -g

# テンプレートを使ってLambdaの雛形を作る
$ serverless create -u htt

元記事を表示

登山の新しいお供?やまみちあんしんボタン。

#概要
SORACOM Button を使って山登りがちょっと安全になる?デバイスつくりました。

###機能
– ボタンを押した位置を地図上に表示する
– 緊急時に特的の連絡先にメッセージを送る

###言い訳
今回は SORACOM Button のメリットを生かすため、極力スマホに頼らない構成にしました。

と、言うのは半分言い訳で正直なとこ今回の機能はスマホのアプリで出来ちゃいます…
( [YAMAP](https://yamap.com/) さんめっちゃ便利だからみんなも使おう!僕もいつもお世話になってます!)

でもスマホってバッテリーの持ちが悪かったり、モバイルバッテリーは重たかったりしますよね?

SORACOM Button なら…

**電池式だから予備電源の確保は簡単!**
**持ち運びも便利な軽量設計!**

なんて山登りに最適なんだ!
と言うことで、宜しくお願いします。

#インデックス
– [なぜ SORACOM LTE-M Button なのか](#なぜ-soracom-lte-m-button-なのか)
– [構成](#構成)
– [今回の詰まり

元記事を表示

AWSの請求を日次でLambda for RubyでSlackに通知する

先行事例をググると Python の例が多かったので、[Ruby][doc] で手でポチポチやったときの最低限の設定メモ。

# 1. AWS Lambda をランタイム Ruby で作成

WebのLambdaコンソール画面からボタンポチポチで作成

– ランタイムを `Ruby 2.7` で
– 実行ロールに `ce:GetCostAndUsage` 付与
– [Cost Explorer の権限は root で有効にすると出てくる][ce_auth]はず

# 2. Rubyで取得処理を書く

“`ruby:lambda_functions.rb
require ‘aws-sdk’
require ‘net/http’
require ‘uri’
require ‘json’

# Lambdaのエントリーポイント
def lambda_handler(event:, context:)
fetch_cost
.then { |response| pretty_response(response) }
.then { |message| notif

元記事を表示

初体験したときのことをお話します

どうも、こんにちは。お元気ですか?
コロナ禍(コロ中?)ではいかかお過ごしでしょうか?
体調など崩しておりませんでしょうか?

わたしは以前、こんなこと↓を書いていました。
**[試験に出るAWS:SAAでしょう 第6夜](https://qiita.com/han-aru/items/652dd12c92c1b8f69ac0)**
あれから早、3ヶ月が過ぎようとしております。
あれから更新しておりませんし、いまだ試験も受けておりません!

が、勉強は続けており、もうすぐ終わりますので
近々試験を受けようと思っております。多分!

さて、今回は有識者の方々のを見たり、聞いたりして、教わりながら
色々と新しいことを体験しながら覚えていったので
それらの知見? 感想? をここに残しておきたいと思います。

## 準備として、すでに行っていたところ

– [AWS CLIをインストール](https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/install-cliv2-mac.html)した
– [Serverless Framewor

元記事を表示

サーバーレスなSelenium実行環境でブラウザのスクショをS3に保存する【AWS LambdaとServerless Framework編】

# 0. はじめに

こんにちは。都内でエンジニアをしている、[@gkzvoice](https://twitter.com/gkzvoice)です。
今回はホコリを被っていた「AWS Lamda上でSelenium/Headless Chrome」の実行環境の構築手順を供養しようと思います笑。
~~勤怠打刻プログラムを作ろうかなと思ったのですが、あれがあれする気もしなくもないと考えて。~~

なお、本記事では、Serverless Frameworkを使いますが、そのインストール手順や一般的な使い方は、深く取り扱いません。
手前味噌ですが、下記の記事をご参照ください。

– [AWS LambdaとServerless Frameworkで爆速で作るTwitterbot](https://qiita.com/gkzz/items/23a7d03aeadcec341700)

# 1. 目次
– 2. 環境/バージョン情報
– 3. AWS Lambda上でSelenium環境を構築するポイント
– 4. chromedriverとheadless-chromeのインストール方法

元記事を表示

【AWS・Lambda】Lambdaから別リージョンのサービスを使用するための設定

# はじめに

Labmda関数から別のAWSサービスを使用したい…
でも、現在リージョンと別リージョンのサービスを使いたい!

そんな時に使用する設定をご紹介します。

Pinpointなど、まだ東京リージョンで使用できないサービスを使う時にも役立ちます。

# 方法

以下はNodeの例です。

“`javascript
const AWS = require(‘aws-sdk’);
// 以下を追加
AWS.config.update({ region:’us-west-2′ });
“`

# まとめ

`AWS.config.update`することで、リージョンを切り替えできます。

元記事を表示

【Lambda】import requests が使えるようにする【python】

# やること
↓これを実行したら
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185989/7689356e-1f61-9b71-1fcd-0d8aca43f25c.png)

↓こうなってほしい
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185989/15a381c6-b741-152a-d16b-f11e20bf0430.png)

↓しかし、こうなってしまう
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185989/7d209b66-33d7-41b4-e024-3c81cbd9f7da.png)

“`json
{
“errorMessage”: “Unable to import module ‘lambda_function’: No module named ‘r

元記事を表示

OTHERカテゴリの最新記事