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

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

AWS Lambda Python3.8 から Slack へメッセージを送る設定を terraform で作成する

【個人備忘録】lambdaからslackへメッセージを送るシンプル設定

# 概要
* Slack API へのメッセージ送信に関して
* [slackweb ライブラリ](https://pypi.org/project/slackweb) は使わない (ローカル環境にライブラリインストールしてあれやこれやがめんどくさい)。
* Python標準ライブラリの urllib を使う。
* Slack API へ渡す情報は、Lambdaの環境変数に設定する。

* Terraform での Lambda 作成に関して
* aws provider の バージョンは 2.48.0
* Lambda関数コード(pythonソースコード)は、**terraform archive provider** の data ソース **archive_file** を使って zip にしてから、deployする。

* 送信イメージ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14

元記事を表示

AWS の API Gateway (HTTP API) 経由で Lambda に繋いで POST データを処理するメモ

取り急ぎ忘れないようにめもめも。

* POSTパラメータは `event[‘body’]` に入っている。
* API Gateway の設定で `isBase64Encoded` が有効であると、Base64エンコードされる

APIに投げるときにJSONエンコードしたものを渡すと、Base64デコード後にJSONが取れる。
その際は、リクエストクエリのパースではなく、JSONのパース処理を行う。

“`python
import json
import base64
import urllib.parse

def lambda_handler(event, context):

# POSTパラメータがBASE64でエンコードされているのでデコードする
decoded_body = base64.b64decode(event[‘body’]).decode()
# POSTパラメータをdict型に変換
post_params = urllib.parse.parse_qs(decoded_body)

result = {}

元記事を表示

dataframeでの関数適用のサンプルです。

#テストデータ
“`
import pandas as pd

df=pd.DataFrame({“A”:[1,2,3],”B”:[10,20,30]})
print(df.to_markdown())
“`
| | A | B |
|—:|—-:|—-:|
| 0 | 1 | 10 |
| 1 | 2 | 20 |
| 2 | 3 | 30 |

#サンプルソース

“`
def fnc(dt):
return dt[“A”]+dt[“B”]

df[“C”]=df.apply(lambda dt : fnc(dt) ,axis=1 )
print(df.to_markdown())
“`

# 結果

| | A | B | C |
|—:|—-:|—-:|—-:|
| 0 | 1 | 10 | 11 |
| 1 | 2 | 20 | 22 |
| 2 | 3 | 30 | 33 |

元記事を表示

Python (Boto3) @ Lambda で CloudWatch Logs の特定のログストリームにログを出力する

# ■ はじめに

Python (Boto3) @ [Lambda](https://aws.amazon.com/jp/lambda/) から [CloudWatch Logs](https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) の特定のログストリームにログを出力したかったので、やってみました。

# ■ コード

コードは、以下。

“`python
def put_logs(client, group_name, stream_name_prefix, message):
try:
exist_log_stream = True
log_event = {
‘timestamp’: int(time.time()) * 1000,
‘message’: message
}
sequence_token = None

元記事を表示

【AWS】S3 / LambdaでSSIっぽいことをやる

![awsedrftgy_TP_V4.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/161498/3afbbb62-0a6c-5cc5-eed3-7ec05f5efa9c.jpeg)

# TL;DR
SSI(include virtual)が記述されたHTMLを、S3の特定バケットに格納しLambdaでインクルード内のソースを結合した上で別のバケットに格納する。

# やりたかったこと
S3は静的サイトホスティングサービスのため、サーバーサイド側で動的に処理をするということが原則できません。
もちろんその後キャッシュする先であるCDN側(CloudFront)もできません。

その場合、今であればローカル開発環境を構築しローカル上では別々のファイルにしておき、コンパイルする際に結合する方法がスタンダードだと思いますが、元々SSIが使われていた既存サイトをS3+CloudFrontへ移管する場合などを含め残念ながらすべての案件でそのフローが導入できるわけでもありません。

なので、元々SSIが使

元記事を表示

【Serverless Framework 入門】 API Gateway + Lambda + DynamoDB サンプル

# はじめに
[こちらの記事](https://qiita.com/sugurutakahashi12345/items/afd14d2939a4a26fefa4)の続編になります。

前回は Serverless Framework を使って hello 関数を Lambda にデプロイしたところまで行いました。
(Lambda をただデプロイできれば前編の記事は見なくても全然大丈夫です。)

今回はそれを API Gateway 経由で API として公開し、さらに DynamoDB との疎通にも試みるものになります。

以下の Serverless Framework の[公式サンプル]([https://www.serverless.com/examples/])を参考にしました。

– [AWS | REST API Example](https://www.serverless.com/examples/aws-node-rest-api)
– [AWS | REST API With DynamoDB](https://www.serverless.com/example

元記事を表示

Pythonでgzipを直接S3へPUTする

### やりたいこと

* Oracleから取得したデータのCSV作成
* CSVをgzip形式に圧縮
* ファイルを直接S3へ保存

### サンプルコード

“`lambda_function.py
import csv
import gzip
import io
import os
import boto3
import cx_Oracle

DB_HOST = os.environ.get(‘DB_HOST’)
DB_PORT = os.environ.get(‘DB_PORT’)
DB_USER = os.environ.get(‘DB_USER’)
DB_PASS = os.environ.get(‘DB_PASS’)
DB_SID = os.environ.get(‘DB_SID’)

AWS_S3_BUCKET_NAME = ‘hoge’

s3 = boto3.client(‘s3’)

def lambda_handler(event, context):

file_name = ‘hoge.csv.gz’
# oracle接続
con

元記事を表示

Lambda から Amazon Timestream を呼び出す

## はじめに
Amazon Timestream が 10 月に一般提供されました。Timestream の名の通り、時系列のデータを扱うデーターベースです。データを管理するときにありがちな、直近データはすぐに参照できるようにしておきたいといったことや、時間のたったデータは安いストレージに保存しておいて必要なときに取り出そう、といった仕組みがあらかじめ備わっていて魅力的です。
今回は Lambda から受け取ったデータを、この Amazon Timestream に保存してみたいと思います。
執筆時点で Timestream を利用できるリージョンは、バージニア北部、オハイオ、オレゴン、アイルランドです。ここであげたいずれかのリージョンで以下の操作を行ってください。

## Timestream データベースの準備

* まず、データベースを作成します。
* Timestream コンソールで Create database を選択します。
* Database configuration 欄の configuration は “`Standard databas

元記事を表示

Lambdaで”An error occurred (AccessDenied) when calling the GetObject operation: Access Denied”と言われてハマった

#概要
LambdaにてS3の特定オブジェクトをダウンロードする操作をPython(boto3)で実行したが、Access Deniedと言われて実行できない。
実行ロールにAmazonS3FullAccessを付与するも同様の結果。

#実行内容
“`Python
import json
import boto3

def lambda_handler(event, context):

s3 = boto3.resource(‘s3’)
bucket = s3.Bucket(‘my-hoge-hoge-bucket’)
bucket.download_file(‘test.txt’, ‘fuga.txt’)

“`

#Lambdaで表示されるエラー
“`
{
“errorMessage”: “An error occurred (AccessDenied) when calling the GetObject operation: Access Denied”,
“errorType”: “ClientError”,
“stack

元記事を表示

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

元記事を表示

OTHERカテゴリの最新記事