- 1. Java8 ラムダ式を変数に代入して再利用する
- 2. AWS Lambdaで並列処理を行うことで処理を高速化する(Python編)
- 3. Node.jsの”Error: Cannot find module ‘cfn-response'”の解決方法
- 4. AWS Lambdaとre:Invent 2019のUpdate
- 5. Slackbotをserverlessで動かしたかった
- 6. バッチ処理するECSタスクが異常終了したとき通知する
- 7. Githubのisuueのコメント時に、Lambdaを使ってチャットワークに通知されるようにしてみた
- 8. Alibaba CloudのFunction Compute(サーバレスアーキテクチャ)を使ってECSインスタンスを自動起動&自動停止させる
- 9. TerraformでCodePipeline設定 + Slack通知する方法(Ver.ECS Rolling update)
- 10. Rubotyがサーバーレスで動くようにした
- 11. The Hitchhiker’s Guide to AWS Lambda
- 12. AWS LambdaでLaravelを動かす
- 13. Serverless Framework で API Gateway & Lambda を構築する
- 14. API Gatewayのlamdba連携時の引数のやり取りについて
- 15. AWS Lambda + Typescript + PuppeteerでWebスクレイピング
- 16. AWS Lambda/PythonでJSON形式でログを出すベストプラクティス
- 17. DynamoDBストリームをトリガーにLambdaを実行しSNS通知する
- 18. Amazon SES の配信結果をDynamoDBに保存するLambda関数
- 19. lambda custom runtimeでbash動かす+標準にないnkfコマンドを使えるようにする
- 20. New Relic初心者がNew RelicでLambdaを監視設定してみた。
Java8 ラムダ式を変数に代入して再利用する
ラムダ式はオブジェクトと同じように、変数に代入して再利用ができます。
filter() メソッドを例にして、ラムダ式を変数に代入して再利用してみます。
以下のリストから、8文字以上の文字列のみをフィルタで取り出してみたいと思います。“`java
final Listmonths =
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
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のインストール
サービス作成コマンドを使うためにグローバルインストールします。
どうしてもグローバ
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
lambda custom runtimeでbash動かす+標準にないnkfコマンドを使えるようにする
# はじめに
オンプレで動いているBashのスクリプトをlambdaで動かしたいなと思い、
AWSのチュートリアルを実践プラスアルファで、nkfコマンド使えるようにする。# 参考にしたチュートリアル
[チュートリアル – カスタムランタイムの公開 \- AWS Lambda](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/runtimes-walkthrough.html)
“`
$ tree
.
├── bootstrap
├── function.sh
└── response.txt
“`こんな感じで始めていきます。
# ロールの作成
## やること
– [Roles](https://console.aws.amazon.com/iam/home#/roles)のページを開く。
– ロールの作成
– 信頼されたエンティティ – Lambda
– アクセス許可 – AWSLambdaBasicExecutionRole
– ロール名 – `lambda-role`チュートリ
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/