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

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

終わらないLambda実行

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

## はじめに

API Gatewayと組み合わせてのAPIサービング、SQSトリガーからのジョブ、DynamoDBの更新をフックにした処理など、いろいろな活躍をしてくれるLambdaですが、API Gatewayからのレスポンスが返ってこないな、テストが終わらない?、という状況になったことはありませんか?

今回は私が開発中に出会った、いろんな意味でLambdaやLambdaを使った処理が終了していない、終了していないように見えるパターンについて紹介します。

1. Postgresへの接続
2. Postgresへ接続したFunctionのテスト
3. DynamoDBトリガーのLambdaでの例外によるリトライ

Serverless FrameworkでNode.js + TypeScriptで検証しています。

## 1. Postgressへの接続

元記事を表示

lambda_handler外のグローバル変数に気をつけよう(datetime)

# はじめに
ジョブが作成されてからLambdaが実行されるまでの間の時間(滞留時間)を取得する
Lambdaを作成していた時に
現在日時を取得するためにdatetimeを使用していたのですが、
そこで「AWS Lambdaは関数インスタンスを再利用」というのに見事にハマったので、
記事にしてみたいと思います。

# 最初に作成していたコード
まずLambdaが実行された現在日時を取得するための
コードを簡略化したものが以下になります。

“`.py
from datetime import datetime

now = datetime.now()

def lambda_handler(event, context):
method_a()

def method_a():
method_b()

def method_b():
method_c()

def method_c():
# xはジョブの作成日時を表しています。
time = now – x
print(data)
“`

– ジョブの作成時刻を`x`
– 現在時刻を`now`

元記事を表示

F# でAWS Lambdaのはじめかた

## Problem

