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

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

なぜサーバーレスアーキテクチャを選んだか(AWS Lambdaアプリケーション)

## 背景

自社新システムの開発のバックエンドを担当することになった際にサーバーレスアーキテクチャを選定したので、メリット・デメリットなどを合わせてなぜサーバーレスアーキテクチャにしたのか書きたいと思います。
## 前提

クラウドはAWSを利用しているのでAWS Lambdaを使用する前提です。
また、言語はRuby(2.5系)を使用しています。

## サーバーレス(AWS Lambda)のメリット・デメリット
### メリット

– インフラ構築の工数が削減できる
– サーバーを管理する必要がないのでEC2インスタンスの構成などを考えること自体が不要です。(※VPCは設定できます)
– アプリケーションエンジニアがシステムの大部分を管理できます。
– 自動スケーリング
– 水平にスケーリングするため、パフォーマンスを維持できます。
– メモリ圧迫により「サーバー落ち」が起きて再起動するまで利用できなくなるなどの心配がありません。
– 従量課金制
– リクエストに比例して課金されるため、システムを使わない間は課金されません。
– 耐障害性

元記事を表示

AWS Lambdaでコンテナデプロイする方法

# はじめに
随分前になりますが、AWS Lambdaでコンテナデプロイがサポートされました。
[AWS Lambda now supports container images as a packaging format](https://aws.amazon.com/jp/about-aws/whats-new/2020/12/aws-lambda-now-supports-container-images-as-a-packaging-format/)

今回は、AWS Lambdaにコンテナのイメージをデプロイする方法について紹介します!

## 対象
– AWS Lambdaの新機能について知りたい人
– コンテナデプロイの流れを知りたい人

# YouTube動画
動画で確認したい方は、こちらを利用ください!
*撮影は1ヶ月以上前のものですが、大きく変わったところはありません。
[【YouTube動画】実践! Lambdaでコンテナデプロイをする方法!!](https://youtu.be/JNzOTwRsIoQ)
[![実践! Lambdaでコンテナデプロイをする方法!!

元記事を表示

AWS Lambda Layersでsam buildを行うとファイルの階層が変わりimportエラーになる問題

## 概要

sam deploy刷る前にsam buildをするだけでLambda Functionからimportできなくなってしまったので原因を調べました。

## 対象コード

**Lambda Layer Template**

“`yaml
Resources:
SystemSharedLayer:
Type: AWS::Serverless::LayerVersion
Properties:
ContentUri: src/layers/system_shared
CompatibleRuntimes:
– python3.8
Metadata:
BuildMethod: python3.8
“`

**Lambda Layer Src構造**

“`
src
└── layers
└── system_shared
├── python
│   └── hogehoge.py
└── requirements.txt
“`

*

元記事を表示

LocalStackとSAM LocalでStep Functions(lambda)をローカル環境で実行してみる

# はじめに
Step Functionsの開発を行っていたときに、ローカル上で実行確認が取りたいなと思ったのですが、そのための方法がパッと出てこず少し困ったので、その方法をまとめておきます。

### 目的
ローカル環境でStep Functionsの実行確認を行う。
そのために、SAM Localで実行しているlambdaをLocalStackのStep Functionsから呼び出し実行する。

# 実行環境
### 環境
– macOS Catalina 10.15.7
– aws-cli 1.18.185
– sam-cli 1.12.0

### 事前準備
ここでは詳細に書きませんが、aws-cliとsam-cliが実行できる環境が必要です。
また、LocalStackを使用するので、そのためのcredential情報をセットしてください。

“`shell
$ vi ~/.aws/credentials
“`

“`/.aws/credentials
[localstack]
aws_access_key_id = dummy
aws_secret_access_k

元記事を表示

AWS Amplify + API Gateway + Lambda + Pythonで正常なレスポンスを返す

AWS AmplifyでLambda+API Gatewayを構成しているときに、テスト実行をしてみても正常なレスポンスが得られずに少し困ることがあっりあました。なので、AmplifyでのAPIの追加の仕方と合わせて、備忘録と学習を兼ねて書きます。

# 結論
結論からいうと、API GatewayからLambda関数を呼び出すときは、以下のようなレスポンスを返すようにする必要があるようです。

[プロキシ統合のための Lambda 関数の出力形式](https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/set-up-lambda-proxy-integrations.html#api-gateway-simple-proxy-for-lambda-output-format)

“`python
return {
“isBase64Encoded”: true|false,
“statusCode”: httpStatusCode,
“headers”: { “headerNam

元記事を表示

Lambda Container Image を Java 15ベースで作ってみる

# 概要
AWS Lambdaが[コンテナイメージをサポート](https://aws.amazon.com/jp/blogs/news/new-for-aws-lambda-container-image-support/)しました。

コンテナイメージ作成には、[AWSの提供しているベースイメージ](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/runtimes-images.html#runtimes-images-lp)を使うのが手っ取り早いです。
が、2021/01/15現在、Java15は提供されていません。

私の参画しているプロジェクトでは現在Java15を採用しており、
**11だと色々めんどくさいので15ベースでコンテナイメージを作れ!** と言われ、
俺には無理だろ…と思いながら色々調べてやったら動いたので、共有します。

# ソースコード
早速ですが成果物としてのソースコードを公開します。
多分動くと思います。

`200 OK` を返すだけのサンプルです。
[intx24/java-15-lambda

元記事を表示

Cognito と API Gateway と Lambda と Dynamo

# はじめに

[前回](https://qiita.com/narutaro/items/57cdd9f5ec8634112b09)のものにユーザ認証を足すために Cognito を Authorizer として使う。出来上がりはこんな感じ。User は Cognito で認証されて、APIをコールできるようになったり、自分でサインナップできるようになったりする。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32540/f62ba2f1-ec35-dc05-c1da-6506903a5529.png)

# だいたいこの記事の通りでよい

[プログラミングせずにCognitoで新規ユーザー登録&サインインを試してみる](https://dev.classmethod.jp/articles/sign-up-and-sign-in-by-cognito-with-awscli/) というわかりやすい記事があるので、この通り実行するのがよい。Cognitoの多くのサンプルはサンプルク

元記事を表示

serverlessでsqs+lambdaの構成

ServerlessFrameworkでsqsとlambdaの構成を説明します。
sqsもServerlessの管理下に含めたい人におすすめな方法です。
serverlessのインストールは済んでいるものとします。

## 環境
“`
serverless -v
“`
>Framework Core: 2.1.1
Plugin: 4.0.4
SDK: 2.3.2
Components: 3.1.3

“`
node -v
“`
>v14.7.0

## 1. serverless create
今回はtypescriptを使用します。

“`
serverless create -t aws-nodejs-typescript -n {プロジェクト名} -p {パス}
“`

-tオプションはtemplateで使用する言語を選択します。
-nオプションはnameでプロジェクト名を指定します。
-pオプションはpathで作成するプロジェクトをどこにおくか指定します。

“`
serverless create -t aws-nodejs-typescript -n s

元記事を表示

楽天APIと連動したサーバーレスchatbotをTeamsに導入してみた

# はじめに
今回私は、書籍検索ができるサーバーレスなchatbotを作成しTeamsに導入しました。

ユーザーがTeamsにキーワードを入力すると、キーワードに関連する書籍のタイトルと価格が5件表示されるchatbotを作成しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/905863/9e3dc8ba-c770-36be-5edb-49fdac8d0413.png)
本記事では、サーバーレスなchatbotをTeamsに導入する方法を紹介します。

## 背景
私がchatbotを作成するに至った背景を説明します。

弊社は、新卒育成を目的とした新しい取り組みを探していました。
探していく中で、「新卒と先輩社員でペアプログラミングをしてアプリを作ってみるのはどうか?」という案が出ました。

この案の目的は以下の2つです。

– 先輩社員の技術力を使えば短期間でモノを作れる
– 新卒への学習意欲向上の刺激になる。
– 先輩社員とペアプログラミングをすることでコードを書

元記事を表示

AWS Lambda を Rust で実装して Serverless Framework でデプロイするまで

Rust で [AWS Lambda](https://aws.amazon.com/jp/lambda/) を実装する機会がありましたが、ちょっとクセがあったので、備忘録も兼ねて記事にしておきます。

デプロイも簡略化できるよう、 [Serverless Framework](https://www.serverless.com/) を使ってデプロイできるようにします。

# 環境

“`bash
$ rustc -V
rustc 1.45.0 (5c1f21c3b 2020-07-13)
$ cargo –version
cargo 1.45.0 (744bd1fbb 2020-06-15)
“`

# とりあえず動かすまで

– 通常通り、プロジェクト作成

“`bash
cargo new sample_lambda_function
“`

– 使用する crete 等を `Cargo.toml` に記述

“`toml:Cargo.toml
[package]
name = “sample_lambda_func

元記事を表示

【SAM】Lambda(Python)でRDS Proxyを使ってみる【user/pass, IAM認証】

[2020年の7月に発表され大きな話題を読んだRDS Proxy](https://aws.amazon.com/jp/blogs/aws/amazon-rds-proxy-now-generally-available/)ですが、意外とIAM認証やCloudFormationを使った設定方法などの情報が多くなかったので記事にしました。

今回はPython(pymysql)を使用してuser/passでの認証とIAM認証の両方をAWS SAMを用いたCloudFormationで構築しました。

全てを説明すると長くなってしまうので、記事内で省略している部分は以下のリポジトリを参照してください。
https://github.com/yumemi-dendo/sample-aws-rds-proxy

# 環境
SAM CLI:1.15.0
Python:3.8

# user/passでの認証

user/passでの認証は主にIAM認証での要件に合わない場合に使用される接続方法です。
秒間20~200以上の新規コネクション生成が想定される場合はこちらにするべきでしょう。

また通

元記事を表示

Lambda layer(python)で5分くらい遊ぶ

## まとめ

– ディレクトリ構成: `python/layer/function.py`
– インポート: `from layer import layer1`

## Layer化したいファイルの用意

“`function.py
def sum(x:int, y:int) -> int:
return x + y
“`

## Layerを利用する関数の用意

“`python:lambda_function.py
import json
from layer import function

def lambda_handler(event, context):
# TODO implement
return {
‘statusCode’: 200,
‘body’: function.sum(1,2)
}
“`

## さいごに

– `python/` ディレクトリ以下に配置して、その先をimportする
– Zip化する際に共通系がそこに入るようにコーディネートしなければならないのめんどくさい

元記事を表示

Wikipediaの記事をランダムに取得して1日1回ツイートするbotを作ってみた

ネット中心で生活していると、どうしても自分の興味があることに情報閲覧が偏ってしまって、興味のない事柄に触れる機会が減ってしまいます。なので、1日1回、強制的に知らない言葉を自分にインプットするためにWikipediaの記事をランダムに1件取得してツイートするTwitterのbotを作りました。

#開発したTwitter bot
個人的には、朝一で脳みそのちょっとした刺激になることがあります。

[うぃきのひとひら](https://twitter.com/Wiki_Hitohira)

#環境
– AWS Lambda
– python3.7

#ポイント
– Wikipediaの記事をランダムに1件取得するのに、MediaWiki APIを利用しました。
– 1日1回の起動は、AWS Lambdaの関数をAmazon CloudWatch Eventsのcron式で定期的に実行することで実現しました。(AWS Lambdaでの関数の作り方はたくさんの解説があるのでここでの説明は割愛します。)
– Twitterのbotを開発するためには、アカウント取得に加えて[Twitter A

元記事を表示

【個人制作】ヘッドレスCMSでサーバーレスなメディアを作った話

ヘッドレスCMSであるContentfulとServerless Frameworkを使ってサーバレスアーキテクチャなメディアを作成しました。

本記事では、その中で使用した技術やパフォーマンス改善方法、SEOなどを振り返りつつ紹介していきたいと思います。

作成したサイトは以下になります。アニメやゲームの有名なセリフをまとめたメディアです。
https://serif-db.com/

大まかな機能としては以下の4つ程度のシンプルなメディアとなっています。

* コンテンツの一覧表示&絞り込み
* コンテンツの詳細表示
* いいね機能
* コメント機能

現状のサイトそのものは大した事ないのですが、裏側は面白い部分もあると思うので読んで頂けると幸いです

## 制作経緯とテーマ

制作理由としては、Nuxtやサーバーレスアーキテクチャ、ヘッドレスCMSあたりを触っておきたかったというのが大きいです。
また、過去にSNSの様なWebサービスを作った際に、集客が難しく、検索流入を促すためにメディアがあった方がいいなと思っていた事なども理由の1つです。
「セリフを

元記事を表示

Jリーグの勝ち点推移がグラフで見れるよ!

# 概要
## 記事概要
今回作ったサービスの紹介をしつつ開発の流れやつまずきポイントを紹介します。

## アプリ概要
– Jリーグのチームの勝ち点推移がグラフで見れる
– [こちら](https://yuta97.github.io/j-result-front-nuxt/)からサービスに飛べます。
– Jリーグのデータサイトからスクレイピングしてデータをためて、APIとして配信してフロントから表示させています。
![スクリーンショット 2021-01-08 19.01.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/432257/988e1750-77c3-6847-493a-762da7963115.png)

# アプリ作成理由
– 川崎フロンターレの圧倒的な結果を視覚的にみたくなったから。

# 全体の構成
[フロント](https://github.com/yuta97/j-result-front-nuxt)のソースコードはGitHubにあげています。
## 構成図
![J勝ち点推

元記事を表示

LambdaでDetectron2(物体検出)して、実行速度はかってみた。

## 概要

– モデル:resnet50 + frcnn
– lambdaのメモリサイズ:8192MB

結論先に書くと、
コールドスタートありで9秒ほど。
コールドスタートなしでなんと3秒!

簡単にapi作るにはいいかもですね。

(メモ書きです。)

## ファイル郡

“`Dockerfile
FROM nvidia/cuda:10.1-cudnn7-devel

ENV DEBIAN_FRONTEND noninteractive
RUN apt-get update && apt-get install -y \
python3-opencv ca-certificates python3-dev git wget sudo \
cmake ninja-build && \
rm -rf /var/lib/apt/lists/*
RUN ln -sv /usr/bin/python3 /usr/bin/python

WORKDIR /home

ENV PATH=”/home/.local/bin:${PATH}”
RUN wget https://boot

元記事を表示

【AWS Lambda】Pythonで超シンプルに任意のコンテナ Imageを使用する

## 概要
AWS LambdaでContainer Image Supportが発表されました。
[AWS Lambda の新機能 – コンテナイメージのサポート](https://aws.amazon.com/jp/blogs/news/new-for-aws-lambda-container-image-support/)

しかし、AWS公式ドキュメントに書かれているサンプルコードは、
癖があって少しわかりづらい内容です。

本記事では、出来るだけシンプルなデプロイ・実行方法について書いていきます。

## 対象読者

– Dockerやコンテナの知識がある。
– AWSのLambdaのざっくりとした知識がある。
– aws-cliをインストール・セットアップしている。

## ハンズオン
以下の流れで行います。
1. ファイルの準備
2. Image作成・ローカルでの実行
3. Imageのデプロイ
4. Lambdaの設定・実行

今回のディレクトリ構成です。
応用が効きやすいよう、できるだけシンプルにしました。

“`sh
# ディレクトリ構成
├── Dockerfi

元記事を表示

API GatewayからLambdaを呼び出すときにevent.bodyをオブジェクトで受け取る

# はじめに

AWS API GatewayからLambdaを呼び出すこと、よくあると思います。
Lambdaでは`event.body`でリクエストボディを取得できますが、
デフォルトではこの`body`は文字列なので、
`Content-Type:application/json`の場合も「JSON文字列」になります。
そのため、一度JSONをパースしてあげないといけません。

たとえばNode.jsの場合はこんな感じ。

“`js:index.js
exports.handler = async (event) => {
const body = JSON.parse(event.body);
console.log(‘api received!’, body);

const response = {
statusCode: 200,
body: JSON.stringify([body.hoge, body.fuga, body.piyo]),
};
return response;
};
“`

元記事を表示

python3.8でlambda-uploader使用した時にpython3.8が見つからないとエラーを吐かれた時の原因調査

##事の発端
AWSのLambda上にそれなりに複雑になる予定のpythonの関数を追加する事になったが、lambda上ではpipが使用できないため、外部モジュールを使用する関数を使用する場合、
**[一つ一つ使用している外部モジュールを\Python〇〇\Lib\site-packages\] から探し出し纏めてzip化するという賽の河原のようなおちねり作業が発生する。**
当然ながら人間は信用ならない生物のため、こんな作業を毎回手作業でやろうものなら**パンジャンドラムとマーマイトをガンギメした某ブリテンの暴走青列車(ブルートレイン)の如く事故が発生する** 

**事故は起こるさ? 事故は人間が起こすものなんだよ!**
(※加えてこの作業にとても時間が取られる)

そこでlambda-uploaderを使用し、外部モジュールの抽出作業を任せてしまうことで効率化と事故発生率を少しでも下げようと画策した。

##作業環境
– Windows10(64bit)
– python3.8(64bitインストーラ使用)3.8なのは2020/12月末時点でlambdaがpython3.8以降

元記事を表示

AWSのSGフルオープンルールを自動削除する【EventBridge, Lambda】

# はじめに
 AWSのSGルール自動削除は、AWSマネージドだとsshやRDPのフルオープン以外はないと思います。
 ちょうどEventBridgeやLambdaを触ってみたかったので、いろいろ調べつつ実装してみました。

# 構成

 SG作成 → EventBridgeで検出 → Lambdaで自動削除

# 要件定義

1. 削除対象はSGのインバウンドルールで、許可されている送信元IPアドレスが`0.0.0.0/0`,`::/0`となっているもの
2. 新規作成されたルールが対象
3. 送信元IPアドレスがフルオープンになっているルールと、そうでないルールが一緒に作成された場合、フルオープンのルールのみを削除する

# EventBridgeルールの作成

 EventBridgeは、ルールにより一致した受信イベントを検出し、ターゲットとして登録したAWSリソースを呼び出してイベントを渡します。
 呼び出されたAWSリソースは渡されたイベントを使用したりして、決められた処理を実行します。
 今回、EventBridgeルールは二つ作成します。
 どうにかして一つのルールで実装

元記事を表示

OTHERカテゴリの最新記事