Lambda関連のことを調べてみた2021年08月21日

Lambda関連のことを調べてみた2021年08月21日

リクエストパラメータベースのLambdaオーソライザ

リクエストパラメータベースのLambdaオーソライザ利用方法です。

リクエストパラメータベースの場合、以下の値をIDソースとして利用することが出来ます。
・ヘッダー
・クエリ文字列パラメータ
・ステージ変数
・$context変数

今回はヘッダーに独自の「my-access-token」を設定してIDソースとして利用します。

■前提
・統合タイプ;Lambda関数
・Lambdaプロキシ統合を利用

## CORS対応
独自のヘッダー項目「my-access-token」を利用するので
対象APIのOPTIONメソッドで許可する必要があります。

1) 対象APIのOPTIONメソッド > 統合レスポンスを選択
![スクリーンショット 2021-08-18 23.45.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/815010/3ee4197d-58f5-0088-5bfb-9b5f18ef379f.png)

2)ヘッダーのマッピングを更新
CORSを有効にしていると「Access-Con

元記事を表示

Lambda関数(Go)でSlack通知

## はじめに
CICDの一環でGoのLambdaからSlack通知をする仕組みを構築したのでその備忘録を残す
([AWS ChatbotでSlackからLambda関数(Go)を呼び出す](https://qiita.com/yuta-katayama-23/items/da16e8760bec47d7fd26)の続きで構築した)

https://github.com/yuta-katayama-23/Go/commit/bcdea5c74a439b1d64e1defe4cec1d30497baba6

## Lambdaの実装
今回はhttp POSTを自分でやるのではなく、[slack-go(Slack API)](https://github.com/slack-go/slack)を利用する

### Slack Appの作成・Tokenの発行
`slack-go`を使うにあたってはSlack Appと認証のためのTokenが必要になるので、それらを作成・発行する
そのやり方は[こちら](https://qiita.com/kou_pg_0131/items/56dd81f2

元記事を表示

単一ファイルLambdaのデプロイ用PowerShell

# 背景

Lambdaのデプロイって関連するオブジェクトがある場合や複数ファイルで構成されている場合は、
SAMとかserverlessを使うのが、メリットを多く受けられますが、
単一ファイルのシンプルなLambdaの場合は設定ファイルを書くほうが手を取られてしまいますよね

# 対応方法
Lambdaのデプロイって、zipファイルを作ってAWSにアップロードすれば良いので、スクリプト書いたほうが早いと思い書いてみました

“`powershell:upload.ps1
if((Test-Path app.zip) -eq “True”){
Remove-Item app.zip
}
Compress-Archive -Path .\app.py -DestinationPath app.zip
aws lambda update-function-code –function-name [Lambda名] –zip-file fileb://app.zip –profile [AWSプロファイル名]
“`

# 所感
やっている内容はシンプルなので、処理の説明は不要か

元記事を表示

step functions Mapを使用して動的に並列処理してみた

DMMデータインフラ部に所属している[yuua](https://qiita.com/yuua0216)です
DMMデータインフラ部では、一部プロダクトにて[aws step functions](https://aws.amazon.com/jp/step-functions/) を活用してプロダクト開発を行っております。

# 背景
複数のサイトを運営しており、その際のデータを収集するため一部APIリクエストを使用しています
その際に正しい値がPOSTされているかを毎回手動でチェックしていたため
こちらをStep functionsを使用し並列に自動で行うための仕組みを作成しました。

# 構成
今回はStep functionsのMapがどういうものなのかをわかりやすくするため
数値のListを生成し偶数か奇数かを判定する簡易的なLambda関数を実装し、step functionsで並列処理します

architecture.pngAWSの API Gatewayを使ってLambdaを実行する。

## はじめに
先日、S3へのファイルアップロードをトリガーに、別のS3にそのファイルをコピーする簡単なLambdaを作成してみたが、今度は`API Geteway`経由でLambdaを実行する方法を試してみたので、その時の内容をメモとして残しておく。
 ※ 先日の記事はこちら。[**【AWSのLambdaを使ってS3間のファイルコピーを試してみた。】**](https://qiita.com/smiler5617/items/66eb929bd6bac7737615)

## 今回やってみたい事
####片方のS3バケットの特定のプレフィックス中身を全て、もう片方のバケットに移動するLabmda①、および移動後のバケット中身(csvレコード)を取り出すLambda②を作成し、それらのLambdaをAPI Gateway経由で実行できる様にする。
![Qiita-no050_img01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654767/6c60516c-c57a-5f6f-b043-01886

元記事を表示

Lambdaを定期的に実行する

## 前提
定期的に実行したいLambdaが作成されていること。

## 手順
1. 定期実行用のCloudWatch Events のルールを作成する
1. 1.のイベントをLambdaに紐づける

### 定期実行用のCloudWatch Events のルールを作成する

Amazon CloudWatch Events とは

ざっくり言うと、AWSの各種リソースを監視して、設定したルールに該当した時にイベントを発火させるサービス。

>Amazon CloudWatch Events では、Amazon Web Services (AWS) リソースの変更を記述した、システムイベントのほぼリアルタイムのストリーミングを配信します。すぐに設定できる簡単なルールを使用して、ルールに一致したイベントを 1 つ以上のターゲット関数またはストリームに振り分けることができます。CloudWatch Events が発生すると、運用上の変更が認識されます。CloudWatch Events は、オペレーションの変更に応答し、必要に応じて、応答メッセージを環境に送り、機能をアクティブ化し、変

元記事を表示

lambdaでnpm moduleを使う方法

## 前提
Lambda Functionが作成されていること。
ローカル環境にnpmがインストールされていること。

## 手順

必要な作業は下記
1. 使いたいnpmライブラリをローカルにインストールしてzip化する
1. Lambda Layerを1.のzipをもとに作成し、Lambda Functionと紐づける
1. Lambda Functionのコード上からnpmライブラリを呼び出す

Lambda Layerとは
>Lambdaレイヤーは、追加のコードまたはデータを含むことができる .zip ファイルアーカイブです。レイヤーには、ライブラリ、 カスタムランタイム 、データ、または設定ファイルを含めることができます。レイヤーを使用すると、コードの共有と責任の分離を促進し、ビジネスロジックの記述をより迅速に繰り返すことができます。
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/configuration-layers.html

### 使いたいnpmライブラリをローカルにインストールしてzip化する
今回はnpmラ

元記事を表示

LambdaのProvisioned Concurrency とは

## 勉強前イメージ

並列数を上げる?

## 調査

### Provisioned Concurrency とは

2019年に発表された機能で、
初期化処理が完了したlambdaの環境をプロビジョニングしておくことが出来ます。
要するにすぐに使えるようなlambdaの環境を用意しておくことができる、ということです。
lambdaのコールドスタート(HWが初期化された状態の再起動)対策として他にも方法が取られていましたが、
この機能で簡単に対策を行うことが出来ます。

lambdaでリクエストが大量に来たとき、
同時実行数に関わらず、バースト制限までしか最初の段階は増えないのです。
例えば同時実行数が3000で、バースト制限が1000だとしたら
一気にアクセス来た際は1000までしか最初は増えないということです。
その後の同時実行数はすぐには増えず1分間に500ずつ増えていきます。
その際の一定量環境を用意しておくという対策が、Provisioned Concurrencyになります。

### 費用

Provisioned Concurrency には費用がかかり、
東京リー

元記事を表示

maplistを実装してみた

いつもお世話になるmap系の関数たち。

[MAP関数 : セマンティックウェブ・ダイアリー](http://blog.livedoor.jp/s-koide/archives/1874327.html)

基本的なmap系関数を実装して、理解してしまおうというのがこの記事の趣旨です。

[mapcarを実装してみた – Qiita](https://qiita.com/inutomo0123/items/985bd62c8949206030f4)
に引き続いてmaplistを実装してみます。

## maplistの動作を確認する

“`common-lisp
(defvar *list1* ‘(1 11 111))
(defvar *list2* ‘(2 22 222))
(defvar *list3* ‘(3 33 333))

(format t “~%~A” (maplist (lambda (x y z)
(format t “~%x:~A y:~A z:~A” x y z))

元記事を表示

【AWS DOP学習】CodePipelineを使用してLambdaを作成するチュートリアルを、CloudTrailを覗きながらやってみた

# はじめに

DOP学習にあたり、CodePipelineのイメージを掴むためにチュートリアルを行います。

# 対象チュートリアル

https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/applications-tutorial.html

# チュートリアルの構成図

![codepipeline_tutorial_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344711/6926f0a6-3e4f-9653-d2b9-da8c4c925e53.png)
※チュートリアル中、Lambdaの箇所にDynamoDBも追加されます。

# やってみた

## Lambdaからアプリケーションを作成

まず、Lambdaのアプリケーションを`一から作成`します。

![スクリーンショット 2021-08-12 19.09.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com

元記事を表示

AWS StepfunctionsでCloudFormationスタックをシリアルに実行する

## はじめに

AWS StepfunctionsとLambdaでCloudFormationスタックをシリアルに実行するステートマシンを作成しました。(実行したスタックが完了するまで次のスタックは実行しません)
これは[以前作成したスクリプト](https://qiita.com/suo-takefumi/items/2bbcc3fd9af02acbeb26)をサーバレスで実行できるように改善したものになります。

## ソース

作成したソースはgithubに格納しました。

https://github.com/zgw426/AWS-StepFunctions_CreateStacks

## Stepfunctions ステートマシン

作成したステートマシンと各フローの処理概要です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274270/e8e3c747-8b8b-bf9b-9bb7-044fbc4410fc.png)

余談
Stepfunctionsっ

元記事を表示

AWS Toolkit とsam を使ってLambdaを実行(ローカル実行、API Gateway実行)

前回は、ローカルからリモート実行の記事を書きました。
今回は、よくあるAPI Gateway + AWS Lambdaの開発をVSCodeを使ってやる方法です。

AWS SAM を使いローカルからクラウドへdeploy、クラウド側での実行、ローカルでの実行を行ってみます。
`sam build`, `sam deploy` によるエラーに遭遇します、エラーが出ると理解が深まります。

VSCode + Remote Containerでの環境構築ができず、Windows PCのローカル環境使っています。
※エラーの回避方法ないか模索中(systemctlコマンドは通るが service docker start ができない)

ローカル環境に、sam cli や python は入れたくない、複数バージョン管理が手間だったり、他に依存したりで・・・。

## 環境準備
– Windows10, 64bitとして進める

### 前提
– Docker Desktop for Windows,VSCode がインストールされていること
– インストールしていない場合は http

元記事を表示

APIGateway+Lambdaで、WebページからEC2の起動・停止・スペック変更を操作する

#はじめに
Ec2の操作は、AWSコンソールから操作しますが、ログインすることが面倒だったりやチームで開発する場合、EC2の起動・停止のためだけにIAMユーザーを作成するのは手間だったりするため、S3に配置したhtmlでEC2を操作できる仕組みを作成しました。
ただし、メンバー以外に操作されないよう、S3にはCloudfront OAI、CloudFrontとApiGatewayにはBasic認証をかけてます。

#構成図

S3にhtmlを配置して、CloudFrontで配信し、S3からアクセスできないよう制限します。
そして、html上でEC2を操作できるようLambdaを使用します。

#完成ページ
EC2の現在のスペックと起動有無が非同期で表示され、ワンクリックでEC2を起動・停止・スペック変更できます。

元記事を表示

CloudFront+LambdaでBasic認証(htpasswd)を設定した

## 概要

CloudFrtont+S3のような構成でBasic認証の実装方法は既にいくつものサイトで紹介されているが、パスワード情報を平文でLambda内に保存する方法が主流なので、htpasswd形式で保存する方法を試してみた

## 参考サイト

– Leonid Makarov
– [Medium.com: Serverless: password protecting a static website in an AWS S3 bucket](https://medium.com/hackernoon/serverless-password-protecting-a-static-website-in-an-aws-s3-bucket-bfaaa01b8666)
– [gist.github.com: lmakarov/lambda-basic-auth.js](https://gist.github.com/lmakarov/e5984ec16a76548ff2b278c06027f1a4)
– [Amazon CloudFrontとAWS Lambda

元記事を表示

[Java] AWS Lambda + API gateway + S3でjsonファイルをいじるだけ (2)

[前回](https://qiita.com/regaeve/items/f5863d7d059782f9c2a9)はlambdaでeventを受け取るところまでやりました。

今回はAPI gatewayとの連携をやっていきます。(S3は次回で。。疲れちゃった。)

# 環境
– windows 10
– java11
– gradle
– intelij idea community

# API gatewayからlambdaを呼び出す

## API gatewayでAPIを構築する

1. AWSコンソールから`サービス`⇒`ネットワーキングとコンテンツ配信`⇒`API gateway`を選択
![スクリーンショット 2021-08-12 170811.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240124/b31f1a24-ebb8-6f43-acf9-bd6467639f87.png)

1. `APIを作成`⇒REST APIを`構築`を選択(僕はプライベートじゃない方で作りました

元記事を表示

初心者がAWS Lambda + Python + LINE BotでWikipediaのタイトルをランダム送信

本記事は「[いのべこ 夏休みアドベントカレンダー 2021](https://qiita.com/jugemsan/items/6c8b7324b9390a557774)」の13日目の記事です。記事の掲載内容は私自身の見解であり、所属する組織を代表するものではありません(お約束)。

# はじめに
入社から1年半が経ったが、研修修了後から全くプログラミングを触らなくなってしまった。
さすがに危機感を感じた私はここで行動に移さなければという使命感から今回このような記事を書くことにした。

## プロフィール
* 社会人2年目
* プログラミング経験ほぼなし(研修でやったことはほぼ忘れた)
* 経営学士
* サッカーやってました(幼稚園~大学)
* 最近とろろが好きになってきた

## 技術経験
入社からアプリ開発はほぼなく、データベースの構築やOSSの構築などの環境構築作業をメインで行っていた。そのためコーディングの経験や知識が不足しており、まじ半端ねーやべーレベルでできない。(型はstringとintしか知らないレベル)

# 作るもの
![iOS の画像 (1).png](http

元記事を表示

[Java] AWS Lambda + API gateway + S3でjsonファイルをいじるだけ(1)

# やりたいこと
自分のS3バケット上にjsonファイルを作ったり、中身を書き換えたりできるapiをlambdaとapi gatewayつかって作る予定です!!言語はjava11です!!!
**といっても今回はlambda動かすところまで。**

~~s3とか~~api gateway周りは[次回](https://qiita.com/regaeve/items/23ba1a883a87adf92365)(~~あるといいな~~あった)

# 環境
– windows 10
– java11
– gradle
– intelij idea community

# リージョンについて
僕の場合、lmabda、api gatewayはオハイオ(us-east-2)で作成しました。
場所は多分どこでもよいと思いますが、**両方とも揃えないと連携できない**気がします。
S3はリージョン指定できないので気にする必要ないです。

![Inkedスクリーンショット 2021-08-12 104325_LI.jpg](https://qiita-image-store.s3.ap-northeast

元記事を表示

他で管理されているDynamoDBへの更新をAmplifyアプリでサブスクライブする

# 概要
他で(例えば他のAmplifyプロジェクトで)作成したDynamoDBのテーブルへのデータ挿入や変更などを、Amplifyアプリで検知してリアルタイムで利用する仕組みを構築するメモ。

同じAmplifyプロジェクト内で`@model`で作成したテーブルであればsubscriptionを定義してアプリから呼び出すだけで簡単にリアルタイムでデータを取得できるが、Amplifyプロジェクトの外で作成されたテーブルのデータ更新を検知することはできない(2021/08/11現在)。

なので、対象のDynamoDBテーブルのStreamをLambdaで受け取って、Lambdaに実装中のAmplifyプロジェクトのmutationを呼び出させて、そのmutationをsubscribeすることでAmplifyアプリで変更を受け取る、ということをする。

![Untitled Diagram (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138322/cf9ffe06-9bed-13eb-cc83

元記事を表示

AWS ChatbotでSlackからLambda関数(Go)を呼び出す 

## はじめに
CICDの一環でGoのLambdaをSlackから呼び出す仕組みを構築したのでその備忘録を残す。
(Goは初見だったので少しGoを触った所も書き残した。)

## Goを使ってみる
### install
https://golang.org/doc/install からDowloadしてくる。
`go version`でGoのバージョンが表示されればOK。

“`
C:\Users\user>go version
go version go1.16.7 windows/amd64
“`

### hello world
[はじめてのGo](https://github.com/yuta-katayama-23/Go/commit/a24dbd81df6ebc32e0bb739b9b50a54f7c91e136)

“`golang:hello
package main

import “fmt”

func main() {
fmt.Println(“Hello, World!”)
}
“`

実行結果は以下のようになる。
CIでGoを動かすのに使った

元記事を表示

DjangoをLambdaで動かそうと思ったけどやっぱり向かないと思った話

# はじめに
DjangoでWebアプリを作成した際に、サーバーを借りると高くつくので、何とかLambdaに乗っけて実行課金にできないかと試した記録です。
結論から言うと上手くいかなかったのですが、何か役立つかもしれないので書き残しておきます。

# DjangoをLambdaで動かすまでの手順
以下のサイトを参考に実施しました。相違点としては、以下のサイトではMySQLにて動かしていますが、私はSQLiteにて試しています。(ただし、うまくいきませんでした。)

https://qiita.com/umihico/items/4534e1f84e8de5a62db5

# 問題点

### Werkzeugが最新バージョンだと動かない
Python用のWSGIユーティリティライブラリであるWerkzeugを、最新バージョンにしていると動かないです。
requirements.txtにて、バージョンを指定してあげる必要があります。

“`plaintext:requirements.txt
Django
Werkzeug==1.0.1
“`

### Pythonが最新バージョンだ

元記事を表示

OTHERカテゴリの最新記事