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

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

API Gateway + Lambda + DynamoDBでサーバーレス環境を構築する

# API Gateway + Lambda + DynamoDB = Serverless

AWSでサーバーレスを構築するアーキテクチャを考えた時に、もっとも基本的でわかりやすい構成は、API Gateway + Lambda + DynamoDB(ないしはS3)の組み合わせだと思います。

## このエントリーで触れること
– Lambda関数の作り方
– API Gatewayでのリソースの作り方
– API GatewayとLambda関数の紐づけ方
– Lambda関数でのDynamoDBのいじり方

AWS SAMには触れないです。

## Lambdaで関数を作る

Lambdaで関数を作ってデプロイするのは非常に簡単な作業です。

ランタイムはnode.jsを使います。

関数を作成する方法としては、
1. AWSコンソール上で関数を作成する
2. ローカルで関数を作成してzip化し、Lambdaにアップロードする
3. ローカルで関数を作成してzip化し、S3にアップロードした後に、Lambdaからそれを呼ぶ
4. ローカルで関数を作成してzip化し、cliでデプロ

元記事を表示

AWS SAM CLI を使って、ローカルでLambda環境を構築する

## はじめに

AWS SAM CLIを使って、Lambda環境をローカルで構築できると聞いて構築してみました。
チュートリアルでオプションになっているローカルで動作させるところをゴールとしています。
なので、開発者ガイドに書かれているようなIAMやS3は設定しません。AWS CLI もインストールしません。
ローカルのLambdaは、Docker コンテナで動作します。

また、この記事では下記の開発者ガイドを参考にしています。
各コマンドが何を行っているか詳細が書かれているので、気になる方は参照してみてください。

