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

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

AWS Lambdaの利点、欠点

#Lambdaとは
ユーザーはコードだけ書いてくれれば、サーバー管理はAWS側でしますよってサービス。データの変更に応じてコードを実行したり、HTTPリクエストに応答してコードを実行したりしてくれる。

#Lambdaの利点
####サーバー管理が不要
Lambdaとはでも書いた通り、サーバー管理をAWS側でしてくれる。

####継続的スケーリング
自動的にアプリケーションをスケーリングしてくれる。
重たい処理には多くのリソースを割り当てて、軽い処理には少しだけリソースを与える。

####ミリ秒単位の課金
コードが実行される100 ms(= 0.1秒)ごとに課金される。
コードが実行されてない時は課金されないから料金は安く済む。

####安定したパフォーマンス
それぞれの処理に適切なメモリサイズを割り当てるからコード実行時間を最適化できる。
2桁のミリ秒以内に応答するようにハイパー対応することも可能。

#Lambdaの欠点
####サーバー管理ができない
メリットでもあったけど、自分で管理したい時はそのままデメリットになる。

#最後に
AWSについて学習中のメモ代わりに残して

元記事を表示

Cloud9にLambdaで動くFlaskアプリを構築する

# はじめに
運用レスのインフラ基盤でアプリ動かしたいと考え、
Flask(pythonのフレームワーク)を使った簡単なアプリをLambdaで動かしてみた。
※ すでにpython3.6がインストールされている前提(Cloud9は初期から入っている)
※ すでにNode.jsがインストールされており、npmコマンドが打てる前提(Cloud9は初期から入っている)

# 所要時間
本手順は30分ほどで完了する想定です。(60分あれば十分なハズ)

# モジュールのインストール
ここではCloud9でserverless frameworkを用いてLambdaにFlaskをデプロイする方法を載せます。

– npmがインストールされていることを確認

“`
$ npm –version
“`

– npmのバージョンアップ

“`
$ npm update -g
“`

– serverless frameworkのインストール

“`
$ npm install -g serverless
“`

– labmdaでflaskを使用するためのモジュールをインストール

元記事を表示

Vue.js、AWS Amplifyおよびboto3でサンプルアプリを作ってみる(第三回:axiosでAPIコール編)

第二回で、Amplify CLIを使ってバックエンドリソースを作成し、CICDを回してVueアプリを外部公開するところまで辿り着いた。
今回は、さらにAPIとLambda関数を用意し、Vue.jsからaxiosで呼び出すところまでをトライ。これができれば、「Vue.jsでフロントエンドを作ってAWSサービスを叩いてみる」という当初の目的を達成できたことになる。

