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

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

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のインストール

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

元記事を表示

AWS Lambda/PythonでJSON形式でログを出すベストプラクティス

Lambdaはログを CloudWatch Logs に自動保存しますが、CloudWatch Logs にはJSON形式のログを自動でパースして整形表示したり検索したりする機能があります。是非とも、ログをJSON形式にしたいところです。

しかし、「python lambda logging json」でググって見つかる記事は、いずれも内容に不備があるようでしたので、自分がベストだと思う方法を紹介するのがこの記事です。

# お断り

Pythonのログ出力は標準ライブラリの`logging`がスタンダードなので、この記事ではloggingを前提にしています。

printを使うべきではない理由・logging の正しい使い方については「[ログ出力のための print と import logging はやめてほしい](https://qiita.com/amedama/items/b856b2f30c2f38665701) 」という記事が分かりやすいです(文体は辛辣ですけど)

# これが(きっと)ベストプラクティスだ!

“`python
import logging
impo

元記事を表示

DynamoDBストリームをトリガーにLambdaを実行しSNS通知する

#1.ストリームを有効にしたdynamoDBテーブルを作成する#

テーブル名:dynamodbtesttable
パーティションキー:Username
ソートキー:Timestamp
ストリーム:有効、トリームに書き込まれる情報を項目の新しいイメージと古いイメージの両方(NEW_AND_OLD_IMAGES)にしました。

|StreamViewType| |
|—|—|
|StreamViewType | テーブル内のデータが変更されるたびにストリームに書き込まれる情報を指定します。|
|KEYS_ONLY | 変更された項目のキー属性のみ。|
|NEW_IMAGE | 変更後に表示される項目全体。|
|OLD_IMAGE | 変更前に表示されていた項目全体。|
|NEW_AND_OLD_IMAGES |項目の新しいイメージと古いイメージの両方。|

“`
aws dynamodb create-table \
–table-name dynamodbtesttable \
–attribute-definitions AttributeName=U

元記事を表示

Amazon SES の配信結果をDynamoDBに保存するLambda関数

この記事は、[AWS LambdaとServerless #2 Advent Calendar 2019](https://qiita.com/advent-calendar/2019/lambda2) の24日目の記事です。

## Introduction

システムからのメール配信を行っている場合、BounceやComplaintとなったメールアドレスへの対処が求められます。
Amazon SES の場合、SandboxからProductionで使用する際にどのようなプロセスを実装しているかを申請する必要があります。

AWS公式では以下のような知見が紹介されています。
[How do I create an AWS Lambda function to store Amazon SNS notification contents for Amazon SES to an Amazon DynamoDB database?](https://aws.amazon.com/premiumsupport/knowledge-center/lambda-sns-ses-dynamodb

元記事を表示

New Relic初心者がNew RelicでLambdaを監視設定してみた。

これは[New Relic Advent Calendar 2019](https://qiita.com/advent-calendar/2019/newrelic)の23日の記事です。

New Relic 初心者です。
今回、ちょっとNew Relicを触る機会がありまして、
よく使うAWSのサービスの1つであるAWS Lambdaの監視を試してみました。

基本的には、
[サーバーレス機能の監視 » AWS Lambda監視 » 始めてみましょう AWS LambdaのNew Relic監視の概要](https://docs.newrelic.co.jp/docs/serverless-function-monitoring/aws-lambda-monitoring/get-started/enable-new-relic-monitoring-aws-lambda)
を実施したものになります。

## 準備
[公式構成図](https://docs.newrelic.co.jp/sites/default/files/thumbnails/image/

元記事を表示

LambdaをVPC内に作ってちょっとだけハッピーになった話

# 前提
– LambdaについてはServerlessFrameworkを使用
– IP制限の掛かったサービスにWebhook的にLambdaから通知を送りたかった
– SESのバウンス通知
– 動画変換完了後の通知など(うちの会社ではよくあるパターン)

# 課題
– これまではどうしていたかというと
– IP制限の掛かっていないCloudFrontディストリビューションを作成
– 上記のディストリビューションに対してドメインを振る(`webhook.xx.com`等)
– アプリケーション側の該当のパス以下(`/webhooks/hoge`等)にベーシック認証を設定
– Lambdaから上記のパスに通知

## ペイン(辛み)
– (ベーシック認証は掛けるものの)野ざらしになったWebhookディストリビューションを作ることになること
– ドメインも別途発行する必要があること
– クライアントによっては発行まで色々やり取り発生するし時間かかるしめんどくさい
– 同時にSSLの設定等も増えるのでとにかくめんどくさい

# 解決策
– 今回下記の流れで

元記事を表示

AWS Lambdaで動的サイトのwebスクレイピングをしてtwitterに投稿するbotを作った(続)

[2018/10に作ったtwitterのbot](https://qiita.com/kihoair/items/3a50454bae6c6bc6a2d6)をリファクタリングしました。理由としては

* python2.7で実行していた。
* Lambda Layer実装以前だったため、ソースコードのサイズが大きすぎてコンソールからは確認・修正できなかった。
* Serverless Framework/Lambda Layerを使ってみたかった。

などもあり、AWSの一年間の無料期間が終わるのでアカウントを作り直すついでに作り直しました。
ソースコードは[こちら](https://github.com/kihoair/intro_bot)。
レポジトリの構成の概要は以下の通りです。

“`
.
├── lambda (Lambda本体)
│ ├── includeするmoduleたち
│ ├── lambdafunction.py
│ └── serverless.yml

└── selenium-layer (Lambda Layer用)
├── ch

元記事を表示

Telegram botをAWS Lambdaでやってみた

Leoです。
この記事は [Wanoグループ Advent Calendar 2019](https://qiita.com/advent-calendar/2019/wano-group) の22日目の記事になります。

[Telegram](https://telegram.org/)のアプリにserverless botの機能を追加しました。
現在僕は複数のメッセンジャを使っています。
Lineにはbotを[簡単に追加できますが](https://dev.classmethod.jp/etc/lambda-line-bot-tutorial/)、今回初めてTelegramのアプリに入れる必要があったので、この記事をメモとしても書きました。

### Telegramのbotの実装には基本的に4ステップがあります。
1. Botの登録
2. AWS lambdaの登録
3. AWS API Gatewayのendpointを追加
4. EndpointをTelegramにwebhookとして登録

## Botの登録
Lineと違って、Telegramのbot登録やbotの操作はア

元記事を表示

OTHERカテゴリの最新記事