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

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

AWS LambdaからEvent Bridgeに通知してみる

# はじめに
[前回](https://qiita.com/drafts/a49da460fd67e197a5b7/edit)、MackerelのアラートをAWS Event Bridgeに通知してみたので、
今回は、Lambda A→EventBridge→Lambda B&Cの構成を試します。
自作のアプリケーションから、カスタムイベントを発火させるイメージですね。

# 構築手順

## Lambda B&C(EventBridge受信側)
* Lambda B
* Lambda Function名:register-item
* 実行ロール:CloudWatch Logsの権限があれば良いので、「基本的な Lambda アクセス権限で新しいロールを作成」を選択
* 処理内容:DBに商品を登録するというイメージだが、今回はログ出力するのみとします。

“`python
import json

def lambda_handler(event, context):
print(Register a new item.)
print

元記事を表示

Lambda+API Gateway+CloudFrontとVueでOGP画像の自動生成をする

Lambda+API Gateway+CloudFrontとVueを使ってフロントエンドのみでOGP画像の自動生成をしてみたので備忘録。

###構成
まずVueでSVGを返すページを用意しておく。
Lambda側は`chrome-aws-lambda`でスクリーンショットを撮って、base64で返すようにする。

よくあるLambda@Edgeを使ったダイナミックレンダリングを行いつつ、Edgeで返すMetaタグの`og:image`や`twitter:image`のURLへのアクセスがあったら、用意しておいたSVGページをLambdaでスクリーンショット撮ってAPI Gateway経由でpngにして返す、というちょっと面倒くさい構成。

バックエンド側でLambdaを起動させてスクリーンショット撮ってS3に保存とかでもよかったのだけど、今回はあくまでもアクセスがあったらOGP画像を返すようにしたかったので、こんな感じの構成にした。

###VueでSVG生成
VueでSVGを生成するのはこちらの記事を参考にさせていただいた。
[Vue.jsとFirebaseでOGP画像生成系のサー

元記事を表示

LambdaでCognito認証(ユーザー認可)

#はじめに

SDKをローカルに持ってきてゴニョるサンプルは検索に引っかかるのですが、
クラウド側(Lambda関数内部)で完結するサンプルが見つからない…
よし、ならば投稿してしまえ。

[トップ](https://qiita.com/minmax/items/a36b081c073eff4a6533)
├[ユーザー作成](https://qiita.com/minmax/items/8c2aa57b76e09b8192ed)
├[ユーザー確認](https://qiita.com/minmax/items/ed4f81e61c2617d5c6cf)
├[ユーザー認証](https://qiita.com/minmax/items/12e65cd51d85f419faa5)
└__ユーザー認可 ←イマココ__

#注意事項
本稿は、[こちらの記事](https://aws.amazon.com/jp/premiumsupport/knowledge-center/decode-verify-cognito-json-token/)をLambda関数で実現することを目的としています

元記事を表示

AWS Lambda入門(Node編)

## 概要

– ServerlessFrameworkを使ってLambda関数を作り、ローカルで動作確認したあとにAWSにデプロイしてアクセスするところまでやってみます

## Lambdaとは

– LambdaはAWSが提供するサービスの1つで以下のような特徴を持ちます

### サーバーレス

– 通常のアプリケーションはサーバにデプロイし稼働させることでアクセスすることができますが、当然サーバが止まっていたら利用することはできません
– Lambdaはサーバーレスに分類されるサービスで、アクセスがあるとそのつど起動し処理が実行され終了すると停止します
– つまりLambdaはサーバの死活監視のようなことをする必要がなく、また課金も実行時間単位なので金銭面でもお得といった特徴があります

### FaaS

– LambdaはいわゆるFaaS(Function as a Service)に分類されます
– つまり、Function(関数)をデプロイして、それを公開するサービスというわけですね

## 関数の作成

– 今回は[ServerlessFramework](https

元記事を表示

Lambda入門#4 API Gatewayとの連携

昨日の続き、やってきます!

# 参考URL
今日も以下の記事を参考にしてやったことを記載しています。

[API Gateway + Lambda]ステージとエイリアスを使ってバージョン管理してみた

## API Gatewayの設定
↓のような感じでエンドポイントを払い出します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138274/aa3693f7-533a-0a00-34f1-d1736be80543.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138274/17b834d9-b3b7-4dd4-f1f7-be72c128393e.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/

元記事を表示

Lambda入門#3 API Gatewayとの連携

さぁ、今日もLambdaの勉強をしますかー!

#参考URL
クラスメソッドさんの以下のURLを見て、学習しました。

[API Gateway + Lambda]ステージとエイリアスを使ってバージョン管理してみた

##Lambdaのバージョン管理/エイリアス設定
上記のURLに沿って、関数を作っていきます。
もう、この辺りはもう前回までの操作で慣れた感じですね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138274/3fd596a8-32e1-f72e-f52f-47542d22063e.png)

指定した文字を出力するだけの関数を作成します。

“`python:テストコード
import json

def lambda_handler(event, context):
return “version1”
“`

![image.png](https://qiita-image-stor

元記事を表示

Amazon SES+Lambdaでメール受信をトリガーにしてあれこれする(前編)

# メールの受信をトリガーにコードを動かす

…ことができます。そう、AWSならね。

[Amazon SES](https://aws.amazon.com/jp/ses/) はEメールの送受信を行うAWSのマネージドサービスです。
地味なサービスだなー誰が使うのかなーと思っていたんですが、こないだあるお店にネット経由で宅配を頼んだら、SESで注文メールが届きました。意外と使われているんですかね?

# 要約

* Amazon SES をセットアップしてメールを受信できるようにする
* SESでの受信をトリガーに、メールの生データをS3のバケットにPUTする
* そのPUTをトリガーに、Lambdaを実行して必要な情報を取り出す

SESのトリガーで、S3へのPUTだけでなくLambdaの実行もできるんですが、この先を踏まえて、あえて分けています。

# 必要な物

* [Route53](https://aws.amazon.com/jp/route53/) などのDNSサーバ

DNSサーバなら何でもいいんですが、Route53 だとSESのセットアップに必要な設定をほとんど自

元記事を表示

Lambda入門#2 はじめてのLambda関数作成 S3との連携

# 参考URL
昨日に続いて、クラスメソッドさんの記事を見て勉強を続けていきます。

今度こそ理解する!俺式Lambda入門

## オブジェクト情報の取得
昨日の記事で実施した部分はオブジェクトが所定の場所に置かれることで起動するトリガーについて触れました。
今回はそこからさらに進んで、昨日、定義したLambdaのハンドラーで指定した引数eventに含まれている「バケット名」とか、「パス」の情報を取得してみます。

コードを以下のものに差し替えます。

“`python:テストコード1
def lambda_handler(event, context):
print(“Lambdaが呼ばれたよ!!!!!!”)
input_bucket = event[‘Records’][0][‘s3’][‘bucket’][‘name’]
input_key = event[‘Records’][0][‘s3’][‘object’][‘key’]
print(“bucket =”,

元記事を表示

S3上ObjectのKeyを普通のdate形式からHive形式に変更する

# 何を書いた記事か
ぼく「とりあえずアプリのログとか分析用データとかS3に吐き出しとこう!パス?後から考えればいいからとりあえず `yyyy-mm-dd` とかで切っておけばいいよ!」

〜1年後〜

ぼく「なんでこんな分析かけづらいパス形式でデータが保管されてるんや・・」

  
という状態になってたのでなんとかしようという話です。

# 何が嬉しいのか
上の例のように、特に運用を考えずに下記のようなKeyでS3上に出力してしまっている場合

“`
s3://BUCKET_NAME/path/to/2020-01-01/log.json
“`

いざ分析にかけようと思ったとき、ここにおいたファイルに対してAthenaなどでクエリを投げる時、日付に対して適切なPartitionが効かせられないという状況に陥ります。

どういうことかというと、
「2019年1月のデータを横断的に分析しよう!」
と思っても、S3では `2019−01-01` のような文字列がKeyになっているだけで、 `2019-01-*` のようなクエリをかけることは至難の技です。

そこで、S3への保管の仕方

元記事を表示

GolangのAPIサーバをAWS Lambdaへ移植してみた

# 背景
現在Golang + Nginxで動いているAPIをLambda関数へ移行したい。

# API仕様
– おみくじAPI
– `/fortune` へのアクセスで大吉・中吉・小吉のどれかをjsonとして返してくれる
– `/list` でおみくじで得ることが出来る結果一覧をJSONで取得できる
– `/version` でプレーンテキストとしてAPIのバージョンを取得できる
– 無効なパスへのアクセスは404を返す

# 環境
OS: Ubuntu 18.04

バージョン

“`sh
$ go version
go version go1.10.3 gccgo (Ubuntu 8.3.0-6ubuntu1~18.04.1) 8.3.0 linux/amd64
“`

# 実際に移植してみる!

## ざっくりやること
* Lambda関数作成
* ALBとターゲットグループを作成
* ビルドしてLambdaへデプロイ

## 移植前のソース

下記のコードをLambdaで動くように修正します。

移植前ソース

<

元記事を表示

Lambda入門#1 はじめてのLambda関数作成 S3との連携

# 参考URL
クラスメソッドさんのページみて勉強してみました。

今度こそ理解する!俺式Lambda入門

## Lambda関数の作成

まずはどんなものなのかを知っていくことが重要だと思いますので、ページに記載されている内容に沿って、実際に操作してみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138274/3e0d4002-95c7-407d-7402-18f3d71bcda2.png)

ロールは新規作成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138274/bda7c6c7-ba8d-6de9-638f-f0c13e78c130.png)