前回の内容はこちら。
[Vue.js、AWS Amplifyおよびboto3でサンプルアプリを作ってみる(第二回:Amplifyとバックエンドリソース編)](https://qiita.com/itsuki3/items/21925a1afb256dd8b935)

## (今回)やりたいこと
– axiosをセットアップする
– APIとLambda関数を作る
– Vue.jsからaxios経由でAPIを呼び出す

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/609876/3317fc2b-185b-ab87-1a5f-31

元記事を表示

【AWS】LambdaとSNSでスマホにSMSを送る

## 概要

– 電話番号でメッセージを送るSMSを使いたいなと思って調べてみたらAmazonSNSで実現できると分かったので試してみました
– API Gateway – Lambda – SNS を連携させてAPI化させてみました
– 当然ですが指定した電話番号に本当にSMSを送れてしまうので、**悪用しない/されないようにご注意ください**
– ちなみに日本の場合は一通辺り$0.07451のようです
– https://aws.amazon.com/jp/sns/sms-pricing/

## 構成

– 今回作る構成です

スクリーンショット 2020-06-03 0.02.25.png

## 雛形生成

– 今回はServerlessFrameworkを使います
– Lambdaのコードだけ見

元記事を表示

AWSのロードバランサーにLambdaを使ってWEBサーバーを自動追加

#目的:アクセス集中時のみWEBサーバーを追加・負荷分散しコストダウン
 AWSのロードバランサー(ELB)を使っているサイトも多いかと思われます。ELBにはオートスケール機能があり、負荷率の上昇などをトリガーとしてスケールアウト(WEBサーバーの追加)を設定することができます。

 しかし、Auto Scalingを利用して負荷が上がってからWEBサーバーを立ち上げて追加したのでは時間がかかり、手遅れになる可能性が高いです。障害が出る前にサーバーを増設したいと思うでしょう。

 私の会社が開発しているソーシャルゲームでも、イベント開催時や広告プロモーション時には、普段の十数倍のアクセスになります。こういう負荷上昇が見込まれる場合は、あらかじめEC2インスタンスを立ち上げてELBに追加しておくことが有効でしょう。

 Lambdaのスケジュール機能を使い、アクセスの見込まれる必要な時刻にEC2インスタンス(WEBサーバー)をELBに自動的に追加し、ある程度の時間が過ぎたらELBから切り離す。これだけでは負荷分散はできてもコスト削減はできません。コスト削減のためには、EC2インスタンスを

元記事を表示

AWS Lambda関数の通信先を制御してみる。

(記事を書いた2019/12/21に公開するのを忘れ半年遅れで公開となりました)

### はじめに
皆さんは AWS Lambda でどのような処理を実装されていますか? AWS サービスの API (例えば、 Systems Manager の Parameter Store の API や Amazon EC2 の API )、外部のサービスにアクセスさせたりしていますか?
企業向けシステムを構築する際には、「通信先」について情報漏洩リスクにもつながるため、関心事として高いです。
当記事では、AWS Lambda 関数を利用してアプリケーションを実装する際、どのように通信先を制御を**「強制するか」**紹介していきたいと思います。

### サマリ
– デフォルトの Lambda 関数構成(VPC内リソースにアクセスしない)の場合、Lambda 関数に Security Group も NACL も設定できず、Lambda 関数からの通信を Lambda 関数の外で制御することができない。
– VPC 内リソースにアクセス可能なLambda関数として構成することで、 VPC

元記事を表示

LambdaからEC2を起動しようとしてハマった話

AWS公式ページにこちらの手順に従って、LambdaからEC2を停止&起動させようとしたところ、停止はできるが起動はなぜかうまくいかない。。。

[Lambda を使用して、Amazon EC2 インスタンスを一定の間隔で停止および起動するにはどうすればよいですか?](https://aws.amazon.com/jp/premiumsupport/knowledge-center/start-stop-lambda-cloudwatch/)

色々試したり、サポートに問い合わせしたりした結果、原因が判明。

KMS関連の権限が不足していたためでした。
起動しようとしていたEC2にアタッチされているEBSがKMSで暗号化されていたため、kms:CreateGrant 権限が必要だったようです。。。

元記事を表示

lambdaでAPI Gateway経由のquerystringを取得する(Python)

# はじめに
AWS Lambdaを初めて触ってみました。
QueryStringを取得して、レスポンスを返すことがあっという間にできたのでメモです。

# 環境
最初は使っているWindowsにすでにインストールされているバージョンに合わせるために`Python3.6`を使用しました。
ですが、Lambdaだとローカルでテストが不要なのでバージョンを合わせる必要はありませんでした。
AWS上で現時点でサポートされる最新のバージョンを使っていいと思います。
(処理がシンプルすぎるので当たり前ですが、`Python 3.8`で作り直してもうまく動きました。)

# まとめ
`event[‘queryStringParameters’][‘name’]` でできます。

# 構築
## AWS アカウント取得
なんと、ほぼ触ったことがなかったのでアカウント作成からやりました。

## 課金時の通知
課金されたら知りたいので、予算を登録して、$1で通知が来るように設定しました。
課金されてないので、通知が来るようになっているのかどうかよくわかりません。

## Lambda の作成
サービス

元記事を表示

Lambda@Edgeで追加したいhttpヘッダをapacheの設定から持ってくる

# httpd.conf → Lambda@Edge

私のサイト [devel.keys.jp](https://devel.keys.jp) は、昼間は EC2 上の Apache httpd で動かしているんですが、夜中は S3 + CloudFront でホストするようにしています1[^free-tier]。

[^free-tier]: 無料枠が月750時間までだと24時間動かしていると他のインスタンスを立てにくいので、1〜7時までインスタンスを落として無料枠をセーブしているのです

というときに、S3 でも httpd と同じヘッダを加えたいなーと思って作りました。

EC2 の httpd の設定は次のようなものです:

“`apache:httpd.conf
Header set X-XSS-Protection “1; mode=block”
Header set X-Content-Type-Options nosniff
Header append X-Frame-Options SAMEORIGIN
Header set Str

元記事を表示

Ruby+LambdaでAWS SDKを使おうとしたら `sam local` がめちゃくちゃ遅くなったんだけど

# 起こった現象
LambdaをRuby実装で使っていました。AWS SAM CLIを利用して開発を行っていました。開発自体は何事もなくすすんでいたのですが、機能追加のためにAWS SDKを使うように変更したところ `sam local` がすごく遅くなったのでした。こんな簡単なサンプルアプリでここまで遅くなるのはおかしいでしょ…と調べてみました。

サンプルプロジェクトは[こちら](https://github.com/suruseas/lamba-gemfile-test)
※deployして試したあとはstack及びcloudwatchのロググループを忘れずに削除してください!

# さっさと結論だけ
Lambdaのランタイムには、各環境に合わせてAWS SDKがインストールされているのでLambdaのデプロイパッケージには含めなくてもよいです。

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

特にRubyであれば **Gemfileへの「gem ‘aws-sdk’, ‘~> 3’

元記事を表示

ALB + CognitoでGoogleアカウント認証をかける

この記事はクラスメソッドさんの記事『[Amazon CognitoユーザープールLambdaトリガーでALB認証のメールアドレスを制限する | Developers.IO](https://dev.classmethod.jp/articles/validate-email-on-alb-authentication/)]』の手順をちょっと(うまくいかないところを試行錯誤しつつ)詳しく書いたものです。

# 何ができるか
**認証機能など何もない**WebアプリがEC2で動いているとします。このEC2を

* ALBの下にぶら下げる
* Cognitoの仕組みを使い、**特定のGoogleアカウントでログインしているときだけ**アクセスできるようにする

という仕組みをサーバーレス(AWS ALB + Amazon Cognito + Google Cloud Platform + AWS Lambda)で構築します。

# 前置き:ALB + Cognitoの何が混乱を招くか
Amazon Cognitoは素晴らしいサービスなのですが、「ユーザープール」と「IDプール」があり、初歩的

元記事を表示

AWS Step Functionsでバッチ処理を行う手段を考える

# はじめに

**JP1を代表するジョブ管理ツールをAWSで実現するにはどうするか**、について検討したことをまとめておきます。

単一のバッチ処理では無くて、依存関係があるものを考えるのでStep Functionsを前提に考えました。

依存関係があるというのは、

– JobAが毎日午前7時に実行される
– JobBはJobAが完了したら実行される
– JobBが完了したらJobCとJobDが同時に呼ばれる

のような構造のことをイメージしています。

## Step Functionsとの組み合わせ案

Step Functionsから呼び出せるものの中でバッチに使えるものは大きく分けると以下の3つです。

1. AWS Lambda
2. AWS Batch
3. AWS Fargate

それぞれの比較は[こちらの記事](https://techblog.timers-inc.com/entry/2019/08/06/aws-batch-lambda-ecs-comparison)が大変参考になりました。

順番に特徴を見ていきます。

### Lambda

– シン

元記事を表示

Cloud 9 + lambdaでbot作成 ーpart4

#はじめに
これまでの投稿で、
・Twitter APIを使用開始し(part1)
・Cloud9でLambda Functionをデプロイし(part2)
・Lambda FunctionからS3オブジェクトへの読み書き(part3)
を実装してきました。
本投稿は下記のパート4として、計算するための関数を実装していきます。
・S3オブジェクトへの書き込み内容を30日分とし、それ以前を削除する
・仮想通貨の前日比較を計算する

過去のこちら

“`
・part1 : https://qiita.com/htanaka/items/a13fe6da23c3fcdc172a
・part2 : https://qiita.com/htanaka/items/2e6bdc3f54bdfdf542a9
・part3 : https://qiita.com/htanaka/items/2438b2cb876d4a33c436
“`

# S3オブジェクトには1か月分のデータを保持する
S3オブジェクトに毎日書き込みを行うと、
ファイルサイズが大きくなる心配があります。
過去にさかのぼるとして

元記事を表示

AWS Lambdaを使ってみる① | のび太とジャイアンのあの関係?

はじめてAWS Lambdaを使ってみたので、備忘録もかねて遊んだ内容をここに記します。

AWS Lambdaを使って、あるS3バケットにデータをアップロードすると別のS3バケットにそれをコピーして保存するということを実現したいと思います(バックアップもどきみたいな)

そこで今回はのび太とジャイアンと名付けられた2つのS3バケットを用意して、のび太バケットにデータをアップロードすると、ジャイアンバケットに同じものが保存されるということをやります。

つまり、「オマエノモノハオレノモノ」ということです。

奪っているわけではないので、言わば、まさに、その中で、健全だということを申し上げたいと思っている次第であります。

※Lambdaの実行環境はをNode.js 12.xを使います

## のび太バケットとジャイアンバケットをつくる
S3バケットをつくります
Bucket nameを入れてcreateするだけでOKです(それ以外なにも設定しなくてOK)
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com

元記事を表示

Lambdaでwebhookをとりあえず受け取れているかを確認するための関数を作ってみた

# 動機
先日M5STICKCを使ってLINE Beaconを試してみた際に、
Webhook先を今まで使ったことないGASにしてみたところ、
どこでハマってしまっているのかよくわからない状態になってしまった。

知らない機能同士をまとめてためしたのが原因なので、Webhook先は毎回固定にしておいた方がいいのかもしれない

# 作ってみたもの
ということで、作ってみたのが個人的にWebhook先として汎用的に使える環境。

環境は一番慣れ親しんだものとしてAWSのLambda(とAPI Gateway)とする。

Lambda関数の中身は以下で、POSTで受けてもGETで受けてもログに出力できるようにする。

“`python
import json

def lambda_handler(event, context):
# 引数:eventの内容を表示
print(“Received event: ” + json.dumps(event))
# rawQueryString
rawQueryString = event[‘rawQueryStr

元記事を表示

nuxt-serverlessについて調べてみた

# 背景

nuxtで作ったアプリをAWSにデプロイする方法について調べていたところ、*nuxt-serverless*というものがあることを知ったので、お勉強。

https://github.com/tonyfromundefined/nuxt-serverless

# *nuxt-serverless*

とりあえず、READMEを翻訳。

「サーバーレスフレームワークを使用したAWSサーバーレススタック(Lambda + API Gateway + S3)上のNuxt.jsサーバーレスサーバー側レンダリングスターター」

とのこと。

ざっと中のコードを見た感じ、nuxtプロジェクトのテンプレートになっていて、ここにServerless Frameworkの設定ファイル等があらかじめ配備されている形になっていました。

使い方としては、githubのコードをclone(もしくはダウンロード)してきたものをベースに、*src*の中を編集してnuxtアプリを作成し、*serverless.yml*を編集して自分用のデプロイ設定に変更後、*yarn deploy:???* コマン

元記事を表示

EC2の自動再起動設定を見据えたメトリクスの長期保管システム構築

# 1. きっかけと本記事の概要
担当している案件で障害が発生したが、営業日外では対応が難しい。
しかし放置しておくとユーザー影響など取り返しがつかない被害が・・・

そこで**ある条件をトリガーにEC2インスタンスを自動再起動するような設定をしたい**と思った。
※実際にはサーバーの再起動後にプロセスの自動起動も必要なのだがそこは置いておいて。

**サーバーの自動再起動に妥当な条件を設定するためには、実績としての過去の監視データが必要**だ。
過去のデータがない状態で再起動の条件を設定しても根拠がない。
過去データから条件を検討し、誤作動する可能性や誤作動してしまったユーザー影響との兼ね合いも考えつつ納得のいく設定をしたいところだ。
1年間はほしい。その上で検討したい。

本記事では、以下の要件を満たす監視システムを構築するにあたって収集した情報のまとめ、および実際に構築した記録である。
若干案件に依存した要件になっているが、そこは適宜置き換えることで他のAWSインスタンスの監視や自動再起動設定にも応用が効くだろう。

# 2. システム要件
**前提**

本案件において監視対象

元記事を表示

Lambdaまとめ

# 概要
触る機会があったので、知ったことをまとめていく。

# Lambdaとは
AWSサービスのイベントをトリガーに自身がアップロードしたコードを動作させることができるというサービス

# 料金
料金は月額であり、「lamdaへのリクエスト数」と「lamdaを動かすときに消費したメモリサイズ(時間計算)」で計算される。

料金表はあらかじめ確保するメモリサイズに依存する

# 言語
コーディングできる言語は多岐にわたるが、**「継続的なアクセスがなくCPUもそんなに使わない」のであれば「python」がいい**らしい

# ライブラリ
Python3でAWS環境を操作するには、boto3と呼ばれるライブラリが必要。

# 一時ディレクトリ
/tmpという一時ディレクトリがある。ファイルの受け渡しをしたいときとかに使う。
なお、同じファイル名を使うと、前の実行時のものが残っていてなおかつユーザー名が違っていてパーミッションエラーというのが起こりうるらしいので、毎回使い終わったらファイルを削除するのがいいらしい。

# 環境変数
lamdaに設定できる。
pythonだと、“impo

元記事を表示

LambdaからSlackにメッセージを送る際のソースコードと複数回メッセージを送る際の注意点

AWSのLambda関数から、SlackのIncoming Webhooksでメッセージを送信する機会があり、少々躓いた箇所があったので備忘録として残しておきます。
Lambda関数やIncoming Webhooksは準備できている想定として、これらの作成手順は省略します。

# 環境
– macOS
– AWS Cloud9
– Node.js 12

#実行コード
Lambda関数を1度実行する度に、Slackメッセージを1件だけ送るような場合は、以下のコードで動くと思います。
1度のLambdaで複数回メッセージを送る場合は、注意点があるので後ほど説明します。

“`javascript
const env = process.env
const request = require(‘request’);

exports.handler = function(event, context) {

// リクエスト設定
const options = {
url: env.WEB_HOOK_URL,

元記事を表示

在宅勤務中のランチタイムを IoT でアピールしてみた

# 作った動機

COVID-19 の影響で在宅勤務になった方、多いかと思います。社員間のコミュニケーションのほとんどが Slack になったという方も多いのではないでしょうか。私の場合はかねてより Slack 中心の生活を送っていましたが、最近 Slack 上にオフィスがあるような気持ちが強まりました。

Slack ではできるだけ即レスしたいな、と思う気持ちはある一方で、この情勢ではきちんと休憩をとることも大事だと思い昼休みの時間などは意図的に Slack デトックスをするようにしています。
そんなわけで昼休み中はできるだけ Slack 上のステータスを “lunch” にして「今はちょっとすぐには返せないよ」という意思表示をしていました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125247/aa5a3818-2b49-003d-b3c5-c2966539480d.png)

ただ毎回 Slack の”Set a status” を開くのは少し億劫だったので、何か簡略化する

元記事を表示

OTHERカテゴリの最新記事