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

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

年末なのでコブラの名言をランダムに表示するクソアプリ作った

# 年末なのでコブラの名言をランダムに表示するクソアプリ作った

どうもこんにちは。
普段は会社員とかプログラムスクールのメンターとかやらせて頂いてますその辺のエンジニアです。

2019年もあとわずかですが、みなさま年末は如何お過ごしでしょうか。
せっかくの年末なので、クソアプリ作ってみました。

**本当はクソアプリアドベントカレンダーに乗っかってクリスマスに間に合わせたかったよ!!**
納期駆動開発はつらい。

## その前に
皆さまあの有名な漫画、`コブラ`はご存知でしょうか?
宇宙海賊であるコブラが相棒であるレディーと一緒に宇宙を旅する少年漫画です。

1978年から1984年にかけて連載していた漫画なので、お若い方はあまり知らないかもしれませんね。
色々突っ込むポイントがありすぎるところが逆に面白くて、僕はハマってしまいました。

ネタバレしない程度にどんな話かというと、
– コブラがめちゃくちゃ強い
– セリフがいちいちクサい
– セリフがいちいちダサい
– でもそこがかっこいい
– すぐ美女と良い感じになるから羨ましい
– 作者は絶対

元記事を表示

docker-lambda + minioで環境構築

AWS S3互換であるminioと、lamda function開発用のdocker imageであるdocker-lambdaを使って、ローカルで開発環境を作ろうというお話です。

## Minio
MinioはAWS S3互換のObject Strageで、ローカルにS3環境を作ることができます。
[公式ドキュメント](https://docs.min.io/docs/minio-quickstart-guide.html)も用意されており、Dockerがあれば手軽にはじめられます。

起動するとこんな感じです。
![Screenshot from 2019-12-26 18-45-04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/263384/7fa426b0-5e99-040e-3846-3a96a1d74ae7.png)

![Screenshot from 2019-12-26 18-45-41.png](https://qiita-image-store.s3.ap-northeast

元記事を表示

golang + Lambda + API Gatewayで、S3バケットを作るAPIを作ってみた

##前提条件
2019年12月29日に試してみたものです。
go 1.29

#1. GolangのコードをLambdaで実行

###必要なライブラリをインストール
“`
$ go get -u github.com/aws/aws-lambda-go/lambda
$ go get -u github.com/aws/aws-sdk-go/aws
$ go get -u github.com/aws/aws-sdk-go/aws/credentials
$ go get -u github.com/aws/aws-sdk-go/aws/session
$ go get -u github.com/aws/aws-sdk-go/service/s3
“`

###指定したバケット名で、S3バケットを作るコード
作った関数は、引数として受け取ったバケット名で、S3バケットを作り、その結果をログに出力するもの。

“`golang:hello.go
package main

import (
“log”

“github.com/aws/aws-lambda-go/lamb

元記事を表示

id変換表を参照して URL リダイレクトさせるシステムをサーバレスで構築する

#とある業務で「id変換表を参照して URL をリダイレクト」させる必要があったので、サーバレスで実現できるか検証をした際の備忘録

## 1. 要件
* サイトA:https://example-A.com をクローズする。ただし、サイトAの一部のページはサイトB:https://example-B.com へ移植して、サイトAクローズ後も閲覧できるようにする(ここではページの移植作業については割愛)。

* サイトAの移植対象ページのURLは、サイトAクローズ後も生かしておく。そのURLへアクセスすると、サイトBの移植後のURLへリダイレクトさせる。
* サイトAの移植対象ページのURLの例

https://example-A.com/before/demo.php?id=100002

* サイトBの移植先ページのURLの例

https://example-B.com/after/10100002

* 移植先のサイトBの id は移植元のサイトAの id と異なるものになってしまうため、id 変換表を用意する。
* id変

元記事を表示

Lambdaで操りたいもの

スマート家電
Alexa
お掃除ロボット
自動掃除機連携
ドローン

元記事を表示

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はサーバー上に常駐して発言を待ち受け続けますが、これだと常に一定のリソースを

元記事を表示

OTHERカテゴリの最新記事