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

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

AWS LambdaとServerless Frameworkで爆速で作るTwitterbot

## 0. はじめに
ここ1年はStackstormばかり扱っているのですが、年末だし他の技術も触るかー!と思いたち、色々自分の作業ディレクトリを漁っていたところ、Twitterbotなるものを発掘しました。

`Stackstorm???`という方はこちらをご参照ください。(自演)
[Dockerで始めるStackstorm再入門1/3(環境構築からOrquestaで書いたWorkflowの結果をslackに通知するところまでのチュートリアル)](https://qiita.com/gkzz/items/4329f0846c873dbce9cf)

話を戻します。
そのTwitterbotですが、私はvpsを使って運用していました。
ただ、そんなに頻繁に動かさないので、また勉強も兼ねて、このたび`AWS Lambda(以下、lambda)移行`にチャレンジした次第です。

`lambdaってなに?`という方は、AWSがオフィシャルなハンズオンを公開しているので、そちらをご参照ください。

lambdaをローカルで作成してデプロイする。

AWSを弄っているとなにかと必要になるのがslackへの通知関数。
今回はこの通知関数をローカルで作成し、ユニットテスト実行、デプロイまでを試みました。
なお、slackのURLのような平文にしておきたくないものは環境変数ではなくパラメータストアを使って扱いたいと思います。

_contents_
1. ローカルでSlack通知関数を作成
2. mocha + chaiで単体テスト
3. lambdaへデプロイ

# 前提条件

* Slack WebhookのURLを作成・取得済み。
* ローカルに`aws-sam-cli`を導入済み。

# 1. ローカルでSlack通知関数を作成

今回はプロジェクト名を`localSlack`とします。

“`
$ sam –version
SAM CLI, version 0.38.0

$ sam init –runtime nodejs10.x
Which template source would you like to use?
1 – AWS

元記事を表示

NATゲートウェイを使ってない時に全停止して都合良く全復活させる

# VS 使ってないNATゲートウェイの課金
NATゲートウェイは使用料金が高く、使用していない時は止めたい。
ただ2019年12月の現在において停止機能は存在しておらず、停止イコール削除となる。
停止という点ではNATインスタンスを立てて停止すれば良い話だが、それでは単純に面倒。
つまり稼働中のNATゲートウェイを削除し、使いたいときに必要な情報をもって再作成するスクリプトを作成すればいい!

# やりたいことを図にしてみる
![gomi.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/558188/0b0f391e-afea-597b-dd03-da856764aea1.png)
PlantUMLは有能

# 停止(削除)スクリプト
“`
import boto3

client = boto3.client(‘ec2’)

natGateWayList = []
routeTableList = []
subnetList = []
natGateWayNameList = []
iPli

元記事を表示

Amazon Web Service ブログがバグっててハマった件〜画像をリサイズする〜

お疲れ様です、モバイルコムVPoE石黒です。

早速本題ですが

CloudFrontとLambda@Edgeを利用して画像をリサイズする方法を採用しようと思い、
以下のブログを参考に、リサイズするところまでは実装できたのですが、
横幅と縦幅にnullを設定したいなーと修正していたところ、掲載されているコードにバグがありハマりました。

[Amazon CloudFront & Lambda@Edge で画像をリサイズする](https://aws.amazon.com/jp/blogs/news/resizing-images-with-amazon-cloudfront-lambdaedge-aws-cdn-blog/)

“`js

‘use strict’;

const querystring = require(‘querystring’);

// defines the allowed dimensions, default dimensions and how much variance from allowed
// dimension is allowed.

元記事を表示

Java8 ラムダ式を変数に代入して再利用する

ラムダ式はオブジェクトと同じように、変数に代入して再利用ができます。
filter() メソッドを例にして、ラムダ式を変数に代入して再利用してみます。
以下のリストから、8文字以上の文字列のみをフィルタで取り出してみたいと思います。

“`java
final List months =
Arrays.asList(“January”, “February”, “March”, “April”, “May”, “June”, “July”, “Augast”, “September”, “October”, “November”, “December”);

final List jewelries =
Arrays.asList(“garnet”, “amethyst”, “aquamarine”, “diamond”, “emerald”, “pearl”, “ruby”, “sardonyx”, “sapphire”, “opal”, “topaz”, “turquoise”);
“`

8文字以上の文字列のみをフィルタするラムダ式を lo

元記事を表示

Sumerian+Lambdaで簡易EC2モニタを作ってみた

# はじめに

AWS Sumerianは、他のAWSサービスと連携したAR/VRのコンテンツを作成することができ、そこが大きな魅力の一つでもあります。
そこで今回は、SumerianとLambdaを直接連携させる形で簡易的なEC2インスタンスのモニタリング機能(+停止機能)を実現するVRアプリケーションを作成してみます。

![sumerian-image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533054/7e29d710-2be2-01fc-91d0-b79dfc79cfa6.png)

# 必要なもの

– AWSアカウント
– ウェブブラウザ(開発および実行環境として。ChromeやFirefoxなど)

## 構築要素

– **EC2インスタンス:** 監視/制御の対象となるEC2インスタンス
– **Lambda関数:** EC2インスタンスの情報取得やシャットダウンを実行する関数
– **Cognito IDプール:** Sumerianに一時認証情報を払い出すためのIDプール

元記事を表示

AWS Lambdaで並列処理を行うことで処理を高速化する(Python編)

## はじめに

みなさんAWS Lambda(以降はLambdaと表記)使ってますか?
Lambdaには対応している言語が複数あるので、Go言語で記述されている方、Node.jsで記述されている方、Pythonで記述されているかたなど、
様々いらっしゃるかと思います。
APIのバックエンドとしてLambdaを設置する場合、Lambdaの処理時間は出来る限り短くしたい、と思われる方がほとんどだと思います。
理由としては、下記が挙げられるかと思います。

* API Gatewayの時間制限が29秒のため、29秒を超える処理が出来ない
* APIの呼び出しに時間がかかると、ユーザービリティを著しく損なう

では、Labmbdaの処理時間を短くしたいのですが、方法としては下記があります。

* Lambdaの性能を上げる
* Lambdaの中で並列処理(マルチスレッド化、マルチプロセス化)を行う

今回は、Lambdaでの並列処理について解説したいと思います。

## 実践

それぞれの検証は、下記共通の条件で実施しています。

メモリ:3008 MB
タイムアウト:1分

### 並列

元記事を表示

Node.jsの”Error: Cannot find module ‘cfn-response'”の解決方法

# Error: Cannot find module ‘cfn-response’
Lambda-Backedカスタムリソースにおいて、Node.js 8がEOLとなるため、コードはそのままでランタイムの指定だけをNode.js 12.xに変更したところ、このようなエラーが発生しました。

“`エラーメッセージ
Response:
{
“errorType”: “Runtime.ImportModuleError”,
“errorMessage”: “Error: Cannot find module ‘cfn-response'”,
“trace”: [
“Runtime.ImportModuleError: Error: Cannot find module ‘cfn-response'”,
云々
“`

Node.js 8では以下の指定で同じ階層のファイルrequireできるのですが、

“`Node.js8:
const response = require(‘cfn-response’);
“`

Node.js 12では、パスを明記する必

元記事を表示

AWS Lambdaとre:Invent 2019のUpdate

今回はServerless技術の中心役となっているLambdaについて、いくつかの実装事例を紹介したいと思います。AWSの他のサービスと連携してシステムのServerless化することも最近増えてきてます。またAWS Lambdaと連携できるサービスもどんどん増えているので今度はAWSのManagedサービスを利用して簡単実装できるサービスと増えることが期待できます。AWS Lambda は自分たちが使いなれている言語で

# Lambdaについて一言
我々が管理する必要なく必要なだけ利用して利用したンピューティング分の料金だけ支払えば利用できるコンピューティングサービスのことです。詳細はこちらの公式サイトの[AWS Lambda とは](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/welcome.html)で参考できます。
コードを書いてLambdaへDeployするだけで、ワークロードのサイズに合わせてスケールされます。AWS Lambda では、コードが実行される 100 ms ごとの請求になるため、従来のシステムよりも

元記事を表示

Slackbotをserverlessで動かしたかった

## 目的

これはSlackbotをserverlessで動かしたかったのだが、失敗した記録である。
こうやったらできるよなどがあったら教えて欲しい。

## 要件

– Slackのイベント(新規ユーザの追加/チャンネル追加)時にbotがpostして欲しい
– 将来的には機能を追加したい
– Slackはフリープラン
– bot運用にできるだけコスト(お金)をできるだけかけたくない
– 運用にかかるコスト(OSやパッケージのアップデートなど)をできるだけかけたくない

フリープランでなければWorkflowが選択肢になる。

## 構成

![Slackbot_Serverless.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36587/28a285a9-c02e-da53-d094-3fc15dab2675.png)

SlackとApp間はEvent経由(HTTPS、WebSocketでない)で通信する。
Slack空のHTTPS通信はAPI Gatewayで受け、Lambdaに流す。

元記事を表示

バッチ処理するECSタスクが異常終了したとき通知する

Fargateでバッチ処理をしているが、それが異常終了したときどう検知するか検討しました。
バッチに使われているタスクはSTOPPEDになったとき**終了コード**で判断することにしました。

## 1. 概要

おおまかな作りは以下です

– CloudWatchEventでSTOPPEDになったECSタスクを検知
– Lambdaにわたす
– LambdaでメッセージからコンテナのExitCodeが”1″のときslackに通知する

## 2. CloudWatch Event

[タスク状態変更イベント](https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/ecs_cwe_events.html#ecs_task_events)を参考に
以下のようなイベントパターンを作成します

“`json
{
“source”: [
“aws.ecs”
],
“detail-type”: [
“ECS Task State Change”
],
“detail”: {

元記事を表示

Githubのisuueのコメント時に、Lambdaを使ってチャットワークに通知されるようにしてみた

# 概要
Github Webhook -> AWS API Gateway -> Lambda -> Chatwork
という構成で、チャットワークにgithubからコメントがあったことを通知できるようにします。
Chatwork APIが使用可能な前提になっています。

# Lambdaで関数を作成
## 関数の作成
AWS Lambda > 関数 > 関数の作成 から関数を作成します。

![screencapture-ap-northeast-1-console-aws-amazon-lambda-home-2019-12-25-12_51_41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120480/8e5c1293-7a1d-d0de-6a67-f014e49d9f20.png)
関数名には適当な名前を入力します。今回は`chatworkNotification`にしておきます。
関数に使う言語は、使ってる人が多そうだったためNode.jsにしました。

## 関数コード
今回はコードエ

元記事を表示

Alibaba CloudのFunction Compute(サーバレスアーキテクチャ)を使ってECSインスタンスを自動起動&自動停止させる

# この記事の目的
Alibaba Cloudの“`FunctionCompute“`というサーバーレスでコードを実行できるプロダクトを使ってみます。
AWSでいう“`Lambda“`に相当するプロダクトで、低料金でAlibaba Cloudが提供するSDKなどを組み合わせてAlibaba CloudのリソースをAPIで操作することができます。

# Function Computeで実現したいこと
従量課金で建てたECSを朝と夜の特定時間に自動起動ならびに自動停止させます。

背景としては、社内検証でECSを“`従量課金“`で複数台作りそのままにしておくことがあり、不使用時にもコストが発生していたことがもったいない!と思ったからです。そして、FunctionComputeで実現する場合に、以下2点メリットが挙げられます。

– cron用のECSを別で用意したり、自身のPCをホストとしてタスクスケジューラーやcronを実施したりせずに、シンプルかつ低コストでAPIリクエストを投げられる
– Alibaba Cloud側で豊富なSDKを用意しており、使い慣れたプログラミング

元記事を表示

TerraformでCodePipeline設定 + Slack通知する方法(Ver.ECS Rolling update)

#概要

最近Terraformを利用してAWSインフラ構築する機会をいただいているため、
[CodePipelineでECSにデプロイする(Ver.rolling update)](https://qiita.com/jeayoon/items/74324f338725d29de23f)のTerraformバージョンを書いてみたいと思います。

あ、そして、
Merry christmas 🙂

#やること

この記事に書く内容を改めて説明させてください。
![スクリーンショット 2019-12-25 12 29 31](https://user-images.githubusercontent.com/17561411/71431000-6d9b2480-2712-11ea-9ddd-23def22b900b.png)

上記のイメージにある赤いところです。
AWS CodePipelineでGitHub pushしてECSにRolling updateデプロイする方法と、AWS CodePipelineのStageごとにSlack通知する方法を全部Terraformで作成するこ

元記事を表示

Rubotyがサーバーレスで動くようにした

この記事は [PONOS Advent Calendar 2019](https://qiita.com/advent-calendar/2019/ponos) の25日目の記事です。
昨日は[@kerimeka](https://qiita.com/kerimeka)さんの[ゲームにおけるFirebase 活用例](https://qiita.com/kerimeka/items/9cee8a122d815b3186d2)でした。

??何とか全枠埋まりました!??
記事を書いて頂いたみなさん、ありがとうございました!

——

[Ruboty](https://github.com/r7kamura/ruboty)という、Rubyでチャットボットが作れるOSSがあります。
個人的に凄く好きなOSSで、何とか趣味なり仕事で使えないかと考えています。(趣味方面だと、[@gymtter](https://twitter.com/gymtter)で一応使ってる。)

## やりたかったこと

Rubotyはサーバー上に常駐して発言を待ち受け続けますが、これだと常に一定のリソースを

元記事を表示

The Hitchhiker’s Guide to AWS Lambda

こんにちは、@yuimam です。

令和元年も年の瀬が迫ってきていますが、AWS Lambda というサービスが 2014 年にアナウンスされ、早くも 5 年の月日が流れました。5 年も経つと、リリース当初から機能追加やアップグレード、仕様変更などなど様々な変化があるもので、もはや AWS Lambda は一言では語れず一枚岩ではありません。

そこで、**The Hitchhiker’s Guide to AWS Lambda** と題しまして、Newbie でも Expert でも何かしら参考にできるような、AWS Lambda のガイドを作ってみようと思い立ちました。
(単に自分のカンペのためという説)

皆さんのサーバーレス人生に少しでもお役に立てれば幸いです。

なお、下記の情報はすべて特筆ない限り、**東京リージョン** / **2019-12-25** 時点の情報です。
まだまだ書き足りていないところも多々あるので、随時追記をしていきたいと思います!

# AWS Lambda とは?

**2014 年 11

元記事を表示

AWS LambdaでLaravelを動かす

最近サーバーレス(Lambda)に興味があったので始めてみるかとは思ったものの
好きな言語であるPHPは標準でサポートされておらず。。。
どうにか動かす方法はないかと調べていたところ、[bref](https://bref.sh/)なるものを使えば簡単に動かせそう!しかもLaravelも動かせる⁉
だったので、その手順をまとめてみました。

## 準備

以下のものが必要になります.

– AWSアカウント
– AWS CLI
– AWSアカウントアクセスキー及びシークレットキー
– npmコマンド

こちらの準備については記事の内容ではないのでスキップします。

## serverlessコマンドをインストール

まずはserverlessコマンドをインストールします。
こちらはLambdaをデプロイする際に使用します。

“`bash
$ npm install -g serverless
“`

serverlessコマンドのインストールが完了したら、AWSアクセスキー及びシークレットアクセスキーを設定します

“`bash
$ serverless config cred

元記事を表示

Serverless Framework で API Gateway & Lambda を構築する

この記事は [CodeChrysalis Advent Calendar 2019](https://qiita.com/advent-calendar/2019/codechrysalis) の記事です。

[Serverless FrameworkでDynamoDBを構築する](https://qiita.com/maaaashin324/items/014d2e5fc29d31f45cae)ことについての記事と[Serverless FrameworkでCognitoを構築する]ことについての記事もぜひ御覧ください。

# はじめに

[Serverless Framework](https://serverless.com/) はYAMLでサーバサイドの環境構築ができる、Infrastructure As Code の真骨頂です。確かにAWS等のコンソールでもポチポチクリックしながら環境構築はできますが、

1. 変更の管理ができない
2. 画面でポチポチクリックするのが本当に面倒(Lazy…)

なのでServerless Framework の CLI でコマンド一発で

元記事を表示

API Gatewayのlamdba連携時の引数のやり取りについて

API-Gatewayとlambdaで引数のやり取りする場合は、全部Stringで渡されるんだね。よく考えたら、QueryParameterの場合もあるし、JSONでやり取りするとは限らないか。

なので、

“`request.json
{
“user_id”: “string”,
“lang”: “string”,
“args”: {
“name”: “string”,
“keyWord”: “string”
}
}
“`

こんな感じのjsonをAPI-Gatewayに対してPOSTする場合、lamdba側では、以下のような処理を行う必要がありますね。

“`python:sample.py
def lambda_handler(event, context):

# request bodyはstringなので、jsonに変換する
body = json.loads(event[“body”])
# こんな感じにすると、user_idが取得できる。
user_id = body[“user_id”]
“`

元記事を表示

AWS Lambda + Typescript + PuppeteerでWebスクレイピング

# AWS Lambda + Typescript + PuppeteerでWebスクレイピング

## 前提条件

– 開発環境
– Windows10
– Node.js 12.14.0-x64
– AWS CLI
– VS Code
– AWSアカウント
– IAMユーザー※

※IAMユーザーはServerlessFrameworkのリソース作成に必要な権限が付与されていること(今回はAdministratorAccessを使用)、AWS CLIに`–profile serverless`で設定していることを前提とする

## Serverless Framework のプロジェクト作成

AWSリソースの管理に[Serverless Framework](https://serverless.com/)を使います。AWS Lambdaを使う上で必要な面倒くさいことを大体やってくれます。すごい。

### Serverless Frameworkのインストール

サービス作成コマンドを使うためにグローバルインストールします。
どうしてもグローバ

元記事を表示

OTHERカテゴリの最新記事