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

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

VPC内のLambdaからはSES向けのVPCエンドポイントを使用してもBoto3ではメールを送信できない

# 初めに

本記事はタイトルについて検証を行った詳細を記載します

書くきっかけですが、最近久しぶりにVPCと戯れることになりました。
VPCを使った構成ですんなり行った思い出はなく、実際に沼にハマりました。

ポイントをまとめましたので、どなたかのお役にたてば嬉しいです

結論だけ知りたい方は最後まで飛ばしてください

# 検証を行うことになった背景

**VPC内のLambdaからメールを送る**
ただこちらを行いたいだけでした

アーキテクチャとしては以下となります
RDS→Lambda(VPC内)→SES→ユーザー

あまり見ないアーキテクチャですね
RDS Proxyがリリースされてから、LambdaとRDSの組み合わせは使用する頻度が多くなりました
DynamoDBだけでは辛い部分もあるので、今後こちらのアーキテクチャは増えるようになるのではないでしょうか

実装するに当たって、どのようにVPCから外へ出るか調べていました
すると、2020年5月に[SES向けのVPCエンドポイント](https://aws.amazon.com/jp/blogs/news/new-ama

元記事を表示

AWS Lambdaでpythonプログラムの定期実行

#はじめに
AWSのlambdaを使用して、スケジュール実行のプログラムを設置しました。
lambdaの基本的なことで意外とつまったので残しておきます。
AWSのアカウントは作成しているものとしています。

MAC OS X
python 3.6

# 対象
・lambdaを触ったことのない方
・とりあえず何か動かして見たい方

#lambdaとは
スクリプトを実行することが出来るサーバーレスのサービスです。
サーバレスと言ってもスクリプトの実行時にのみサーバを起動するイメージです。

呼び出しはAWSの空いているサーバから行われるため、実行するサーバーは都度違います。
(固定IPを割り当てたサブネットにlambdaを設置して実行することでIPを固定にすることは出来ます)

無料使用枠が月ごとに100万件の無料リクエストと1秒あたり40万GBのコンピューティング時間あるので、たいてい無料枠で動かせます。WebやIOTのバックエンドのAPIとしても使えるのでめちゃくちゃ便利なサービスですね。

#簡易的なスクリプト作成
pythonでLambdaのスクリプトを作成する場合、 **lamb

元記事を表示

AWS Lambdaを使ってサーバレスアプリを作成(CRUDのR)

記事を閲覧いただき、ありがとうございます。[中村](https://twitter.com/AaTeltel)です!!
2020年10月にAWSエンジニアとして転職したので、AWSの予習も兼ねてLambdaを使ったアプリ作成について書いきます。

### AWS Lambdaとは?
ここでつらつら説明するより[公式動画](https://youtu.be/Hr6ZIvXSZpw)の方がわかりやすいという結論に至りました。まずはご覧ください。
(Qiita記事の中にyoutube動画の埋め込みって出来ないんですねぇ。出来たらいいのになぁ。)

##### 以下を使用して作成ます。

フロントエンド : [Vue.js](https://jp.vuejs.org/index.html)
AWS(インフラ) : [S3](https://aws.amazon.com/jp/s3/), [API Gateway](https://aws.amazon.com/jp/api-gateway/), [Lambda](https://aws.amazon.com/jp/lambda/), [Dyn

元記事を表示

共働き夫婦の月々の精算を自動化してみた

# はじめに
我が家は共働きで、家賃や光熱費・食費等の共通の出費はワリカンです。
共通の出費は一つの口座にまとめて紐づけており、その口座の残高のベース残高から減った分(=使った分)だけ割り勘してそれぞれが振り込む、といったルールとしています。
今回は口座残高の取得やワリカン計算を自動化し、Slackのチャンネルに投稿するような仕組みを作りました。

# やったこと
* AWS Lambda上でHeadless Chrome + Seleniumを動作
* Web家計簿アプリに自動ログインして口座残高を取得
* ワリカンを計算しSlackの家計清算チャンネルにメッセージ送信

最終的にこんな感じのメッセージが投稿されるようになります。

![dousa.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/575870/3f89cbdb-1652-53b7-380d-16353a8b5a6f.png)

システム概要は以下の図のようになります。

![システム概要](https://qiita-image-st

元記事を表示

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っぽいことをやる

2020.11.16更新
[Alibaba Cloud版](https://qiita.com/imaichiyyy/items/02ab2002c435ee1c938a)もつくりました。

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

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

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

なので、元々SSIが使われていた場合、そのまま置換など行わずそのままの形で使用できるようにAWS側で

元記事を表示

【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

元記事を表示

OTHERカテゴリの最新記事