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

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

AWS LambdaでのLine Bot作成手順

# 概要
AWS LambdaでのLineBot作成手順をまとめました。line-bot-sdk-pythonを使わずに1から書いてみました。
ほぼほぼ「参考」の記事を使っています。
## webhokとは
– [Webhookとは?](https://qiita.com/soarflat/items/ed970f6dc59b2ab76169)
– [Webhookって何?を子どもでもわかるように描いてみた](https://kintone-blog.cybozu.co.jp/developer/000283.html#:~:text=Webhook%E3%81%A8%E3%81%AF%EF%BC%88%E7%95%A5%EF%BC%89%E3%80%81,%E3%81%A7%E9%80%9A%E7%9F%A5%E3%81%99%E3%82%8B%E4%BB%95%E7%B5%84%E3%81%BF%E3%81%A7%E3%81%99%E3%80%82)

# 開発の手順紹介
## 技術

– Python
– AWS Lambda

## 流れ
1. Lmabda関数の作成
2. L

元記事を表示

「AlexaスキルとSlackで買いものを便利に」をやってみた

## はじめに
はじめまして。oka-shiです。

Alexaに買いたいものを伝えるとSlackに通知される「スラックスキル」を作成してみました。元ネタは、下記のよーぐると様のブログとなります。
 [AlexaスキルとAWS Lambda, Slackを使って我が家の買いもの管理を便利にした話](https://yoghurt1131.hatenablog.com/entry/2018/12/26/072907)

Alexa初心者でも簡単に実装できたので、参考にしたサイト、Alexaスキル設定、Lambda→Slackへの連携 などをまとめてみました。

### 対象読者
* Alexaスキルを作ってみたい方
* Lambda(Node.js 10.x版)→Slackへの連携をやりたい方

### 説明すること
* スラックスキルの概要
* Alexaスキル作成の前にやること
* Alexaスキル作成のポイント
* Lambda(Node.js 10.x版)→Slackへの連携設定
* Alexa初心者がつまずいたトコ

### 説明しないこと
* スラックスキルの詳細
* Ale

元記事を表示

AWS LambdaをTypescript+Webpackでデプロイする

Lambda関数をTypescriptで記述したくなった。
さらに、Webpackでバンドルした後にLambdaにアップロードすることを試みる。

## 作業手順

1. Typescript環境構築
2. Lambda関数作成
3. Webpack準備

## 1. Typescript環境構築

package.jsonを用意する。
Typescriptに必要なパッケージやWebpackでtsファイルをビルドするためのパッケージ、Lambda側で型定義するためのパッケージをインストールしておく。

“`json:package.json
{
“scripts”: {
“build”: “webpack –mode production –config webpack.config.ts”
},
“devDependencies”: {
“@types/aws-lambda”: “^8.10.62”,
“@types/webpack”: “^4.41.22”,
“ts-loader”: “^8.0.4”,
“ts-node”:

元記事を表示

pythonのlambdaでslack通知をするサンプル

## 設定
– ハンドラは`ファイル名.関数名`で指定する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/293481/d4faa63e-eabc-ee7e-4c53-c949282f0009.png)

### SlackでImcomingWebHookを追加する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/293481/11278097-a40e-5f5c-c0ba-743aafd91e29.png)

## コード
– ググってでてくるrequestsというモジュールは、urllibの中に吸収されたみたい
– jsonをslackのWEBHOOK用のアドレスにPOSTで投げる
– `def lambda_handler(event, context):`の`event`はLambda実行時に関数へ引き渡されるJSONデータ
– 実行元のリソースによってもちろん中身は違うが

元記事を表示

Serverless FrameworkでLINE Botを作ってみた!

# Serverless Frameworkとは
![https___camo.githubusercontent.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533652/d1dec5fc-f941-c194-85f1-3d2c04dd7060.jpeg)

Serverless Framework はFaaS(Function as a Service)やクラウドのDB,Storageでアプリケーションを構成するためのフレームワークです。AWS以外にもGCP, Azureにも対応しています。
導入方法などは、こちらの記事を参考にしてください。

# 注意事項
・コマンドはMacを想定しているのでWindowsの方は

元記事を表示

ぼく の かんがえた さいきょうの請求アラート設定!

# 事の始まり
今回2回目の高額請求です!
前回はRDSの起動しっぱなしで起きました。
![スクリーンショット 2020-10-30 1.32.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/516091/fd6f187a-338a-5c1c-2d15-827607c95e5f.png)

Billingの設定で請求アラートを設定すれば、よいと学んだので、その設定をしました。

しかし…

SlackやLINE, 電話で事足りる世の中になり、メールを見なくなる毎日。

そして、今回事件が起きました…。
![スクリーンショット 2020-10-30 1.01.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/516091/aabbdd36-5db0-b0e3-48fe-52d335810a0d.png)

たすけてー AWSの偉いひとー。

メール通知だけだと、ダメだと思い知ったので、一番良い請求アラートの

元記事を表示

アレクサスキルを開発したときのリアルタイムメモ

赤外線
http://www.optdevice.jp/ir/

obniz IR LED
https://obniz.com/sdk/parts/InfraredLED/README.md

赤外線リモコンのフォーマット
https://os.mbed.com/users/shintamainjp/notebook/remote_ir_ja/
http://elm-chan.org/docs/ir_format.html

アレクサスキル
https://medium.com/crowdbotics/how-to-build-a-custom-amazon-alexa-skill-step-by-step-my-favorite-chess-player-dcc0edae53fb

オペアンプ
https://akizukidenshi.com/catalog/g/gI-09406/

ad
https://developer.amazon.com/en-US/docs/alexa/custom-skills/understanding-custom-skills.html
smar

元記事を表示

たった1人でEC2&RDSのバックエンドをLambda&DynamoDBに移行した話

先日お仕事でスマホアプリのバックエンドを移行する機会をいただきました。
システムのフルリニューアルは初めての経験だったので色々と学びが多くありました。
せっかくなので知識を共有したいと思います。

# サマリー
## 概要
こんな感じのプロジェクトでした。

– 開発期間 9ヶ月
– 体制 1人開発
– API数 約100
– バッチ数 約10
– その他の移行対象(DBデータ,管理コンソールetc)

## 移行の目的
バックエンドの移行の主な目的は以下でした。

– 内製化によって開発速度を上げる
– 内製化するために社内のスキルセットに合う言語・アーキテクチャにする
– AWSコストの削減

## 移行前後の違い
|| 移行前 | 移行後 |
|—|—|—|
|実行環境|EC2|Lambda & Api Gateway|
|フレームワーク|Rails|なし|
|メインDB|RDS(PostgreSQL)|DynamoDB|
|バッチの仕組み|Rails(SideKiq)|AWS Batch/Lambda|

# 実作業前の準備
## 現状把握
私は移行対象の元のシス

元記事を表示

Lambda LayersをGolangで実装してみる

# はじめに
Lambda の共通処理と言えば Lambda Layers である。

Golang には共通モジュールの扱い方が他にもいくつかある(Git Submodulesを使うとか、ローカルのGitリポジトリを使う([過去の記事参照](https://qiita.com/neruneruo/items/fdbb9bbe02861223c215))とか)が、今回は、Lambda Layers を使った共通化の使用感を確認して考察してみよう。

# Go Plugin パッケージを使う
Lambda Layers を Golang で使う場合、Plugin パッケージを使用する。
まずは、このモジュールについてちゃんと知っておこう。

パッケージの説明は[公式](https://golang.org/pkg/plugin/)を確認。

ログ出力をする mylogger なプラグインを作ってみることにしよう。

“`golang:mylogger.go
package main

import (
“log”
)

func OutputLog(str string) {
lo

元記事を表示

無料版のsentryでslackに通知を送る(lambda利用)

# この記事について
slackに通知させるには、sentryのintegrationとして用意があるのですが、利用できるのが有料版のみとなっています。

個人でのプロジェクトでの利用で、有料化するつもりはなく、無料版でもできるようにしてみました。
通知の部分のみにフォーカスしているので、sentryの設定などは、説明を省いております。

# 対象
– sentryの無料版を利用していて、slackに通知したい
– awsのアカウントを持っている

# 方法について
sentryのwebhookを利用します。
送信先にlambdaのURIを指定して、lamdaからslackのwebhookにリクエストします。

# 手順

– slackのincoming webhookを設定して、リクエスト先を用意します。(いろいろ記事があるので省略)
– lambdaを作成し、環境変数`SLACK_INCOMING_WEBHOOK_URL `に、slackのURIを設定する
– lambda処理を下記をコピペして保存・デプロイ(サンプルはruby)

“`ruby
require ‘json’

元記事を表示

CodePipelineによるlambdaの自動リリースのメモ(未来の自分のコピペ用)

# はじめに
自分用のメモとして作りました
python 3.8 の hello world を返す lambda を2つリリースします

# 手順
1. [githubのリポジトリ](https://github.com/lnsw/sample-lambda-release)をフォークする
2. AWSのマネジメントコンソールでパイプラインを作る
3. lambdaがリリースされるのを確認する

# 注意
CodePipelineは従量制の課金です!
無料枠でも100回を越えると課金されます

# 前提
AWSのアカウントがあること
githubのアカウントがあること

# 詳細
## 1. githubのリポジトリをフォークする
githubにログインして、赤線の所をクリックするとforkできます
https://github.com/lnsw/sample-lambda-release
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128663/4494d19f-29c7-ee5a

元記事を表示

AWSのVPC Lambdaからエンドポイント経由でSQSにアクセスする際の注意

# 結論
AWSでLambdaをVPCに配置して、エンドポイント経由でboto3 SQSを使用する際にはendpoint_urlオプションが必要。

“`python
import boto3
sqs = boto3.client(“sqs”, endpoint_url=”https://sqs.ap-northeast-1.amazonaws.com”)
sqs.send_message(…)
“`

このオプションを付けないと、接続できなくてタイムアウトします。

# 詳細
AWSでLambaをVPCに配置してプライベート接続でSQSを使用する際にめちゃはまったので注意点をメモします。
詳細は以下のサイトが詳しいのでそちらを参照して下さい。私が試した時はLambda上でboto3を使用した際にのみ現象が発生しました。

私の発生条件ではLambdaのboto3はバージョン1.14.48でした。また、EC2を立てて試したバージョンは1.16.8でしたが、こちらでも同様の現象が発生しました。

1. AWS CLI等でSQS VPC Endpointを利用するときの注意点 —

元記事を表示

Splunkの検証環境をAWS CloudFormationで簡単構築

# 1.All in Oneの環境をAWSで簡単に構築したい
新しいバージョンがリリースされたり、バージョンによる動作の際を確認する際に、なにかと検証環境を用意するシーンが多かった日々でした。
スタンドアローンの環境を構築する際にはCloudFormationでテンプレートを利用していました。
しかし、Splunkのダウンロードリンクを毎回取得し、テンプレートを編集しなければいけないのが煩わしかったのです…
前回の記事では、ダウンロードリンクを取得するLambda関数を作成致しました。
[Splunkのダウンロードリンクをスクレイピングで取得](https://qiita.com/minaminosima/items/1f4fa5475e613265ff95)
本記事ではCFn上でへ上記の関数を実行するテンプレートを作成しました。

# 2.使用する機能や技術
– AWS CloudFormation

他にもいろいろ使ってはいるのですが、本記事ではCFnのみ掲載いたします。
API GatewayやLambdaも利用しているのですが、前回投稿分と内容が重複するので、割愛いたします

元記事を表示

AWSでSlackへのPOST先を限定する仕組みを構築する話(成功ルート)

# 0. はじめに

今年の7月にAWSアソシをギリで取得した初心者が、AWSでそれっぽいことをする奮闘記である。の続き。
https://qiita.com/haman/items/3ab610dd4f3c00584dd0

一応、成功ルート。

# 1. やりたいこと
これはおさらい。
情報流出を防ぐために、みんなで作るLambdaのPOST先をSlackだけに**システム的に絞りたい**。

![slackAWSPOSTAPI-1-Page-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/384185/7979e506-f16f-4fca-f0bf-42132fa90a6b.png)

# 2. 失敗ルートを活かして
上の図のsomething new!のところは、既存のものではなかなか実現できなそう。
であれば、自分たちで作れば良い。

言葉にすると、
みんなで作成するLambdaとAPI-GW(UserLambdaとでも呼ぼう)の後ろに、
検疫所の役割を担うLambdaとAPI-GW(P

元記事を表示

AWS Lambda Layers作成から紐付けまでさらっと解説

## はじめに
Pythonを扱う前提の記事です。

## Layers(レイヤー)とは
ガイドによると
>レイヤーは、ライブラリ、カスタムランタイム、またはその他の依存関係を含む ZIP アーカイブです。レイヤーを使用することで、関数のライブラリを使用することができます。

ライブラリのような共通で使用するモジュールをLayerにすることで、デプロイパッケージにライブラリを含める必要がなくなります。
つまり、Lambdaでサードパーティ製のライブラリやモジュールを使用する際に、Layerに格納して各Lambda関数から呼び出して使用するというような使い方ができます。

## 注記
・Lambdaで一度に利用できるLayerは5つまで
・解凍後のデプロイパッケージのサイズ制限 250 MB

## ディレクトリ構成
Lambda実行環境のパスは /opt ディレクトリとなるので、
Layerのディレクトリ構成としては /opt/python/Layer となります。

レイヤー自体のパッケージ構成はこんな感じ。

“`
python
├ layer.py (共通処理などコードも入れら

元記事を表示

AWS AmplifyでPythonのFunctionをCI/CDするとbuildに失敗する問題の対処方法

題名の通り、AWS AmplifyでPythonのFunctionをCI/CDするとbuildに失敗する問題に遭遇しました。

## 結論(対処方法)

ビルド設定のamplify.ymlに以下を追記することでbuildを通すことができました。

“`yml
version: 1
backend:
phases:
build:
commands:
# ここから追記 >>>
– export BASE_PATH=$(pwd)
– yum install -y gcc openssl-devel bzip2-devel libffi-devel python3.8-pip
– cd /opt && wget https://www.python.org/ftp/python/3.8.2/Python-3.8.2.tgz
– cd /opt && tar xzf Python-3.8.2.tgz
– cd /opt/Python-3.8.2 && ./configure

元記事を表示

IAMのイベントを検知して処理する(EventBridge→SNS→Lambda)

少し前に以下の記事を書きました
https://qiita.com/kaikusakari/items/06b47a45de30107a2ab1

単独アカウントでIAMのイベントを取得する場合のケースでしたが、クロスアカウント環境下でIAMのイベントを集約して検知したい場合の手段になります。

前の記事に記載した通り、IAMのイベントは「us-east-1」リージョンにEventBridgeを作らないと取得できません。(他にもConfigを使うなど取得する手段はありますが、EventBridgeがお勧めです)

## 想定環境
・「ap-northeast-1」を主に使っている
・クロスアカウント
・1つのアカウントにログやイベントを集約して監視専用のアカウントとする

## 準備するもの
**イベント送信先**
ログ集約アカウント
・「ap-northeast-1」でLambdaを作り、イベントを検知してチャットアプリに通知する
・「us-east-1」から「ap-northeast-1」のLambdaをCallするためのSNSトピックを作成する
・「us-east-1」で各アカウ

元記事を表示

これでスポットリクエストのキャンセルし忘れとさらばだ!

# 概要

 開発環境にEC2のスポットインスタンスを利用することはよくあると思います。その中でも「**永続的リクエスト**」を使っているとついついインスタンスだけを「終了」し、スポットリクエストをキャンセルし忘れることありませんか?リクエスト有効期間内であれば、自動的に同じタイプのインスタンスがゾンビのごとくのように再作成され、無駄な課金が発生します。
 インスタンスの削除時にスポットリクエストからキャンセルするように運用手順で決めていてもついつい忘れがちなので、自動化する方法を紹介します。

前提条件のまとめ

– スポットインスタンスを使用している
– 永続的リクエストである
– リクエスト有効期限内である

# 構成

EventBridgeを使用することで、インスタンス終了イベント時に指定したLambdaを実行し、スポットリクエストをキャンセルします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/30522/dda5a741-2ba2-e825-3557-160991475

元記事を表示

AWS lambda でgoogle spread sheetを操作したくなったのでやってみた [その1]

## 概要

表題そのままなのですが、google spread sheet って、なんかGAS(Google Apps Script)で操作する。
そんな固定観念があったんですが、今回はAWS lambda (Python)で操作したくなったのでやってみました。

別にGCPだけでも完結しますが、、、`AWS慣れているので使いたかった。それだけです(笑)`

## 構成

構成はシンプルです。

![Untitled (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344266/ab4a725f-616c-31c6-c3ea-62d904963c6b.png)

GCP側で作成した認証情報は、暗号化してAWS Secrets Managerに保持します。
lambdaのコードに認証key直書きとかはやめたほうが吉…

## 準備

### GCP側の認証を作成する
AWSでいうところのIAMのkeyを作成する感じです。

まずは[GCPのコンソール](https://console.cl

元記事を表示

AWS lambdaでPOST+JSONをテストイベント、Webアプリからのイベントに対応する

###やりたい事
lambdaにPost+JSONが来た時に、bodyからデータを取り出し変数に格納したいが、
テストイベントとWebアプリからのイベントで別のコードに分けていたので、同じにしたい

###テストイベント用のコード
まずテストイベントでは以下のようなJsonを使っていた

“`
{
“body”: {“name”:”test”,”score”:0}
}
“`

受け取りの処理は以下のように取得できる

“`
exports.handler = async (event, context) => {
let bodyMessage = event.body;

let name = bodyMessage.name;
let score = bodyMessage.score;
}
“`

しかし、Webアプリケーション側でbodyにJSONを付与した場合はJSON.Parseをしないとデータが取得できず、nameとscoreの変数に格納される値は空欄となってしまっていた

##Webアプリ用のコード

Jsonの形式は同じなの

元記事を表示

OTHERカテゴリの最新記事