- 1. AWS LambdaでRESTでデータ取得してSplunkに送信してみる (Python編)
- 2. 【AWS IoT】IoT CoreのRuleでできること:アラート通知とシステムの疎結合化
- 3. Amplify×Lambda×SESでメール配信
- 4. LambdaとSNSでごみ収集日をメール通知
- 5. [AWS SAM] Python外部ライブラリ(Pandas)のLayer化
- 6. AWS LambdaでRESTでデータ取得してSplunkに送信してみる
- 7. 【AWS IoT】Greengrass Coreデバイス上でLambdaを起動し、ローカルファイルをS3にアップロードする際の9個のハマりどころをまとめてみた。
- 8. Greengrass(V1)の自動起動設定&コアデバイスの接続情報をLambdaで取得
- 9. [Nest.js] API Gateway + Lambda + DynamoDB 構成を実現してみた
- 10. AWSでCloudWatch Logsのフィルター後のURLの作り方
- 11. Lambda で返ってくる文字列でハマった
- 12. 【AWS IoT】AWS IoT初心者がAWS IoTを100時間触って「つなぎ」の部分をわかった範囲でまとめてみた
- 13. ecsクラスタにあるコンテナたちのヘルスチェックを AWS Lambda(boto3)で実装してみた
- 14. 【学習メモ】AWS Lambda
- 15. aws-sdkを使用して、sesでメールを送信する
- 16. LambdaでAWS利用料のグラフをS3に保存し、Slackに通知する
- 17. 【AWS】Lambdaの初回起動を早くする方法
- 18. AWS CDKでApi Gatewayを設定しLambdaから読み出してローカル実行を行ったメモ
- 19. SAM+Node.jsでLambdaをInvokeした際に「Error: Cannot find module ‘luxon’」が出た時の対処法
- 20. Lambdaの実行結果をS3にアップロードする
AWS LambdaでRESTでデータ取得してSplunkに送信してみる (Python編)
#はじめに
– [AWS LambdaでRESTでデータ取得してSplunkに送信してみる](https://qiita.com/symmr/items/c25fd31ebde1e8ebb095)ではBlueprintを使用してLambdaからSplunkへのHEC送信に成功しました。
– しかしBlueprintはNode.jsでした。Splunk管理者はPythonの方が得意だと思いますので(偏見)、Pythonでできないか調べました。
– PythonでSplunk HECに送信するClass([Splunk-Class-httpevent](https://github.com/georgestarcher/Splunk-Class-httpevent))がありましたので、今回はこちらを使って実現します。
– Splunk-Class-httpeventはレイヤーにしてLambda上のPythonから呼び出せるようにします。
– Splunkで毎日運勢を占えるようになりました。#環境
– Lambdaからアクセス可能するためEC2などでグローバルIPを持つSplunk E
【AWS IoT】IoT CoreのRuleでできること:アラート通知とシステムの疎結合化
#はじめに
今回はIoT Ruleでできることというテーマで、アラート通知とシステムの疎結合化の方法について書きました。具体的にはエッジデバイスからMQTT通信でIoT CoreにJSON形式のメッセージを定期的に送信する際、異常な値が検知された場合に誰かに通知したり、特定のサービスを止めたりする想定で、Ruleの解説をしていきます。
**※この記事内で紹介するコードは動作確認していないものも含まれるのでご了承ください。**#共通部分-Ruleの作成
IoT Coreの画面から「ACT」→「ルール」→「作成」をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1001699/6d6be26d-15f8-640a-5ae5-c07aa85653cc.png)
**メッセージのフィルタリングにSQL構文が使えます。**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1001699/
Amplify×Lambda×SESでメール配信
## 概要
開発中のアプリにレポートを投稿した際にメール通知が必要ということでAWSのSESを利用した検証を行いました。
メール通知やメール配信を考えている方の少しでも参考になればと思います。## 事前に
### アプリケーション
[Amplify SNS Wrokshop](https://amplify-sns.workshop.aws/ja/10_getting_started/00_what_you_build.html)の「[FOLLOW/TIMELINE機能の実装](https://amplify-sns.workshop.aws/ja/50_follow_timeline.html)」までを実装済みの方を前提としています。
しかし、SESの実装自体は簡単ですので、Amplify SNS Wrokshopをやっていない方でも実装できると思います。### Email認証
SESの送信元は検証済みのEメールアドレスが必要となります。
検証済みのEメールアドレスがない方は[こちら](https://docs.aws.amazon.com/ja_jp/ses/latest
LambdaとSNSでごみ収集日をメール通知
##はじめに
平日休みだと、日課のごみ出しを忘れてしまうことがあるので、前日に通知しておきたいと思いました。
せっかくなのでLambda(Python)とSNSを使ってメール通知したいと思います。##今回構成するサービス
「毎日20時に翌日のごみ収集内容をEメール通知する」というサービスを作ってみようと思います。大まかな流れは以下の流れで行います。
①SNSでTopicとサブスクリプションの作成
②Topicに対し、テストメッセージを送る
③IAMロールの作成
④Lamdaでテストコードの実行
⑤明日の曜日を判定するコードの作成
⑥SNSでメッセージの送信
⑦Lambda関数の定期的な実行##SNSでTopicとサブスクリプションの作成
SNSのサービス画面でTopicを作成します。
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/991082/5ef4b46e-728b-5aa5-a531-389f2a4cc2e4.png)
画面上の指示に従い、以下のようにTopicを作成します。
[AWS SAM] Python外部ライブラリ(Pandas)のLayer化
関連記事:[[AWS SAM] Lambda Layerの定義(nodejs)](https://qiita.com/takmot/items/6b18a74784fbf346f4ae)
# 目的
– Lambdaで外部ライブラリ(Pandas)を使用するためにLayer化する
– AWS SAMでLayerをデプロイする# パッケージの作成
外部ライブラリをLayer化するためには
– 外部ライブラリをまとめたzipファイルを作成する
– 使用する外部ライブラリが参照している他の外部ライブラリも含める
– Amazon Linux でデプロイパッケージを作成する ※Lambdaの実行環境がAmazon Linuxのため
– Lambdaの実行環境に合わせたRuntimeで作成する今回はEC2でAmazon Linuxのインスタンスを使用した
### Amazon LinuxへのSSH接続
デフォルトのユーザ名:ec2-user
EC2からダウンロードした秘密鍵:****.pemを使用してログインする
### Python3インストール
参考:[【2020年
AWS LambdaでRESTでデータ取得してSplunkに送信してみる
#はじめに
– RESTで取得してSplunk or Splunk Cloudに取り込みたいデータがある
– Add-onがあればいいんだけど、ないものはない
– Add-on作るのめんどい
– ローカルでREST叩くスクリプト動かすとしても24時間稼働するマシン用意するのもコストがかかる
– うーん、、、AWS Lambda試してみるか → **何これすごい!** というお話です追記:本記事ではNode.jsを使用します。Pythonでの方法をまとめました。
[AWS LambdaでRESTでデータ取得してSplunkに送信してみる (Python編)](https://qiita.com/symmr/items/074be71bdcc31d3e6079))#環境
– Lambdaからアクセス可能するためEC2などでグローバルIPを持つSplunk Enterprise、もしくはSplunk Cloud
– AWS Lambda#設定手順の概要
1. SplunkでHEC設定
2. AWS Lambdaで関数作成
3. CloudWatchでLambdaを定期実行化#
【AWS IoT】Greengrass Coreデバイス上でLambdaを起動し、ローカルファイルをS3にアップロードする際の9個のハマりどころをまとめてみた。
#はじめに
AIカメラ等のプロジェクトでほぼ必須(だと思います)の「Greengrass Coreデバイス上でLambda(boto3)を動かしローカルファイルをS3にアップロードする」手順と注意点をまとめました。エッジコンピューティングの基礎でもある機能で、一見すごく簡単そうですが、筆者自身かなりハマってしまいました。ラズパイの初期設定から最後の画像のアップロードまでハマりどころが9つあるのでそれを実際の手順にそって解説しています。
(ちなみにGreengrassはversion1を使っています)#概略図
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1001699/c8c852f3-690f-1c49-25c8-42e5eeda2878.png)#今回やることの大まかな流れ
**初期設定(OSインストール、ラズパイの初期設定、PCからラズパイへSSH接続、Greengrass Coreのインストール&Greengrass初期設定、Filezilla等FTPソフトウェアでラ
Greengrass(V1)の自動起動設定&コアデバイスの接続情報をLambdaで取得
#はじめに
Jetson nanoにGreengrassをインストールしていますが、毎回電源を入れる度にGreengrassを起動するのが手間でした。
そこで、公式ドキュメントに自動起動の設定方法が記載されている通りに設定をしました。また、今回はあわせてJetson nanoにssh接続するためのIPアドレスを返すLambdaをJetson nanoにデプロイしました。
結論から言うと、こちらは結果的に不要な作業だったのですが、なぜ不要だったか含めて書き残しておきます。
#1 Greengrassの自動起動設定
公式ドキュメントにある通り、systemdを利用したGreengrasの自動起動設定を行います。
参考:[Init システムを設定して Greengrass デーモンを開始する](https://docs.aws.amazon.com/ja_jp/greengrass/v1/developerguide/gg-core.html#start-on-boot)
##1-1 ユニットの設定ファイル作成
最初にsystemdでGreengrassを扱えるようにユニットファイルを作
[Nest.js] API Gateway + Lambda + DynamoDB 構成を実現してみた
#概要
普段、API Gateway + Lambda でAPIを作成する時は、特にフレームワーク等は使用せず一から作成していたのですが、今回機会があり Nest.js を利用したので備忘録として残しておきます。
Next.jsとはなのですが、
・TypeScriptで書けるNode.jsフレームワーク
・GraphQL、TypeORMなどもサポートしている
・基本的な構成が用意されていたり、デコレータを利用したりと、効果的かつ安易に作成することができる
みたいな感じとのことです。公式サイト
https://docs.nestjs.com/#前提
・AWSを利用できる環境
・基本的なTypeScriptの知識##NestJSインストール
NestJSはnpmパッケージとして提供されています“`
npm install @nestjs/cli -g
“`インストールしたCLIを使って、プロジェクトの作成を行います。
“`
nest new my-app
“`
インストレーションに従ったあと、プリケーションサーバーとして、以下コマンドで起動してみます。
AWSでCloudWatch Logsのフィルター後のURLの作り方
## やること
CloudWatch Logsのフィルタリング後(filter pattern)入力後のURLを生成## 環境
python 3.8
aws## 背景
CISベンチマークに関するアラート通知を作った。
AWS公式ドキュメントに記載のある、フィルタリング条件で、CloudWatch Logsでフィルタリング後のURLを通知したかった。
https://docs.aws.amazon.com/ja_jp/securityhub/latest/userguide/securityhub-cis-controls.html## やってみた
実際に[CIS3.1](https://docs.aws.amazon.com/ja_jp/securityhub/latest/userguide/securityhub-cis-controls.html#securityhub-cis-controls-3.1)を例にやってみる。
CloudWatchLogsには検索文字列、開始日時、終了日時の3つを指定できるため、それぞれ作成して最後にくっつける。### フィル
Lambda で返ってくる文字列でハマった
# 問題
Lambda、API Gateway を使って Web ブラウザからの入力結果を処理していた。Lambda 関数の戻り値に不要なダブルクォーテーションがついていた。以下のような Lambda 関数を作成した。
“`lambda_function.py
if bool:
return ‘Exist’
else:
return ‘NotExist’
“`lambda_function.pyの戻り値がresponse.text()に格納されるのだが、bool が True であるにも関わらず、result === ‘Exist’ の結果が false になっていた。
“`main.js
fetch(url, requestOptions)
.then(response => response.text())
.then(result => {
if (result === ‘Exist’) {
alert(‘存在します。’);
} else {
alert(‘存在しません。’);
}
})
“`ログを見ると、res
【AWS IoT】AWS IoT初心者がAWS IoTを100時間触って「つなぎ」の部分をわかった範囲でまとめてみた
#はじめに
エッジデバイスとAWSサービス(IoT CoreまたはS3)間でとりあえず通信ができるところまでの手順と簡単さ、注意点についてまとめてみた。コード更新のしやすさ、管理のしやすさなどは考慮に入れていない。初心者の記事なので、間違っている箇所があるかもしれないのでご了承いただきたい。
※2021年3月19日追記:ラズパイ上でGreengrass Lambdaを動かしローカルファイルをS3にアップロードする方法へのリンクを追加しました。
#1. 対象となる機種
今回エッジデバイス代表としてはよく使われる以下の2つを対象とした。
ESP32(OSなし)
ラズパイ(Raspbian OS)##1-1. ESP32
マイコン代表。1000円。ESP8266(500円)に比べてスペックが高いのでZerynthで簡単なPythonが動かせたりAmazon Free RTOSも乗る。NodeREDをかませればAWS IoTとも割と簡単につながる(NodeREDは基本無料)。一番使われているのはArduino IDEでの開発らしい。確かに敷居が低く、ESP32が手元にあればLチカま
ecsクラスタにあるコンテナたちのヘルスチェックを AWS Lambda(boto3)で実装してみた
## 概要
ECSクラスタ内でバッチ処理を行うコンテナが常駐しているのですが、
ここ最近Fargateのメモリを食い潰してて、よろしくない挙動をしていました。問題はつくりにあったのですが、それより問題だったのはヘルスチェックが実装されていなかったこと。
そこで既存のコンテナたちを変更することなく、
boto3を利用したヘルスチェックを実装することにしました。## 図にしてみると
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/927949/2be1e760-26a5-3156-2691-7ebae0145208.png)元々内部でログ検知の仕組みがLambdaで動いているので、アラート自体はそちらに任せることにしました。
ヘルスチェックのログを別関数でチェックしてもらうイメージ。## やったこと
とりあえずLambdaだけで構築なので、Serverless Frameworkでやりました。
ただ一点厄介事がありました・・(詳細は後述## lambda実装
“`p
【学習メモ】AWS Lambda
#Lambda
サーバーレス。
FaaS(Functions as a Service)
AWS Lambdaはサーバーがなくても、コードを実行することで効率的なアーキテクチャを実現できるサービス。##特徴
・実行基盤は全てAWSが管理
・AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能
・100ミリ秒単位でコード実行時間に対しての課金でありコスト効率が非常に高い
・オートスケール
・Python/Java/Node.js/C#/Go/Rubyで書かれたコードを実行##仕組み
イベントの発生がトリガーとして、Lambdaコートが実行される。##利用モデル
###Pushモデル
・AWSサービスとカスタムイベントが直接実行することによって、Lambdaへイベント通知して、コードを実行する。
※コード実行の順序は保証されない###Pullモデル
・LambdaはDynamoDBとKinesisなどのデータ処理へポーリングを行い、コードを実行する。
※一度ストリームに入れることによって、イベントの順序を保つことができる####パーミッ
aws-sdkを使用して、sesでメールを送信する
lambda内で処理した結果をsesを使用してメールで送信する。
## 環境
“`
serverless -v
“`
>Framework Core: 2.1.1
Plugin: 4.0.4
SDK: 2.3.2
Components: 3.1.3“`
node -v
“`
>v14.7.0## 目次
1. メールアドレス登録
2. serverless create
3. コード追加## メールアドレス登録
awsマネジメントコンソールにアクセス、sesのコンソール画面に移動。
![スクリーンショット 2021-03-14 19.06.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1022774/b2cbc0fa-2a27-243f-2a5e-ac9498bb9442.png)画面上部のVerify a New Email Addressをクリックする。
![スクリーンショット 2021-03-14 19.07.14.png](https://qiita-image-s
LambdaでAWS利用料のグラフをS3に保存し、Slackに通知する
## はじめに
AWSアカウントの管理者になってから、ほぼ毎日Cost Explorerで利用料を確認し、料金の急増がないかをチェックしています。ただ、– 手動での確認はやはり手間がかかり、もっと手軽な方法でやりたい
– 利用料の状況をチームメンバーにも共有し、コストの管理意識を芽生えてもらいたいというニーズがあり、日々の利用料をSlackに通知するためのLambda関数を実装しました。
## 参考記事
まず、アーキテクチャとソースコードはこちらの記事を参考し、一部カスタマイズして作りました。(@hayao_kさん、ありがとうございました!)
[日々のAWS請求額をグラフ付きでSlackに通知する](https://qiita.com/hayao_k/items/5a1e279ae4e142ca525a)ただ、弊社のSlackワークスペースにおいては、ファイルアップロードのための `files:write` スコープが規則上認められていないため、アーキテクチャを一部変更し、Slackへの直接アップロードではなく、一度S3に保存したうえ、グラフのオブジェクトURLをリンクと
【AWS】Lambdaの初回起動を早くする方法
# はじめに
個人請負でとあるサイトをサーバーレスで構築しています。
よくあるAmazon API Gatewayでリクエストを受けてAWS Lambdaで処理を行って結果を返却する簡単な構造なのですが・・・Lambdaからのリクエストが初回だけとにかく遅い!
原因は関数実行前の準備に時間がかかるからです。
Lambdaというサービスの内部では、初回実行時に実行する関数のパッケージのロードや展開、ランタイムの起動など色々な**「実行前準備」**をやってくれています。
しかし、一定時間関数が呼び出されないと**「実行前準備」**がアンロードされてしまうのです。そのため実行頻度の低いLambdaの場合は毎回遅い初回実行になってしまいます。今回は色々と試してみてなんとか解決した方法を載せておきます。
#前提
この方法が有効なケースは以下の場合です。+ Lambdaの実行頻度が低い。※30分に1度程度しか実行されないなど
デプロイパッケージのサイズをランタイムに必要な最小限のサイズにしていることやJavaよりPythonを選択している等も速度に影響してきますが今回は実行頻度が低い場
AWS CDKでApi Gatewayを設定しLambdaから読み出してローカル実行を行ったメモ
## 概要
[前回はLambda Layerを導入した。](https://qiita.com/hibohiboo/items/b8b575d7194aef3d1b57)
今回はAPI Gatewayを使ってHTTPでLambda Functionsを叩けるようにする。[ソースコード](https://github.com/hibohiboo/develop/tree/903dca887820b1fc29a33d41e9aae8c07aa1eaa1/tutorial/lesson/aws/typescript/projects/cdk_sample)
## やること
* ローカル実行
* POSTのテスト
* GETでパラメータを取得できることのテスト## やらないこと
デプロイ## コード
### GET用のFunctionsの追加“`ts:src/lambda/handlers/get-echo.ts
import { APIGatewayProxyHandler } from ‘aws-lambda’;
import * as response from ‘
SAM+Node.jsでLambdaをInvokeした際に「Error: Cannot find module ‘luxon’」が出た時の対処法
## 問題点
以下でluxonをインストール“`
npm install luxon –save-dev
“`package.jsonに以下が追加される
“`package.json
“dependencies”: {
“luxon”: “^1.26.0”
}
“`SAM+Node.jsでLambdaをInvokeした際に以下エラー発生
“`bash
sam local invoke TranslationFunction –event request.json
Invoking index.handler (nodejs12.x)
Skip pulling image and use local one: amazon/aws-sam-cli-emulation-image-nodejs12.x:rapid-1.20.0.(中略)
2021-03-12T22:47:33.403Z undefined ERROR Uncaught Exception {“errorType”:”Runtime.ImportModuleError”,
Lambdaの実行結果をS3にアップロードする
## 記事について
* 基本的なLambdaの設定などについては省略し、S3にアップロードする点についてのみ説明
## 環境
* AWS Lambda
* Serverless Framework standalone (
* Framework Core: 2.11.1 (standalone)
* Plugin: 4.1.2
* SDK: 2.3.2
* Components: 3.3.0## Serverless.ymlにS3アクセスの設定を追加する
“`
provider:
iamRoleStatements:
– Effect: Allow
Action:
– s3:PutObject
Resource: “arn:aws:s3:::/*”
environment:
S3_BUCKET:
“`## 実行ハンドラ
“`
import boto3
import os
import jsondef hand