[AWS Lambda が、.NET Core 2.1 ](https://docs.aws.amazon.com/lambda/latest/dg/dotnet-programming-model.html)をサポートされて、1年以上経過しました。
しかし、サポートされているのはC#だけではありません。F#もまた同様です。
F#は.NETで実行される機能言語であり、C#で記述されたAWS SDK for .NETなど、他の.NET言語で記述されたパッケージを使用できます。

これまでに、F#を使用したAWS Lambdaのプロジェクトを作ったことがない方にも分かるように作り方をまとめます。

## Solution

### 開発環境

#### Windowsの場合

開発環境は以下の通りです。

項目|値
—|—
IDE|Visual Studio 2019

#### Macの場合

項目|値
—|—
IDE|Visual Studio Code

### 準備

#### Windowsの場合

##### AWS Toolkit f

元記事を表示

Java リストをイテレートする5つの例から省略形に辿り着く

リストのイテレートについて、シンプルなリストを使って書き方を見ていきます。
今回は以下の文字列のリストを使います。

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

これらの要素を順番に標準出力させたいだけです。

### 命令型のスタイル
まずは、for ループを使ってみます。
for ループは命令型のスタイルで、外部イテレータです。
命令型のスタイルでは、「どのように」処理を行うかの多くをプログラマ側で考える必要があります。

#### 1. for ループ(インデックス指定)
特に難しいことはないと思います。1番目の要素から順番に出力しています。
インデックスをわざわざ一つずつインクリメントしながら指定する必要があります。

“`java:for-with-ind

元記事を表示

Lambda Functionの一覧をランタイムバージョンと共に表示する

古いランタイムバージョンのLambda Functionが残ってると、使ってなくてもAWSからEOL通知のメールが来るので、一覧を表示するスクリプトを書いた。備忘録代わりに投稿します。

“` bash
#!/bin/bash
regions=$(aws ec2 describe-regions | jq -r ‘.Regions[].RegionName’)
for region in $regions
do
aws –region $region lambda list-functions –function-version ALL | jq -r ‘.Functions[] | [.Runtime, .FunctionArn] | @csv’ | sort -V
done
“`

あとは、消したいものをgrepして、“`aws lambda delete-function –function-name ARN“`するだけ。Regionごとに消さないといけないので、ちょっと面倒くさいけど。

元記事を表示

AWS Lambda@Pythonで相対importする

## 実装

`test` というパッケージを作って`lambda_handler`の位置を一階層下げる。

で、起動ハンドラの指定を
`lambda_function.lambda_handler` から
`test.lambda_function.lambda_handler` へ変更する。

### イメージ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299475/a1a7d679-8334-05eb-6005-de897574abb7.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299475/d21b8f30-880a-1b09-3b04-4e141fa46376.png)

※ `__init__.py` は必須

元記事を表示

Lambda関数をそのままAWS Batchに乗せ換える(Python3.6限定)

この記事は [アラタナアドベントカレンダー2019](https://qiita.com/advent-calendar/2019/aratana) 19日目の記事です。

Serverlessでサービスを展開していると、どうしてもRDBを使いたくなったり、どこかでバッチ処理をしたくなったりしますよね。

RDBについては、RDS ProxyがLambdaから使用可能になりそうでいい兆しですね。

[Amazon RDS Proxy](https://aws.amazon.com/jp/rds/proxy/)

バッチ処理についてはかつてからAWS Batchというのが用意されています。

これはECRに用意したDockerを使って処理を実行できる環境です。Queueも用意されているのでかなり自由なバッチ設計ができると思います。

さて、Serverlessで環境を構築している場合、まず選択肢として、AWSBatchよりもLambdaを考えると思います。

StepFunctionやQueue、S3などのイベント、並行処理を駆使して構築する場合もあるでしょう。

ただ、Lambdaの実

元記事を表示

Lambda@Edgeについてまとめる

# はじめに
Lambda@Edgeを初めて使い、色々戸惑うことが多かったため調べたことをまとめる。
また、都度追加していく。

# Lambda@Edgeとは
Lambda@EdgeとはCloudFrontの機能の1つで、CloudFrontのエッジサーバでコードを実行するLambda関数のこと。ユーザーに近い場所でコードが実行されることでアプリケーションのパフォーマンスが向上する。
CloudFrontのイベントをトリガーとしてコードを実行する。

## トリガー
上述の通り、CloudFrontのイベントをトリガーとし、イベントがあったCloudFrontと同リージョンで起動する。指定できるCloudFrontのイベントは以下の4つ。

1.ビューワーリクエスト
2.ビューワーレスポンス
3.オリジンリクエスト
4.オリジンレスポンス
スクリーンショット 2019-12-17 19.53.34.pngAWSでサーバレスな定期バッチ環境を作るには結局どれ使えばいいの?(Lambda vs Fargate vs Batch)

LIFULLで技術マネージャーをしています。たまにはエンジニアぽいところを見せてほしいという社内からの~~プレッシャー~~激励に促されて、AWSにおける知見を整理して共有します。

# はじめに
システムを運用する上で、日次や月次の決まったタイミングで動作する定期バッチを必要とするケースがあると思います。定期実行なので、インフラリソースをそのタイミングだけ利用するサーバレスなバッチを作るのが経済的にも地球環境的にも優しいですよね。

ということで、AWSのサービスを利用して実現しようというお話なんですが、選択肢の多さに結局どれを使えばいいんだっけ?ってことになりかねません。そこで考えられる選択肢として [Lambda](https://aws.amazon.com/jp/lambda/)、 [Fargate](https://aws.amazon.com/jp/fargate/)、 [Batch](https://aws.amazon.com/jp/batch/) の3つを取り上げて、定期バッチ環境を作る上でのメリット、デメリットをまとめたいと思います。

# サービス比較
記事投稿時

元記事を表示

究極のCloudFormationをたずねて三千里

AWSの猛者たちよ…完全解をください…!

この記事は、[Fusic Advent Calendar 2019](https://qiita.com/advent-calendar/2019/fusic) 19日目の記事です。

## 究極の機械
こういう機械を見たことはありますか?(画像クリックでYoutubeへ)
[![Claude Shannon Ultimate Machine](http://img.youtube.com/vi/G5rJJgt_5mg/0.jpg)](http://www.youtube.com/watch?v=G5rJJgt_5mg)

結構昔に流行った気もしますが、スイッチを入れると自分で自分のスイッチを切る機械。
これは「役に立たない機械」の一種で、「究極の機械」(Ultimate Machine)と呼ばれるものらしいです(落差が激しい)。

https://ja.wikipedia.org/wiki/%E5%BD%B9%E3%81%AB%E7%AB%8B%E3%81%9F%E3%81%AA%E3%81%84%E6%A9%9F%E6%A2%B0
> 一

元記事を表示

Hello Java Lambda

簡単な要件を満たすコードを書くにあたって、Lambda を使わないケースと使うケースを比較してみます。
以下のような数字のリストを用意し、100以上の分だけ2倍したものを合算する処理を考えてみます。
仕様:100以上の分だけ2倍したものを合算する

“`java:number-list
final List numbers = Arrays.asList(50, 100, 10, 400, 120, 30, 220);
“`

##### Lambda を使用しないケース
たとえば、リスト内の値を一つずつチェックし、もし100以上であればその数値を2倍し、total に加算するという流れが考えられます。
これ位の計算であれば、シンプルで分かりやすく大きな問題はないと思われます。
ただ、仕様(100以上の分だけ2倍したものを合算する)に対して、それを実現する一つの方法として ”数字を一つずつチェックする” というエンジニアのアイデアがそこに挟まれるため、やや誤解を与えやすいコードになる可能性があります。

“`java:without-lambda.java
in

元記事を表示

Lambda + API GatewayでGithub上のアクションを検知してGithubに対してアクションする

# はじめに
最近バックエンドの実装をメインに担当しているエンジニアです。
先日チームメンバー(@sen-higaさん)と共同で行った業務効率化タスクを通して、初めてWebhookやサーバレスアーキテクチャに触れたので、その時の備忘録です。

# やったこと
Github上のアクションを検知してGithubに対してアクションするという仕組みをLambda + API Gatewayで実装しました。
GithubからGithubへの動線がわかりやすいように、タスクの実装時とは内容を変えて、イシューがOpenされた時に、作成者をイシューに自動アサインするというシンプルな仕組みにしました。

スクリーンショット 2019-12-19 8.56.08.png

もっとこうした方がいい、自分ならこう実装するというご意見があ

元記事を表示

LINEで送られてきた写真をS3に保存したい

#何に使うのか
AWSのLambdaなどを用いて画像加工する時やAWS.rekognitionのリソースとして使う時に
役に立てばと思います。
今回、LINE Developperの設定などは飛ばします。

類似の検索をするとSDKを使用している方が多いですが、今回は使わずにいきたいと思います。

##使用技術
– LINE Messaging API
– Python 3.7
– AWS S3
– AWS Lambda

##プログラム
メイン関数一部

“`python:lambda_function.py
import requests
import os
import json
import boto3
from io import BytesIO
#Headerの生成
HEADER = {
‘Content-type’:
‘application/json’,
‘Authorization’:
‘Bearer ‘ +’チャンネルアクセストークン’
}
#main
def lambda_handler(event, context):

元記事を表示

Slack x API Gateway x Lambda(Python) x RDSでChatOpsをしてみた

## 背景
– 検証環境(AWS)のRDSにいつでもSeedデータを投入(テストデータの入れ直し)をしたいという要望がありました。
– slackからやれるのが一番楽(開発者の開発環境に依存しないのはやっぱり楽!)ということで、slackから検証環境のRDSにデータを反映する仕組みを作りました。

## 使った技術スタック
– Lambda
– S3
– RDS
– slack(技術スタック..?)

## 前提
説明簡略化のために以下は実施済みで話を進めます

– SeedファイルがすでにS3に存在すること
– githubからSeedファイルをcloneする手もあると思いますが、認証周りの実装がめんどそうなのでS3にSeedファイルを置いています
– Seedを流す対象のRDSインスタンスがすでに存在すること

## 全体像
以下のような感じで、slackからbotに対してコマンドを実行することで、検証環境にデータを反映してslackに完了通知を返します
![スクリーンショット 2019-12-18 11.29.36.png](https://qiita-image-store

元記事を表示

Qiita Organization の新着記事をチャットに通知して組織の学習効率を高める!

社内で Qiita 記事のアウトプット活動を促進しています。G-awa です。アウトプットによる学習方法は学習効率が良く、大変おすすめです。ただその一方で、ひとりでは続けづらいという面もあるのでチームや組織で互いに支え合うことが重要です。ひとりだと心が折れがちですよね。

→→→→

昨日の記事読んだよ、とても参考になった :thumbsup:
などのように、互いに励ま

元記事を表示

女性声優と自動化

> この記事は「[Wake Up, Girls! Advent Calendar 2019](https://adventar.org/calendars/3985)」18日目の記事です

この記事では推しの声優の情報を自動的に収集する仕組みである [@yoppinews](https://twitter.com/yoppinews) bot の開発や運用についてご紹介します。

[](https://twitter.com/yoppinews)

# 1. はじめに: 趣味を自動化して怠惰なファン活動をしよう

 声優のファン活動のなかで、どのような作品やイベントに出演するのかといった情報をおさえておくのは重要でありながら意外にも時間やコストを要します。

 **チケットの争奪戦が予想される場合、オタク

元記事を表示

LamdaでPythonを使い、TwitterAPIで自動「いいね」する!

今回のものは、過去の[この記事](https://qiita.com/gurensouen/items/484e3198bcafa69f5c8b)を元に加筆/修正したものになります!

記事タイトル通り、AWSサービスのLambdaを使用して、Twitterの自動「いいね」などをしつつ、LambdaでPythonを使う方法にフォーカスを当てて簡単に説明していきます。

##本題の前に
– TwitterAPIを使用するために必要なアクセストークンの取得は[こちら](https://bookreco.net/program/twitterapi_using/)で!

– Pythonのpipコマンドのインストールは[こっち](https://qiita.com/suzuki_y/items/3261ffa9b67410803443)で!

##本題

####ファイル作成

デスクトップに作業用ディレクトリを作成しましょう。
コマンドでも、「control+クリック」でも構いません。
ただ後々めんどくさくなるので、ローマ字表記にしましょう。
作成したら、ターミナルかコマンドプロンプト

元記事を表示

New Relic for Lambdaを試してみる

こんにちは。[NewRelicアドベントカレンダー](https://qiita.com/advent-calendar/2019/newrelic)17日目のエントリになります。

NewRelic for Lambdaは今年リリースされた機能の一つです。Lambdaの実行時間、外部サービスとの通信や、コールドスタートなどなど見えるようです。さっそく試していきましょう!

# one.newrelic.com

まずはNewRelic One([NewRelic ONEとは](https://newrelic.co.jp/blog/fs19))のトップページにある**AWS Lambda setup**から設定に進みます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100093/b479a92e-9e8b-747b-5ffe-9c3cccf35103.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.a

元記事を表示

遅いクエリを駆逐するための第一歩!Lambda と AWS CLI v2 を使って RDS for MySQL のスロークエリを Chatwork に通知してみた

#はじめに
こんにちは。
Mikatus 株式会社でインフラ担当として、AWS を中心にインフラの構築、運用保守等を担当しています。
今回は MySQL のスロークエリを Chatwork へ通知してみた件を書いてみようと思います。

当社システムでは Amazon RDS for MySQL を使用しており、スロークエリに関しては監視ツールを利用して発生状況は監視していましたが、リアルタイムに通知をすることで継続的な改善が行えるように、Chatwork へ通知してみました。
また、先日 [AWS CLI v2 プレビュー版が発表](https://aws.amazon.com/jp/blogs/developer/aws-cli-v2-installers/)されたので、せっかくなので CLI v2 を使って AWS リソースを作成してみました。

##この記事について
この記事では、AWS CLI v2 を用いて AWS Lambda の設定及び Amazon CloudWatch Logs の設定を操作した手順を記載しています。
Amazon RDS のログエクスポート機能、Ch

元記事を表示

【Node.js + Lambda】ノンエンジニア向けにツールでみんな幸せになる方法

:calendar_spiral: [i-plug Advent Calendar 2019](https://qiita.com/advent-calendar/2019/i-plug) の【17日目】の記事です:santa::tada:

私事ですが、2019/12/17本日はエンジニアとして職につき1周年になります。
それの記念っぽく、長めの記事を投下します。

# あるスプリントで…
弊社とある架空の動物部門の業務フローで毎日決まった:cat:キャットフード:cat:をgoogle詳細検索してきてその結果をpdf出力してファイリングするといったものがありました。これを効率化してほしいと依頼がありました。(フェイクです。)

つまり、手作業でやってる工程を
キーワードぽちーだけでpdfにできるノンエンジニア向けツールを作るということです。

### できるようにしたいこと
:one: :cat:キャットフードを詳細検索 + pdf出力 を(できる限り)自動でできること

# ノンエンジニア向けであるということは
まず思いついたのはコマンドラインツールでした。
Node.js

元記事を表示

OTHERカテゴリの最新記事