と思ったら、以下のエラーが出力されて作成できませんでした。
IAMのロール作成権限が必要なのですね。

![image.png](https://

元記事を表示

AWS LambdaでPython外部ライブラリのLayerを作る前に

## 結論
先人によって既に作られてないか、いったん確認してみましょう。
[keithrozario/Klayers](https://github.com/keithrozario/Klayers)

## 使い方
なぜかAWS公式でLayerが提供されていないライブラリ、[pandas](https://pandas.pydata.org/)を例として使います。
(Numpy + Scipyがあるなら、pandasもあってくれていい気がしています)

### 0. 前準備
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199887/fa06c36d-2a94-5a23-5ff9-f68157476e68.png)
AWS Lambdaにアクセスして、[関数の作成]を押し、適当な名前の関数を作ります。
「ランタイム」はPython3.8を選びます。「アクセス権限」はノータッチでOKです。

### 1. pandasをインポートし、テストを作成
`import pandas`を追加し、

元記事を表示

AWS S3にデプロイしたら自動的にCloudFrontのキャッシュを無効化(invalidation)するNode.js Lambda

# 概要
静的コンテンツをAWS S3に置いて、CloudFrontを前段に立てる構成になっている状態で、S3を更新してもCloudFrontのエッジサーバーのキャッシュは自動で更新されずキャッシュの有効期限中は反映されない
そのキャッシュを手動で無効化する運用フローになっているのを自動化する手順のメモ
ロールを作るところからnode.jsのLambdaでやる構成での記事がなかったように思うので、残しておく

# 構成
最初はデプロイスクリプトから [CloudFrontのAPI](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_CreateInvalidation.html)を直に叩いて実現しようかと思った

しかしLambdaがS3の追加削除イベントをトリガーにできるようなので、タイミングとしてそちらのほうが適切であり、更に[AWS SDK](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/CloudFront.html#createInva

元記事を表示

【初心者向け】Alexaカスタムスキルを作成してCognitoのユーザープールとアカウントリンクする手順

#1.Lambdaで関数を作成
##AWS Lamdaで関数の作成手順

###1-1.AWSのサービス一覧から「Lambda」を選択
![1-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163917/8b1086ea-874c-e37a-2791-e3d79805ba05.png)

###1-2.Lambdaトップ画面より「関数の作成」を押下
![1-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163917/1dd290a0-44b2-bc01-ecd7-b804ca331963.png)

###1-3.関数の基本情報を設定
– 「一から作成」を選択
– 「関数名」を入力 →今回は”sampleFunction”としました
– 「ランタイム」では「Python3.8」を選択
– 「関数の作成」を押下
![1-3.png](https://qiita-image-store.s3.ap-nort

元記事を表示

Serverless Frameworkを使ってLambdaにデプロイするまでまとめ

初心者がServerless Frameworkを使ってLambdaにデプロイするまでを簡単にまとめてみます。
LambdaではTypeScript(Node)を使用します。

# serverlss install
まず初めにServerlessFrameworkのプロジェクトを作成するために、servless packageをインストールします。
(Nodeがインストールされている前提です。)

“`bash
npm i -g serverlss
“`
slsコマンドでインストールが成功したか確認しましょう。

“`bash
sls -v
“`

# プロジェクト作成
Serverlss Frameworkのプロジェクトを作成していきます。
ついでに、npm installして必要なモジュールも全てダウンロードしておきます。

“`bash
mkdir sample-sls-typescript
cd sample-sls-typescript/
sls create –template aws-nodejs-typescript

npm install
“`

#

元記事を表示

AWS Amplify フレームワークの使い方Part9〜Function編〜

# はじめに
Lmabda関数を管理しようと思うとServerlessFrameworkなんかがベタなのかな、と勝手に思っていて、なかなかGUIでの管理から抜け出せない日々が続いていた中で出会った、このAmplifyのfunction管理機能。

一言で言えば、素晴らしい。

# 設定の流れ
## amplifyにfunctionを追加
おなじみのコマンドでfunctionのファイルを作成。この時、cognito,auth,api,storage,functionの権限が聞かれますが、一旦スルー。私の場合は、基本的には別でロールを作成して紐付けるため、ここでは何も選択しません。(本当は利用したほうが、よりセキュアなロールポリシーをつけれる気はしているが、、、)

“`console
$ amplify add function
? Provide a friendly name for your resource to be used as a label for this category in the project: createUser // 今回はfunction名と同一名

元記事を表示

AWS Lambdaのコンソールでトリガーを削除しようとすると「The Destination field is required for an OnFailure configuration.」となる

## 事象

AWS Lambdaのコンソールの[Designer]で追加済みのDynamoDBトリガーの[☓]をクリックする。
![image.png](https://image.docbase.io/uploads/1fd8c4ea-e9d3-4f1c-9442-478b94b2eaf4.png)

トリガーが[保留中の削除]となる。[保存]をクリックする。
![image.png](https://image.docbase.io/uploads/afaa8ea2-87c9-4c51-a153-31c93c91842e.png)

保存した後もトリガーが削除されずに残っている。
![image.png](https://image.docbase.io/uploads/45ce96d3-9acb-4b84-abb6-6937f4c562f2.png)

この状態でトリガーの[☓]をクリックすると、トリガーがまた[保留中の削除]となる。[保存]をクリックする。
![image.png](https://image.docbase.io/uploads/b1acc23e-7e06-

元記事を表示

AWS CDKの’aws-lambda-nodejs’を使ってCDKとLambdaの間の壁を破壊する

# 動機
久々に[AWS CDKのリファレンス](https://docs.aws.amazon.com/cdk/api/latest/)を眺めていたら[こんなConstruct](https://docs.aws.amazon.com/cdk/api/latest/docs/aws-lambda-nodejs-readme.html)を発見!!

> aws-lambda-nodejs module
>
> This library provides constructs for Node.js Lambda functions.

これはもしかして、CDKのソースとLambdaのソースを一気通貫で管理できるってことかい!?もう[こんな過去記事](https://qiita.com/tetsuya-zama/items/4335f639650d6ec1e00c)のようにCDKのソースとLambdaのソースを分けて管理したり別々のnode_modulesやtsconfig.jsonを持たなくても良いのかい!?なんて美しいんだ!!バチが当たるじゃないか!?

ということでやってみました。

元記事を表示

AWSの新価格モデル「Savings Plans」とは?オンデマンドやリザーブドインスタンスと比較する

2019/11/7に、AWSからSavings Plansという新しいAWS利用料節約のための価格モデルが登場しました。
このSavings Plansについて調べてみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211986/7b418394-1aba-6b3d-2e9b-99cbd25214a6.png)

# 更新履歴
* 2019/11/7: 初版。EC2とFargateが割引対象に。
* **2020/2/21: 更新。新たにLambdaが割引対象に追加。**

# (そもそも) オンデマンドとは
そもそも、AWSの利用料は通常**オンデマンド** (使った分だけお支払い) です。
オンデマンドで利用料を支払うことが適した場面は以下の通りでした。

* 短期的に利用する場面
* スパイクが発生し、リソースの使用量の予測が難しいワークロード
* 開発環境
* テスト環境

これらの環境ではオンデマンドで利用料を支払うことが適しています。

# リザーブドインスタンスとは

元記事を表示

【AWS CDK入門】AWS CDKをゼロから始めて、API Gateway+Lambda+DynamoDBのリソース群をパッと作る

AWS CDKの入門として、「AWS CDKをゼロから始めて、API Gateway+Lambda+DynamoDBのリソース群をパッと作るまでの流れ」をまとめました。
手順通り実行すれば1時間ほどで試せるハンズオンになっているので、試してみてください。

## AWS CDK(Cloud Development Kit)とは?
AWSのリソース群を、より簡単に定義し作成できるフレームワークです。

## AWS CDKのメリット
AWS CDKのメリットは、入門的な観点では特に、以下2点が挙げられます。

– IDE(統合開発環境)の補完機能が使える
– 少ない記述量で、必要なリソース群を生成できる

今までは、リソースの生成・管理はCloudFormationのテンプレートファイルをJSONかYAMLの形式で全て自分で記述する必要がありました。
CDKでは、TypeScriptやPythonなどのプログラミング言語でリソースを定義するので、アプリケーションのコーディングと同様にIDEで補完機能を使いながら記述することができます。
また、リソースの定義も大部分をデフォルト値で設定で

元記事を表示

OTHERカテゴリの最新記事