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

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

LINEBotをみんなで作ろう〜LINEBot is 何?編〜【GWアドベントカレンダー2日目】

この記事は下記の [#GWアドベントカレンダー](https://gw-advent.9wick.com/calendars/2020/72) の 2日目の記事になります。

楽しそうなのでやってみる ( @inoue2002 ) | GWアドベントカレンダー

# はじめに
こちらの内容は超初心者向けです。
[公式ドキュメント](https://developers.line.biz/ja/docs/messaging-api/overview/#messaging-api%E3%81%AE%E4%BB%95%E7%B5%84%E3%81%BF)を読める方はこちらをお読みいただく方が正確です。

[昨日の記事](https://qiita.com/drafts/a87df2b520f8b6e37f42/edit)をご覧になってない方はぜひ。
こちらの記事はGWアドベントカレンダーを通してLINEBotをサーバレスで作れるようになろう!ということを目標に書いている記事です。

LINEBotって何なん?って思われる方にまずお読みいただきたいです。
できるだけ専門用語を使わず、噛み砕

元記事を表示

AWS Lambdaのメモリを増やすと処理が遅くなる事がある

# 背景

Lambdaで作成した関数のメモリー割当量を検証をしていた際にメモリー割当量を増やしたのにも関わらずレスポンスが遅くなることがありました。
そこで実際にCPU性能を調べてメモリ割り当て量によるレスポンスタイムの違いを調べてみたいと思います。

# 検証

## 検証方法
極力ネットワークの影響やファイルIOなど外部の影響を受けないようにするために今回は `console.log` を大量に行いCPUに負荷をかける。
Lambdaの画面よりテストボタンで下記のスクリプトを6回実行を行い、選択できる全メモリ量を記録して所要時間の中央値を比較するものとする。
ランタイムは `Nodejs 12.x` を使用する。

“`js
exports.handler = async (event) => {
for (var i=0; i<100000; i++) { console.log(i); } }; ``` ## 検証結果 各実行時間の中央値をグラフにしました。 グラフから分かる通り、特定容量の割当ての際にレスポンスが遅くなっていることが

元記事を表示

WINDOWS OSでAWS LAMBDAにGOをデプロイ

#目的
現在、WINDWOS10 OSでGOを用いてWEBサービスを開発しており、
AWS LAMBDAを活用する場面がありましたが、
実際にデプロイを行う際に、無駄にはまったところがあったので、
この度は、実際にデプロイしてみてはまったことや感想を共有したいと思います。

#AWS LAMBDAにGOをデプロイする方法
基本的でデプロイする方法はAWSの公式ドキュメントに記載されてあります。
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/golang-package.html
特に`デプロイパッケージ`、`Handler`がデプロイとは密接に関係があるので、
この辺はしっかりと読みましょう。

僕は、しっかり読まずいくつが見逃してしまい、苦労しましたね、、、:joy_cat:

#僕がはまったところ
##①ソースコードをLINUX用しなかったこと
###問題

僕は以前、LAMBDAにPYTHON3をデプロイした経験があります。その際は、OSを気にせずデプロイしてもうまく動いてくれたので、
この度、GOをデプロイ

元記事を表示

AWS LambdaのJavaは遅い?

AWS Lambdaで動作するJavaは初回が遅いですが、速くする方法がないか調べました。
末尾にある参考サイトの内容にたどり着いて、実際に試してみたのでその記録です。

レイテンシ情報はX-Rayにて取得しました。

# テスト対象

S3にファイルをPUTするだけのものです

“`java
S3Client s3 = S3Client.builder().region(Region.AP_NORTHEAST_1).build();
PutObjectResponse result = s3.putObject(
PutObjectRequest.builder().bucket(ENV_BUCKET).key(“filename.txt”).build(),
RequestBody.fromString(“contents”));
“`

# 検証1 普通に実行

まずは普通に試してみます。

ソース全体

“`java
package helloworld;

import c

元記事を表示

NHK番組表API叩いてSlackで通知する

## はじめに
なんか面白そうなAPIとか探していたら、NHK番組表APIなるものを発見しました。

NHKっていったら、紅白、高校野球、朝ドラ、大河、天才テレビくんとか忍たま乱太郎とか、昔からそんなイメージ。
最近だと、キングダムとか進撃の巨人なんかも放送してたり、昔のイメージを覆しはじめてますねー。
ちなみに最近見つけた僕のイチオシは「[香川照之の昆虫すごいぜ!](https://www.nhk.or.jp/school/sugoize/)」です。

ちなみに、NHKって不定期放送多くないですかね?
LIFE!とか、見逃しちゃうんですよね〜。
ウッチャンのコント番組見ると、笑う犬思い出しちゃいますよね〜。ミル姉さんとか。

ということで、今回はLambda使ってサーバーレスな感じで、見たい番組・好きなタレントが出ている番組をSlackに通知する、お手軽アプリケーション作ろうかと思います。

言語はGo(勉強中)です。

## 環境など
– AWS Lambda
– Amazon CloudWatch Events(cron式)
– 言語:Go
– NHK番組表API(Program

元記事を表示

コロナ休みで増えた家事を分担!LINEBotでスッキリ解決する

この記事は下記の [#GWアドベントカレンダー](https://gw-advent.9wick.com/calendars/2020/87) の 2日目の記事になります。

すごくなりたいがくせいぐるーぷ( @inoue2002 ) | GWアドベントカレンダー

# はじめに
記事をご覧のみなさんStayHomeお疲れ様です。
一刻も早い収束を願い、みなさんで協力していきましょう!

さて、学校が休校になり、毎日お昼ご飯を作ったり、その他家事をしたりとそろそろ疲れてきたところではないでしょうか?
そんな皆さんのために、(僕はお母さんの為に)家族で各仕事の役割と分担をして発表してくれるLINEBotを作成したのでご紹介します。

#完成品

元記事を表示

LINEBotをみんなで作ろう〜環境構築編〜【GWアドベントカレンダー1日目】

この記事は下記の [#GWアドベントカレンダー](https://gw-advent.9wick.com/calendars/2020/72)の 1日目の記事になります。

すごくなりたい @inoue2002 ) | GWアドベントカレンダー

# はじめに
#####全く触った事がない人でも読み進められる記事を目指して、「実際に動くもの」を作ることを重視して解説をしていきます。
最初は環境構築から始め、最終的にはサーバレスで動くLINEBotを作成し、色々な物を作ってもらえたら嬉しいです。
僕の持っている知識を全部書いていこうと思いますのでよろしくお願いします!
もし誤表記やっ訂正すべき点がある場合、コメントいただけると幸いです。
あと、基本的にはMac環境で説明していきますのでよろしくお願いします。
では1週間よろしくお願いします!

#今日やる事
・[LINE Developerのサイト](https://developers.line.biz/console/)にログインできるようにする。
・[ngrok](https://ngrok.com/)をインストールする
・[no

元記事を表示

「AWSサーバーレスのウェブアプリケーションを構築する」の体験

いつも忘れないように、コンセプトから。

###コンセプト
・お金かけてまでやりたくないのでほぼ無料でAWSを勉強する
 →ちょっとしたサービスを起動すると結構高額になりやすい。
・高いレベルのセキュリティ確保を目指す
 →アカウントを不正に使われるととんでもない額を請求されるので防ぐ

無料ではないんですが(無料枠がある人はつかますが)、お安い金額でお勉強です。
GWもはじまり、Stay Homeで暇なんで「サーバーレスのウェブアプリケーションを構築する」を体験してみました。
https://aws.amazon.com/jp/getting-started/projects/build-serverless-web-app-lambda-apigateway-s3-dynamodb-cognito/module-5/

学習できるサービスは、

– AWS Lambda
– Amazon APIGateway
– Amazon S3
– Amazon DynamoDB
– Amazon Cognito

です。

###まずは感想から
チュートリアル自体は2時間あれば多少調べながら

元記事を表示

Lambdaのコールドスタートを改めて整理する

## 概要

Lambdaを使うとき、「コールドスタート」の課題があることをよく耳にします。これについて、過去の経緯、直近のアップデート状況なども踏まえつつまとめてみた記事です。
AWS初心者の目線なので不足点などあるかもですが、その場合にはご指摘いただければありがたいです。

## 前提となる知識

### 1. Lambdaは実行時にコンテナを生成している

以下のスライドはAWS公式からの引用ですが、Lambda関数実行時の流れを表したものです。これに記載の通り、Lambdaの裏側では、実行時にコンテナが生成されています。なお、以降は実行時に生成されるものを__関数インスタンス__と呼びます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/451175/fb36e4fc-d3df-553e-dc25-72b2aa5bc298.png)
(出典)[全部教えます!サーバレスアプリのアンチパターンとチューニング](https://speakerdeck.com/keisuke69

元記事を表示

【SlackBot】明日は休みだよBotを作ってみた

## きっかけ

– 昨今の事情もあり在宅勤務を行っている方は多いと思います
– そんな中でチームのSlackでこんなやりとりがありました

スクリーンショット 2020-04-29 0.18.53.png

– 在宅でリモートだと曜日感覚なくなってきますよね
– 明日が休みだと思うことで生まれる**生産性爆上げ日**を逃してしまうのはもったいない!ということでStayHomeの暇つぶしも兼ねて次の日が休みの時にSlackに通知してくれるBotを作ってみました

## 使用した主な技術

– AWS Lambda(Node)
– [Holidays JP API](https://holidays-jp.github.io/)
– [Slack Web API](https://slack.dev/node-sla

元記事を表示

Cloud 9 + lambdaでbot作成 ーpart1

# はじめに
lambdaを定期実行してTwitter APIを叩き、
AM10時(JST)につぶやくbotを作成した。

一連の工程で以下の使い方について理解を深めた。
・Twitter APIの開始方法/使い方
・BitFlyer APIの使い方
・Cloud9 でLambdaをローカル検証し、リモートLambdaへのデプロイ
・Lambdaの定期実行
・LambdaからS3オブジェクトの読み取り/書き込み

# botの構想
・実行時間:日次AM10時
・内容  :仮想通貨の価格変動に合わせてその日のメニューを提案

“`
・ビットコイン前日上昇率:10%以上
 「今日は焼肉にしよう」
・ビットコイン前日上昇率:2~10%
 「今日は外食にしよう」
・ビットコイン前日上昇率:±2%
 「今日は自炊にしよう」
・ビットコイン前日上昇率:-2~10%
 「今日は冷凍チャーハンにしよう」
・ビットコイン前日上昇率:-10%
 「今日はモヤシ炒めにしよう」
“`

# twitter APIの利用申請
[こちら](#https://qiita.com/kngsym2018/items

元記事を表示

Puppeteer on Lambda (Node.js 12.x) で日本語ページのキャプチャを取る方法 簡単

## やりたいこと
Lambda上でPuppeteerを動かしてキャプチャを取るとき、日本語フォントを正しく表示させる。
(デフォルトではLambdaに日本語フォントが入っていないため、何もしないと日本語がすべて豆腐になってしまうのだ。)

## 環境
* AWS Lambda
* Node.js 12.x
* ローカル
* Windows10
* Node.js v12.16.2
* npm 6.14.4

## やり方(ざっくり)
* Lambda Layerに日本語フォントをzip化してアップロードする。
* Lambda関数にそのLayerを追加する。
* Lambda関数内でLayerのフォントファイルを参照できるようにindex.jsで`process.env[‘HOME’] = “/opt”;`を定義する。

## やり方(詳細)

“`shell:ローカルのディレクトリ構成
puppeteer_sample
├─ modules # Layerに登録するnpmモジュール群
│ ├─ node_modules
│ └─ packa

元記事を表示

【AWS】API Gateway + LambdaでAPIをつくる

## やりたいこと
サーバを使わずにAPIを作成したい。
EC2インスタンスからAPI Gatewayで作成したREST APIにリクエストを投げて返ってくるのを確認します。
Qiita logo

## 手順
Amazon API GatewayとLambdaを使用して、REST APIを作成してみます。

[1. Lambda関数を作成する](#1-lambda%E9%96%A2%E6%95%B0%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B)
[2. API GatewayでREST APIを作成する](#2-api-gateway%E3%81%A7rest-api%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B)
[

元記事を表示

メールでGitHubに新規issueを追加する (Amazon SES活用版)

# はじめに
以前、IFTTTのEmailサービス[^iftttemail]をメールの受け口にしてAWS Lambda経由でGitHub API[^githubapi]を叩き、[メールでGitHubに新規issueを追加する](https://qiita.com/nikotan/items/ff516aa90eb87c5140e7)機能を作りました。自作サービスのバグや改善点に気づいたときに、メール一本でGitHubのissueを立てられる、というのは実はとても便利です。今後も継続的に使いそうなので、メールの受け口も含めてAWS上で動くよう作り直してみました。

# 方針
メールの受け口として、Amazon SES (Simple Email Service)[^ses]を使います。自分で管理しているドメインのメール配送先をSESの受信用エンドポイントに向けることで、メールを、Amazon SES → Amazon S3 → AWS Lambdaとバケツリレー。メールの中身に応じてGitHub API[^githubapi]を叩きGitHubレポジトリにissueを追加するLambda

元記事を表示

猫の画像が次々届くサーバーレスなシステム

# はじめに

コロナ禍ですっかり疲れ切っている方も多いと思いますが、そんな時こそ一服の清涼剤が必要…ということで、**Slackのチャンネルに猫の画像が定期的に届くサーバーレスなシステム**を作ってみました。

なお、今回は[The Cat API](https://thecatapi.com/)から猫の画像を拝借しています。

# 1. Cat APIのAPIキーの取得

* [The Cat API](https://thecatapi.com/)のページを開いて、`SIGNUP FOR FREE`と書かれたボタンを押します。

![cat_api_001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/312166/ada25a20-6ef3-63bc-0a93-5cfb0150f874.png)

* 遷移先のページで、メールアドレスを記入して`SIGNUP`を押してしばらく待つと、`Welcome to The Cat API!Welcome to The Cat API!`というタイトル

元記事を表示

Rustに入門する〜2日目 reqwestでGET通信をする〜

# 初めに

1日目の続きです。

# 釈明

(釈明の日本語の使い方あってるのか)

本当はGoogleカレンダーからの情報取得までを予定していましたが、
方針があちこち飛びHTTP(S)リクエスト自体に以上に労力を使ったので表題の部分までになりました。

こうなった背景としては以下の通りです。

– `google-calendar3のサンプルの依存パッケージのバージョンが割と古くてコピペ+αでどうにもならなかった
– 正直パッケージを古いのにしてやればこんなことにはならなかったから自分が悪い
– 一応頑張るだけがんばったけどこのままの方針でどうにかできる自信がなかった
– 利用するパッケージが`await/async`まみれだが別言語でも書く機会がなくふんわり概念止まりだったのでそこから学習が必要だった
– あんま関係ないけどRustの非同期処理自体がようやくちょっと前に安定したらしく情報の交錯がすごかった
– `openssl-sys`を`AWS Lambda`向けにコンパイルできなかった
– これについては回避できず今後解決していく必要があるの

元記事を表示

複数のバックエンドのリソースをAmazon API Gatewayで統合する

# 前提
システム開発をしていると「A機能はLambdaで作るべきで、B機能はコンテナで作るべきで、でもそれぞれ実はURIは同じにしておく方がREST的にキレイになるんだよね」なことがある。…いや、あまりないか?ともあれ、そんな時にはnginxとかでプロキシを作って振り分けても良いのだけど、せっかくパブリッククラウドを使っているのだからマネージドサービス使ってみたいよね、と思ってやってみた。

Spring BootなWebアプリの動いているコンテナと、Lambda関数がそれぞれあるような構成。

# Lambda関数
この記事のために作り直すのも面倒なので、以下の記事で作ったものを転用する。

[Amazon API Gateway/ALBのバックエンドで動くLambda関数をJava(Eclipse+maven)で実装する](https://qiita.com/neruneruo/items/8673af2a3ae0f8076627)

# Spring BootなWebアプリの動いているコンテナ
あまりこだわりもないので、適当なパラメータを受けてJSONを返すコンテナを作ってみる

元記事を表示

Rustに入門する〜1日目 SAMを使ってAWS Lambda上で動作させる〜

# 初めに

今年の正月くらいにRustの公式の入門みたいなページを読んだはいいけど何も作らず今日まで来てしまったので、
いい加減何か作ろうと思ったらちょうどいい題材があったのでそれで入門しようという感じ。
家のサーバで動かしてもいいですが `AWS Lambda` がコスト的にも管理的にも楽なのでこれでやります。
アプリはあんま作らないので割と初心気味

最終的に作るものですが、
このコロナのご時世で会社全体でリモートとなり、今まで雑にやってきたけどSlackのステータスはしっかり変更しようね!
…とはなったけどめんどくさいとか忘れてたとなるのでその辺りをいい感じにしてくれるものを作ろうと思います。

# 方針

ステータスの方針についてはまだ決まってないのもあるのでとりあえずですが、
1日一回業務開始時間に実行させ、
今日が土日か自分の終日予定に休み系のワードがあればステータスを休暇に変え、なければステータスなしに変更するものを作ります。
もしくは業務終了時間に固定で業務終了に切り替えるもの。

まず ` AWS Lambda` でRustで動かします。

# 公式のサンプル

元記事を表示

【AWS10分間チュートリアル】Hello, World!をサーバーレスで実行する(Lambda)

# 概要
社内でAWSを使ったシステム設計を任される予定があり、AWSのサービスを勉強中です。
チュートリアルと画面が異なるため、記事にしています。

以下もご覧いただけると幸いです。
[【AWS10分間チュートリアル】Docker コンテナのデプロイ](https://qiita.com/tyariponzu614/items/573231bf72115034eca2)
[【AWS10分間チュートリアル】ReactJSアプリをデプロイしてホストしてみた(CI/CD)](https://qiita.com/tyariponzu614/items/0b3b9c4c47bf4542d308)
[【AWS10分間チュートリアル】Lightsail でWordPressインスタンスにアクセスする](https://qiita.com/tyariponzu614/items/c1fb2cee1ace2d5f25b2)

# 教材
10分間チュートリアル
https://aws.amazon.com/jp/getting-started/tutorials/

「Hello, World!」をサー

元記事を表示

SSMパラメータストアから10件以上のデータを取得する

SSMパラメータストアから複数のパラメータを一括で取得したい!というときには`get_parameters`や`get_parameters_by_path`を使うといい感じに取れる。

ただ、これ知らなかったが一度に10件までしか取得できないようで、それ以降取得するには返却されるトークンを使ってリトライしないといけないらしい。

SSMパラメータストアの`/HOGE/`以下のパスに11件のパラメータを作っておきlambda(python3.8)で実験。

“`python:lambda
import json
import boto3

ssm = boto3.client(“ssm”)

def lambda_handler(event, context):
params = dict()
responseSSM = ssm.get_parameters_by_path(
Path = “/HOGE”,
WithDecryption = False
)
for param in responseSSM[“Parame

元記事を表示

OTHERカテゴリの最新記事