– [チュートリアル:Hello Worldアプリケーションのデプロイ](https://docs.aws.amazon.com/ja_jp/serverless-application-model/latest/developerguide/serverless-getting-started-hello-world.html)

この記事は、2019年11月時点で作業記録です。

## 環境
– CentOS Linux release 7.6.1810
– Do

元記事を表示

Serverless FlameworkでAPI Gatewayのバイナリメディアタイプを設定する方法

表題の件、日本語文献だと`serverless-plugin-custom-binary`を用いるパターンが散見されるが、
内容が古く、Version1系の説明が多い
現時点(2019/11)ではVersion2(それもリリースは2018/6)で、設定方法が変わっている

– Version2

“`yaml
plugins:
– serverless-plugin-custom-binary
custom:
apiGateway:
binaryMediaTypes:
– image/jpeg
“`
https://www.npmjs.com/package/serverless-plugin-custom-binary#usage

– Version1

“`yaml
plugins:
– serverless-plugin-custom-binary
custom:
apigatewayBinary:
types:
– image/jpeg
“`

元記事を表示

[AWS SAM]VSCodeでLambda関数をローカルで開発する

# 目的
AWS Lambdaはコンソール画面からエディタを利用して編集ができます。ローカルファイルをアップロードするにはzip形式でファイルをアップロードする必要がある他、そもそもブラウザが使いづらいという問題点があります。今回は`AWS Toolkit for VSCode`を利用して`AWS SAM`によるLambda開発を行ってみることを目的とします。

自らも初学者であり、他の記事で分からなかった点を補完しながら書いているため初学者向けだと思います。

# AWS SAM
`AWS(Serverless Application Model)`は`CloudFormation`をサーバーレスアプリケーション用に変形したものらしく、裏ではCloudFormationが動きます。
基本的には公式ドキュメントに従えばHello Worldまでは可能です。
https://docs.aws.amazon.com/ja_jp/serverless-application-model/latest/developerguide/serverless-sam-cli-install-mac.

元記事を表示

【覚書】SQSイベント駆動でLambdaを動かす

## やりたいこと
* S3にデータを配置し、配置されたデータのイベントをSQSにpushする
* SQSにenqueueされたイベントから、Lambdaをinvokeする
* invokeされたLambdaで、S3に配置されたファイルを処理する

## 仕様の再確認
### S3への権限付与
* S3バケットにSQSへのイベント発行権限を与える。SQSのアクセス許可にプリンシパルとして加える。

“`json
{
“Version”: “2012-10-17”,
“Id”: “arn:aws:sqs:us-west-2:101619051410:PracticeQueue/SQSDefaultPolicy”,
“Statement”: [
{
“Sid”: “Sid1234567890”,
“Effect”: “Allow”,
“Principal”: “*”,
“Action”: “SQS:SendMessage”,
“Resource”: “arn:aws:sqs:us-west-2:1234567

元記事を表示

fugaしか答えない残念なBotに8万語の辞書を持たせてインテリBotにした話

## 概要

自作した辞書APIとLINEBotを連携して、言葉の意味を教えてくれるBotを作ったので、その作り方を紹介します。

## はじめに

涼しいから寒いに変わり、面倒で後回しにしてた布団の衣替えしました。秋ですね。

秋といえば、○○の秋といって何かを始める 季節でもあります。私の場合はリベンジの秋です。以前作成した、[fugaしか答えない残念Bot](https://qiita.com/zgw426/items/a5196ab7f26b785479ec)に。辞書を持たせてなんでも物知りインテリBotに改造します!
(Googleあれば物知りBotいらないとか、そーいうことは聞こえない)

## できたもの

知りたい言葉をメッセージすると意味を教えてくれるLINE Botになりました。レスポンスも上々です。

元記事を表示

aws-lambda-go/cmd/build-lambda-zipをgo get時のエラー

何をしていたか
————-

* https://qiita.com/shunp/items/52ee20278e02e29ef3e8

此方の記事を参考に、sam cliにてgolang, API gateway を試用していたところ、エラーに遭遇しました。

環境
——

* windows10 Pro

“`
>sam –version
SAM CLI, version 0.31.0
“`

詳細
——-

* https://qiita.com/shunp/items/52ee20278e02e29ef3e8#%E3%83%87%E3%83%97%E3%83%AD%E3%82%A4%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%88%E5%AE%9F%E8%A1%8C

ローカル実行は問題無し。API gatewayからRequestしたところ、502エラーが出ました。

[もろもろの記事][1]を見ると、`build-lambda-zip` をbuild時に実行し、zipファイルをS3へuploadすればよさそうです

元記事を表示

ぷらそにかの動画を毎日宣伝するbotを作った?

## 動機

1. Pythonを書いたことない
2. Pythonの勉強がしたい
3. Youtubeチャンネル「ぷらそにか」にハマっている
4. 友達にオススメしている
5. タイトルへ進む

## AWS

毎朝動かしたかったので、LambdaのトリガーにCloudWatch Eventsを設定しました。
スクリーンショット 2019-11-08 17.26.22.png
↑日本時間で朝9時

## とりあえず全文

“`python:
#!/usr/bin/python

import os
import sys

sys.path.append(os.path.join(os.path.dirname(__file__), “packages”))
from oauth2client.tools im

元記事を表示

AWS Lambda、FlaskとOpenCVの環境構築

# はじめに
– AWS LambdaでのOpenCVの環境構築は、大変です。具体的には、デプロイ環境の構築が大変です。
– デプロイ環境は、`AWSCLI`、`Serverless Framework`等色々な物が必要です。
– 今回も、以前作成した顔認識アプリをLambdaへ移植します。ソースコードは、同一です。上記のデプロイに関する設定ファイルが異なる程度です。
– ソース一式は [ここ](https://github.com/maedamikio/public/tree/master/flask_opencv_lambda) です。

# 概要
– Mac
– 顔認識アプリ
– Flask
– OpenCV
– Python
– デプロイツール等
– AWSCLI
– Docker
– Homebrew
– Node.js
– Serverless Framework
– AWS
– API Gateway
– Clo

元記事を表示

togglからslackにレポートを通知するwith Serverless Framework

## はじめに
こんにちは、早稲田大学創造理工学部総合機械工学化2年、現在休学中の渡辺です。
この度、インターン先でのタスクとして、
時間管理ツールTogglからレポートを取得してきてslackで共有する作業を自動化して欲しいと頼まれたので、
Serverless FrameworkとAWS Lambdaを使って作ったそんな感じのものをご紹介します。

## 仕様
– python, AWS Lambda, Serverless Frameworkを使用する
– CloudWatch Eventsで定期的に発火(今回は毎週水曜日朝10時)させる
– togglから特定のプロジェクトの過去一週間の詳細(detail)レポートを取得する
– 取得したレポートをいい感じに整形してslackに投げる

## 参考
1. [Toggl Reports API v2](https://github.com/toggl/toggl_api_docs/blob/master/reports.md) : toggl report apiの仕様書です。
2. [Serverless Framework

元記事を表示

Developers.IO 2019 Tokyoに参加してみた【レポート】

# Developers.IO 2019 Tokyoに初参戦
表題のとおり、[Developers.IO 2019 Tokyo](https://eventregist.com/e/191004-developers-io-2019)に参加して参りました!

>今年で5回目の開催を迎えるクラスメソッド主催のカンファレンスイベント Developers.IO 2019

【11/1(金)東京】国内最大規模の技術フェス!Developers.IO 2019 東京開催!AWS、機械学習、サーバーレス、SaaSからマネジメントまで60を越えるセッション数!

とありますが恥ずかしながら今まで知らずにおりました。。
普段からブログには散々お世話になっておりますが、色々と勉強になったのでよかったです!
参加したセッションは以下です。

– Developers.IO CAFEのこれまでとこれから 〜顧客体験へのフォーカスから考える技術選択〜(横田聡)
– ハイブリッド/マルチVPC環境を構成するAWSネットワークの完全理解(菊池修治)
– サーバーレスの基本とCI/CD構築 & 運用 〜システムは動いてからが本番だ〜(藤井元貴)
– Amazon Cult

元記事を表示

初学者のためのAWS入門(6) – Lambdaでサーバレス実行してみる

ここでは、AWSを基礎から学ぶ人向けに必要な情報をまとめていきます。
#### 初学者のためのAWS入門シリーズ
– [初学者のためのAWS入門(1)] (https://qiita.com/mshinoda88/items/e7557227f7060b52d8ae)
– [初学者のためのAWS入門(2) – CloudFormation入門1] (https://qiita.com/mshinoda88/items/c5b238212c2de850efdd)
– [初学者のためのAWS入門(3) – CloudFormation入門2]
(https://qiita.com/mshinoda88/items/65e7e145c7ec943af403)
– [初学者のためのAWS入門(4) – S3でBasic認証を設定してリポジトリを公開](https://qiita.com/mshinoda88/items/dfb1ee355fbcb08e47e5)
– [初学者のためのAWS入門(5) – S3+Athena+QuickSightでデータ分析結果の可視化](https://

元記事を表示

lambdaにTypeScriptをデプロイする手順(zip)

# はじめに
TypeScriptをlambdaにデプロイする方はServerless FreamworkやSAMなどがあります。
しかし、installや設定などの事前準備が必要で、手軽ではありません。
そこで今回は簡単にデプロイして動作確認するために、zip化してデプロイする手順を記載していきます。

## 事前準備
### typescriptのインストール

`npm install -g typescript`

### AWS CLI
[AWS CLI のインストール](https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-chap-install.html)

### lambda関数の作成
あらかじめ、AWSコンソールやcliでlambda関数を作成しておきます。

スクリーンショット 2019-11-06 23.51.11.pngAWS Lambdaのアプリケーション作成を使ってCI/CDパイプラインを一気に構築

Source-Build-Deploy

# AWS Lambdaのアプリケーション作成とは

AWS Lambdaのアプリケーション作成機能を利用してLambda関数を作成すると、Lambda関数自体の他に

– Lambda関数のソースコード等を管理するGitリポジトリとしてCodeCommit

– CodeCommitのmasterブランチの更新を契機にLambda関数へのデプロイを行うCodePipeline

等々、CI/CDパイプライン実現のためのAWSリソースが同時に作成されます。

Lambda関数自体は手軽に作ったものの、次のステップとしてCI/CD環境を構築するのは腰が重く、ソースの更新はマネジメントコンソール上で実施している・・・といったケースを改善するアプローチとして、このようなCI/CD

元記事を表示

【AWS】CodePipelineから呼び出したLambdaがずっと進行中になっている問題と対応

## 問題

**ずっとインジケータがぐるぐるしている**

スクリーンショット 2019-11-08 23.47.25.png
(10分立ってもそのままで)もう気が狂う!!!

S3へのデプロイ完了後にCloudFrontのキャッシュを消すLambdaを呼びたいなーと思ったときに躓いたのでまとめ。

## 原因
**`codepipeline:PutJobSuccessResult(※)`を返却しないため**
※ 失敗の場合は`codepipeline:PutJobFailedResult`

### PutJobSuccessResultって?
> PutJobSuccessResult
> ジョブワーカーによってパイプラインに返されたジョブの成功をレポートするために必要です。

元記事を表示

Amazon Comprehendが日本語対応したのでAlexaスキルで感情分析してみた

# 概要
2019年11月7日にAWSの自然言語処理サービスである**Amazon Comprehend**が日本語に対応したので、早速Alexaスキルで感情分析を試してみました。

スキルの作成には[ASK CLI](https://developer.amazon.com/ja/docs/smapi/ask-cli-command-reference.html)を使い、言語はPython3を使っているのでその辺の知識があると分かりやすいかと思います。

# やった事
Amazon Comprehendの感情分析機能である**Sentiment**を使ってユーザーからの入力を感情分析し、その結果によってレスポンスが変わるAlexaスキルの作成

# 東京リージョンではまだ使えない
2019年11月8日時点でAmazon Comprehendはまだ東京リージョンに対応していないので、ASK CLIでスキル作成する前に `aws configure` でリージョンを `us-east-1` などに変更してあげる必要があります。

#### 現在対応しているリージョン一覧 (2019年1

元記事を表示

質問です/LambdaとTwitterApiを使ってBotを作ったのものの、30分毎のイベント発火がうまく作動しない

初心者です。

LambdaとTwitterApiを使って、Twitterにステイーブジョブスの名言を、30分毎にツイートする自動BOTと作成しました。
![001.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29856/5de884a5-e6ff-648b-fcf3-3c15dfe830e6.jpeg)

動作して、ちゃんとツイートもしたのですが、時間の間隔が常に30分毎ではなく、1時間間隔の時や、時には2時間おきの場合もあります。
![002.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29856/bacff4d1-6dcd-d27b-f44f-cc0544141102.jpeg)

Lamda側では、30分毎にイベントが発火しているようなのですが、何が原因かご教示いただきたいです。
![003.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazona

元記事を表示

Lambdaのログをいい感じにS3に保存し続ける方法

CloudWatch Logsに出力されたLambdaのログをS3に保管する方法です。

CloudWatch Logsのサブスクリプションという機能でログをKinesis Data Firehoseに送信します。
そのままS3に出力すると複数のログが1行に並ぶ形になってしまいますが、Kinesis Data Firehoseのデータ変換機能で改行を加えることで解決します。

こんな感じです。

![名称未設定ファイル.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/ebe981c7-0dde-83eb-cd68-580bed8f0695.png)

# S3バケットの作成

ログを出力するバケットを作成します。今回は`log-backup-xxxxx`とします。

# データ変換用Lambdaの作成

データ変換用LambdaはAWSが設計図を用意してくれているので簡単に作成できます。
マネジメントコンソールでLambda関数を作成します。

| 項目 | 選択 | 説明 |
|—|–

元記事を表示

【DynamoDB】LastEvaluatedKeyを使ってscanリクエストで全件取得

## はじめに

RDBMSを使っていると、allとかで全件取得出来て特に気にする必要がないのですが、DynamoDBでは1MBまでのデータ量の件数のみしか取得が出来ないので、知っていないとあれ全件取得出来ていない…みたいなことになり私のように痛い目にあってしまうので、自分への戒めの意味も込めて残しておきます。

情報ソース:[DynamoDB でのスキャンの使用](https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/Scan.html)

## 環境

* Nodejs

## 実装

“`js
const AWS = require(‘aws-sdk’);
const DynamoDB = new AWS.DynamoDB.DocumentClient({region: “ap-northeast-1”});
const tableName = ‘hoges’;

module.exports.hello = async (event, context) => {
try {

元記事を表示

AWS Lambdaでのコールドスタートのメモリの罠と、Invoke Lambdaでのタイムアウトの罠

# 問題の経緯
API Gateway経由、ALB経由でAPI化しているLambdaを構築していた。
ALB経由Lambdaの中には、VPCに含んでいるものもあった。
そのLambdaからは別のLambdaもいくつかInvokeしていた。
実装を一通り終わってテストしていると、どうもレスポンスが早いときと、遅いとき、酷いとタイムアウト(API Gatewayは30秒制約あるし。。)することがあった。

# 調査した結果
調査してみると、どうにもInvokeしている部分が怪しかった。
やっぱりVPC Lambdaだとコールドスタートのせいで遅いのかなぁと思いながらログから調査していった。
Invoke自体は実行されているが、何故かInvoke先のLambdaにログが来ていない。。。。
もしかして、コールドスタートから起き上がる前にタイムアウトしてる??と思い、Lambda関連のドキュメントを漁りながら、やっぱりLambdaを定期実行して、コールドスタート回避するしかないのかなぁと思っていると下記の記事を発見。。。。
[VPC Lambdaのコールドスタートにお悩みの方へ捧ぐコールドスター

元記事を表示

OTHERカテゴリの最新記事