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

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

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ルールは二つ作成します。
 どうにかして一つのルールで実装

元記事を表示

docker-compose環境でRuby on Jetsの構築からデプロイまで<後編>

## 概要

以前の記事でRuby on Jetsのローカル環境を作成するところまで書きました。

[docker-compose環境でRuby on Jetsの構築からデプロイまで<前編>](https://qiita.com/takashi-5/items/74b8ac4a342ae7372205)

今回は実際にデプロイするところまでまとめてみたいと思います。

## ユーザを準備

コンソールからIAMユーザを作成し、credentialを取得してください。

[https://console.aws.amazon.com/iam/home#/users](https://console.aws.amazon.com/iam/home#/users)

今回デプロイするためだけのユーザということで「プログラムによるアクセス」にチェックを入れます。

![Untitled.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/923148/7649b37b-4e94-b873-4b58-657238748

元記事を表示

Slack – APIGateway – Lambda(Python) – RedShift インタラクティブアプリの作り方

## 概要

表題のとおりのSlackアプリケーションを作成する。
まともに書くと長文になるので、以下の要点ポイントのみを重点的に記載する。

– Slackアプリケーションの留意点
– Slack側のアプリケーション設定(権限周り)
– SlackのHomeView(Homeタブ)やattachmentに関して
– Lambda(python)周りの実装とライブラリ利用
– APIGateWay設定

なお、シンプルに試すだけならWebHookURLを設定してLambdaとかをスケジュール実行してPOSTすれば終わるが、SlackClientライブラリを利用したインタラクティブなリクエストに対するメッセージ通知ができるようなシーンを想定している。

手順通りにやれば動くものが作れるというよりは、
調べるのが面倒だったり、案外ハマったポイントを断片的に紹介する点はご承知おきください。

## Slackアプリケーションを作成するにあたっての留意点

#### レスポンスは3秒以内に一旦返す
ボタンをクリックし、レスポンスを返す場合などは3秒を超えるとエラーになる。

これは、処理でひと

元記事を表示

Serverless FrameworkとAWS Lambda with Pythonの環境にpipインストール

pipインストールが必要なAWS LambdaのPythonスクリプトをServerless Frameworkでデプロイする方法です。

gemインストールが必要なAWS LambdaのRubyスクリプトについては[前回](https://qiita.com/suzuki-navi/items/1369b11a8f5d7f467645)の記事で書きました。

# 手順概要

プラグインを入れれば簡単にできます。

1. `serverless plugin install -n serverless-python-requirements`
2. `requirements.txt` 作成
3. あとは普通にデプロイすると勝手にいろいろやってくれる

# 手順詳細

## Serverless Frameworkのサービス作成

“`console
$ serverless create –template aws-python3
Serverless: Generating boilerplate…
_______

元記事を表示

UIFlowでM5Stackはじめーる

# はじめに
積まれていたM5Stackをすぐに始めるための備忘録です。

# 開発環境
– M5Stack
– Windows 10 PC

# 導入
1.[UIFlow Quick Start](https://docs.m5stack.com/#/en/quick_start/m5core/m5stack_core_get_started_MicroPython)を参考にします

2.ドライバーをインストールします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63863/620173ce-bef9-c2d1-a971-ce5874fc5494.png)

3.M5Burnerを起動します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63863/2ec80c98-8223-e011-b892-e8a714e5ad71.png)

4.UIFLOW(CORE)のファームウェアをBur

元記事を表示

Kinesis Data StreamsをLambda関数で処理する場合のCloudWatchメトリクスの読み方[Lambda編]

Kinesis Data StreamsのレコードをLambda関数で処理するアプリケーションについて、CloudWatchメトリクスを分析することで以下の様な用途に役立てることができます。

* アプリケーションの動作におけるエラーの兆候を見つける
* 入力されるデータ量が増えるに従ってKinesis Data Streamのシャードを拡張するといった例にみられるように、リソースの拡張が必要な兆候を見つける
* AWSサービス利用料が適正であるかを分析し、コスト削減につなげる

上記の様な目的でCloudWatchメトリクスを分析した経験から、Kinesis Data StreamsとLambda関数のCloudWatchメトリクスをどのように分析するのかをまとめてみたいと思います。

# Lambda関数のCloudWatchメトリクス
ここでは、Kinesis Data Streamsのレコードを処理するLambda関数に関連するCloudWatchメトリクスの中でコスト、エラー検知、拡張性の観点で注目すべきメトリクスを取り上げたいと思います。

### Invocations

元記事を表示

【無料で】クラロワAPIをlambdaから叩いてLINEに送る

以前、[クラロワAPIをlambdaから叩いてLINEに送る](https://qiita.com/meihei/items/98a21ac0b41fe7193e40) という記事を書きました

システム自体はこちらで完成なのですが、結構お金がかかるという問題がありました

この問題の原因はクラロワAPI([Clash Royale API](https://developer.clashroyale.com/#))がアクセス可能なIPを制限しているため生じていました
今回、RoyaleAPIが提供している公開Proxyを使うことで、**無料でクラロワAPIをlambdaから叩いてLINEに送る**ことが出来たので記事にしていきます

## 概要
### 完成したもの

以前の記事と全く同じで、`プレイヤー名`と`放置している期間`がLINEに届きます

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280373/4b15322a-6fb8-75ae-bced-bf6e5a91c59c.png)

###

元記事を表示

AWS Lambda(python)で Selenium を動かしてハマった点まとめ

# はじめに

Python を用いてスクレイピングをするにあたり、認証周りで躓き手っ取り早く解決するために Selenium を用いて実装したものの、Lambda で実行しようとしたときに躓いたので、メモとして残します(書きっぷりが雑になっているかもしれません…)
※ この記事は SAM を使わずに実装してます:bow:

# 作業環境

* Windows 10
* python 3.7 が望ましいけど、3.8 でも大抵はどうにでもなった
* (使い方にもよるので、バージョン管理で切り替えられるようになっているとよい)

# ハマりポイントその1

Q. Selenium を使うにあたって、headless-chromium と chromedriver を使えばいいの?
A. この2つを圧縮して、レイヤーに登録する

## 詳細

AWS Lambda で使用できるヘッドレスブラウザとして以下が提供されています
この、chrome と chromedriver のバージョンを合わせて1つのファイルとして圧縮します
https://github.com/adieuadie

元記事を表示

API GatewayとLambda(Python)でLINE BOT(Messaging API)開発 [後編]

# API GatewayとLambda(Python)でLINE BOT(Messaging API)開発 [後編]

## はじめに
[前編](https://qiita.com/w2or3w/items/1b80bfbae59fe19e2015)では主に環境構築と、「こんにちは!」と返すだけの簡単なサンプルを載せました。
後編となる本記事では、line-bot-sdkを利用して以下のことを実装してみたいと思います。
・文字列の応答
・ユーザー情報の取得
・選択肢の提示、選ばれたものの取得
・位置情報の受信、位置情報の送信

## line-bot-sdkのインストール
Lambdaでデプロイする前提ですので、lambda_function.pyと同じ場所にインストールする必要があります。
インストールしたライブラリ類をまとめてzip圧縮できるよう、適当なフォルダ(ここではsource)の中で行いましょう。

“`
|- source
|- lambda_function.py
“`

ライブラリはpipでインストールします。

“`bash
$ cd source
$

元記事を表示

API GatewayとLambda(Python)でLINE BOT(Messaging API)開発 [前編]

# API GatewayとLambda(Python)でLINE BOT(Messaging API)開発 [前編]

## はじめに
先日、以前より興味のあったLINE BOT(Messaging API)を初めて作ってみました。
思っていたより簡単だったので、今後も気軽に作ってけたらなと思ってます。
せっかく作れるようになったので、このフレッシュな気持ちがなくなる前に記事を書いておきます。

前編と後編と、2つに分けて書こうと思います。
前編では主に環境構築。何か話しかけると「こんにちは!」とだけ返すBOTを作成します。
[後編](https://qiita.com/w2or3w/items/fbe588d7147bb8e65628)ではline-bot-sdkというライブラリを利用して、メッセージ以外のやり取りをする実装についても書こうと思ってます。

## LINE Developpersでプロバイダーとチャンネルの作成
まずはLINE Developpersで作業します。
[LINE Developpers](https://developers.line.biz/ja/)

元記事を表示

AWS AmplifyでLambdaを使うwith Go

Amplifyはちょくちょく使う機会があるのですが、Amplifyを介したLambdaってほぼ使った事ないぞ、と思ったので使ってみようと思い立ちました。
そしてLambdaでGoが使えるけど、ちゃんと使った事なかった気がするので使ってみたいなとついでに。

# Functionが使えるらしい
FUNCTIONS – Overview
https://docs.amplify.aws/cli/function

## 環境

– win10 Home(surface go) + WSL2 + ubuntu18.04
– node v14.1.0
– npm 6.14.5
– go version go1.10.4 linux/amd64

# 使ってみる

## 前置き

vueを使う設定にてamplifyをsetupしておきます。
詳しくはこのあたりから。
https://docs.amplify.aws/start/getting-started/installation/q/integration/vue

“` bash
$ vue create myamplifyprojec

元記事を表示

Serverless FrameworkとAWS Lambda with Rubyの環境にgemインストール

gemインストールが必要なAWS LambdaのRubyスクリプトをServerless Frameworkでデプロイする方法です。

# 手順概要

プラグインを入れれば簡単にできます。

1. `serverless plugin install -n serverless-ruby-layer`
2. `Gemfile` 作成
3. あとは普通にデプロイすると勝手にいろいろやってくれる

# 手順詳細

## Serverless Frameworkのサービス作成

“`console
$ serverless create –template aws-ruby
Serverless: Generating boilerplate…
_______ __
| _ .—–.—-.–.–.—–.—-| .—–.—–.—–.
| |___| -__| _| | | -__| _| | -__|__ –|__ –|
|____ |___

元記事を表示

OTHERカテゴリの最新記事