Lambda関連のことを調べてみた2022年01月12日

Lambda関連のことを調べてみた2022年01月12日
目次

[AWS] Cloudwatch_LogsからLambda経由で軽いETLしつつOpenSearchでApacheログを可視化する方法

# やりたい事

2022/01/13開催の [SB Tech Festival](https://www.softbank.jp/biz/events/techfestival-deeptech-2022/) で登壇した内容、「ビッグデータ活用の第一歩AWS環境での大容量ログ可視化」の詳細手順(後半)ページです。

### このエントリで解説するのは以下のイメージ
![2022-01-11_09h20_031.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99499/23980234-e06e-96dd-3d8b-0bba4493cd57.png)

前半部分のFargate+Firelens+CloudwatchLogsについては[こちら](https://qiita.com/Kedamari/items/fba00598c0bd9e08fdb9)の記事を参照してください。

# 手順
2022/01/11時点でECSコンソールは新しいエクスペリエンスが提供されていますが、本エントリでは旧UIをベー

元記事を表示

EC2インスタンスの自動停止起動

# 経緯
EC2インスタンスを、使用しない時間帯のみ止めてコスト削減をしたい。
Lambdaのみでの実装と、Instance Schedulerでの実装を行い、それぞれの複数インスタンス・複数スケジュール設定の場合やコスト、注意などをまとめる。

**【参考】**

https://aws.amazon.com/jp/premiumsupport/knowledge-center/start-stop-lambda-cloudwatch/

https://aws.amazon.com/jp/builders-flash/202110/instance-scheduler/?wsf.filter-name=*all

https://docs.aws.amazon.com/ja_jp/solutions/latest/instance-scheduler/deployment.html#step5

# Lambda のみで実装する

**〇手動方式〇**

**1. IAM ポリシーと IAMロール作成**

* ポリシーの作成。CloudWatch Logの書き込み、E

元記事を表示

Aurora(Postgres)に読取専用のRDS Proxy Endpointを使ってアクセスするLambdaをcdk v2で作成したメモ

## 概要
[前回](https://qiita.com/hibohiboo/items/178f39898b0f88cf9387)はRDS Proxyは1つで、どちらのユーザも同じ読書ができるエンドポイントを使用していた。
今回は、読取専用のユーザは読取専用のエンドポイントを介してアクセスを行うようにする。
読取専用のエンドポイントを作るため、RDSクラスタには読書用のインスタンスと読取専用のインスタンスを用意する。

[ソースコード](https://github.com/hibohiboo/aws-cdk-v2/tree/id/4)

## アーキテクチャ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99876/941d7bad-ce6f-8c9f-4bb2-337849ad6f28.png)

## CDK
### VPCでサブネットIDをSystemMangerのパラメータストアに追加
読取用のエンドポイントの作成に必要。

“`diff:cdk/lib/vpc-stack

元記事を表示

【AWS】Lambda with EFSの構築

## きっかけ
– Lambdaで/tmp上限の500MBを超えるファイルを扱う必要があり、その動作確認のため。

## 構築Step
1. VPCの構築、SG等の設定
1. EFS構築、アクセスポイントの設定
1. Lambda構築、設定、動作確認

### 1. VPCの構築
– 適当なVPCを作成
![スクリーンショット 2022-01-10 0.05.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479886/3383c865-f5b8-e3cc-b62f-fe8393c5340e.png)

– DNSホスト名を有効化
![スクリーンショット 2022-01-10 0.05.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479886/f211a718-78a3-74c4-059b-7256fe092938.png)

– 適当なサブネットを作成
![スクリーンショット 2022-01-10 0.05

元記事を表示

AWS上にリグの監視/自動復旧システムを作ってみた(①監視/自動復旧編)

#目次
– [1.背景](#1背景)
– [2.構成](#2構成)
– [2-1.監視ロジック](#2-1監視ロジック)
– [2-2.Lambda](#2-2lambda)
– [2-2-1.Lambda関数の作成](#2-2-1lambda関数の作成)
– [2-2-2.プログラムソース](#2-2-2プログラムソース)
– [2-2-3.コンフィグ](#2-2-3コンフィグ)
– [2-2-4.モジュールの導入](#2-2-4モジュールの導入)
– [2-2-5.外部APIキーの取得](#2-2-5外部apiキーの取得)
– [2-2-5-1.NiceHash](#2-2-5-1nicehash)
– [2-2-5-2.LINE](#2-2-5-2line)
– [2-2-5-3.SwitchBot](#2-2-5-3switchbot)
– [2-2-6.EventBridgeによるトリガー定義](#2-2-6eventbridgeによるトリガー定義)
– [2-3.RDB](

元記事を表示

Aurora(Postgres)にRDS Proxy経由(IAM認証)でLambdaから接続する設定をcdk v2で行ったメモ

## 概要
LambdaからRDS Proxy経由でDB設定を行う手順のメモ。
RDSは[前々回](https://qiita.com/hibohiboo/items/9a6f6cf4b01927f670d0)利用したものを使う。
また、RDSへの接続は[前回](https://qiita.com/hibohiboo/items/e043ff7ab4e343e786fc)の手順でポートフォワーディングをして行う。
コード本文にパスワードを含めないほうがかっこいいと思ってRDSProxyへの接続はIAM認証を使用している。
また、Adminユーザ以外でのユーザの接続もここで試す。
cdk,lambdaともにTypescriptを使用。

[ソースコード](https://github.com/hibohiboo/aws-cdk-v2/tree/id/3)

## アーキテクチャ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99876/a386ce0d-1cb9-4e08-446d-80

元記事を表示

Lambdaでec2自動起動停止

#自動起動
#iam role作成
AWSコンソールへログイン
https://console.aws.amazon.com/iamv2
左ペインロール押下
ロールを作成押下
一般的なユースケース:lambda
ポリシー:AmazonEC2FullAccess
ロール名:control-ec2
作成

#lambda関数作成
https://console.aws.amazon.com/lambda
関数の作成押下
関数名:start-ec2
ランタイム:python3.9
デフォルトの実行ロールの変更
既存のロールを使用する:control-ec2
関数の作成
以下コード入れる

“`
import boto3
region = ‘ap-northeast-1’
instances = []
instances.append(‘対象インスタンスID1’)
instances.append(‘対象インスタンスID2’)

ec2 = boto3.client(‘ec2’, region_name=region)

def lambda_handler(event, context):

元記事を表示

Yahoo NewsをSlackへ通知してみる ~AWS Lambda × Web scraping × Slack API~

#はじめに
今回はAWS Lambdaを使ってSlackに通知を送るというシンプルなサーバレスアーキテクチャ作成を紹介します。
すでにLambdaとSlackについては多くの記事が出ていますがWeb scrapingを組み合わせたものはあまりないように思いました。
私がクラウド技術のすごさを思い知ったのがこの**Lambda×Web scraping**という組み合わせだったので初心に帰るという意味で記事にします!

#Web Scrapingとの出会いと課題
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2363360/1d174d88-1680-627f-010a-cdd57bb852c0.png)
>資料出所:[Webスクレイピングとは?定義から活用事例までの説明](https://www.octoparse.jp/blog/web-scraping/ “Webスクレイピングとは?定義から活用事例までの説明”)

##1.Web Scraping
皆さんはWeb scrapingと

元記事を表示

AWS LambdaでCSVを一時領域を利用せずS3に保存する

## はじめに
Lambdaでは一時領域として`/tmp`フォルダが提供されていますが、上限512MBのまでの制限があり大容量のCSVファイル生成があった場合に制限がかかっていました。
csvにストリーム出力してS3に保存する方法があるか調べてみました。

## 変更前
変更前のCSV作成〜s3アップロードは以下になります。
`/tmp`領域にファイル作成してS3にアップロードしていたので512MBを超えるファイルの作成はできませんでした。

“`python
import csv
import boto3
import psycopg2
import psycopg2.extras

def get_conn():
return psycopg2.connect(
host=’hostname’,
port=5432,
database=’xxxxxx’,
user=’xxxxx’,
password=’xxxxx’,
)

def get_data():
with get_co

元記事を表示

Lambda を使用して、Amazon EC2 インスタンスを一定の間隔で停止および起動するにはどうすればよいですか?

教材

https://aws.amazon.com/jp/premiumsupport/knowledge-center/start-stop-lambda-cloudwatch/

実作業

停止して起動する EC2 インスタンスの ID を取得します

EC2の画面から当該EC2インスタンス選択
リージョンも確認しておく

JSON ポリシーエディターを使い IAM ポリシーを作成します

IAMの画面からポリシーを選びポリシーの作成をクリック
JSONタブをクリック
コピペして適切なタグをつけて名前をつけて作成

Lambda のための IAM ロールを作成します

IAMの画面からロールを作成
さきほどのポリシーをアタッチして
適切なタグをつけて名前をつけて作成

EC2 インスタンスを停止および起動する Lambda 関数を記述する

このまま実施します
>
1. AWS Lambda コンソールで、[Create function] クリックします。
2. [Author from scratch] をクリックします。
3. [

元記事を表示

RustでAWS Lambda関数を書いてSAMデプロイする

#実行環境
– macOS Monterey 12.1
– rustup 1.24.3

#ディレクトリ構造
ディレクトリ構造は下記のようになりました。

“`
.
├── .cargo
│   └── config
├── src
│   └── main.rs
├── Cargo.toml
├── Makefile
└── template.yaml
“`

これらのファイルを一つずつ見ていきます。
`Makefile`と`template.yaml`は`sam build`時に使用します。

#事前準備
今回はmacOS上でビルドしますが、Lambdaの実行コンテナはLinuxベースのため、クロスコンパイルで対応します。
以下のコマンドを入力し、cargoでクロスコンパイルできるようにしておきます。

“`shell
$ brew install filosottile/musl-cross/musl-cross
$ rustup target add x86_64-unknown-linux-musl
$ ln -s /usr/local/bin/x86_6

元記事を表示

EC2インスタンスの消し忘れをLINE Messaging APIで通知する

#はじめに
テストなどでEC2インスタンスを作成していろいろと検証をした後に、ついうっかり停止し忘れて余計な料金がかかってしまうことはよくあることです。
本記事では毎朝決まった時間に、起動中のEC2インスタンス情報をLINE Messaging APIを使ってLINEに通知するための仕組みを作っていきたいと思います。

#構成図
構成図は以下の通り。
![EC2_Notification.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/689573/d5053642-d06a-a1c3-4217-2ee652a58bde.png)
今回はAWS Lambdaを使用して実装していきます。
LambdaにてAmazon EC2インスタンスの起動情報を取得するコードを作成し、Amazon EventBridgeで毎日9:00にLine Messaging APIへ連携する構成となっています。

#実装
ここからは構成図の通りに実装していきます。
###①Line Messaging APIの作成

元記事を表示

Lambda layersでAWS SDKを使用できるようにする

#ゴール
Lambda上でNode.jsのライブラリ(今回はaws-sdk)を使用できるようにする

#前提
・LambdaのランタイムはNode.js 14.x
・OSはWindows(10 Pro)

#やることたち
①node_modulesのライブラリをDL
②ZipしてLambda layersに登録

#①node_modulesのライブラリをDL
・コマンドプロンプトを開く

・「nodejs」という名前のディレクトリを作成

“`
mkdir nodejs
“`

・ディレクトリ「nodejs」を選択する

“`
cd nodejs
“`

・npm(Node Package Manager)を初期化する(設定情報の入力を求められるがすべてEnterでスキップしてもよい)

“`
npm init
“`

・aws-sdkをインストールする(Node.jsにてほかのライブラリを使用する場合は一緒にインストールしておきましょう)

“`
npm install aws-sdk
“`

#②ZipしてLambda layersに登録
・①でaws-sdkをイ

元記事を表示

Lambdaから同一アカウント内のEC2インスタンス情報を取得する

#ゴール
1つのAWSアカウント内にあるEC2インスタンスの情報を取得する

#前提
・EC2にインスタンスが1つ以上存在する
・LambdaのランタイムはNode.js 14.x
・OSはWindows(10 Pro)

#やることたち
①Lambda関数を作成する
②Lambdaのレイヤーを作成
③Lambda関数に割り当てたロールの権限を設定する
④コードを書き、実行する

#①Lambda関数を作成する
・コンソール画面からLambdaの画面を開き、「関数の作成」を押下する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/455207/459bc224-4639-5fca-6758-4aab8ce196d6.png)

・「一から作成」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/455207/533cb7e8-cbdd-999a-8224-87da3f3469f1.png)

元記事を表示

LambdaでGlueジョブの実行履歴をひたすら表示する

# 背景・目的
– GlueAPIのget_job_runsは、デフォルト100件(最大200件)しか返さないので、それ以上の結果を知りたい場合は、何度も実行する必要があったのでプログラム化しました。

# 結論
– NextTokenを使う。

# 内容
## APIリクエスト
– NextTokenがある場合と、それ以外で分ける必要がある。

### 初回もしくは、NextTokenがない場合
“`
response = glue_client.get_job_runs(JobName=job_name)
“`
### NextTokenがある場合
“`
glue_client.get_job_runs(JobName=job_name, NextToken=next_token)
“`

## コード全体

“`
import json
import boto3
import time
import os
import logging
import subprocess

logger = logging.getLogger()
logger.setLevel(logg

元記事を表示

最寄りのバス停にバスがあと何分で着くかだけを表示するミニサイネージ(M5Stack、UIFlow)

# はじめに
最寄りのバス停にバスがあと何分で着くかだけを表示するミニサイネージを作りました

元記事を表示

Lambdaからツイートしたい(Twitter API V2対応)

Lambdaを使って、今日の天気を定期ツイートするためにTwitterAPIを使うことにしました。
しかし、TwitterAPIが1ヶ月ほど前にバージョンアップしており、ネット上のソースコードをコピペしても上手くいきませんでした・・
数少ない情報を元になんとかツイートまでいけたのでメモ!

# 環境
**デプロイ環境**
AWS Lambda
Python 3.9
**ローカル環境**
MAC
Python 3.9.6

# 開発準備
以下の順序で進めます。
①Twitter APIアカウント登録
②Twitter API認証設定
③python3インストール
④tweepyインストール

## Twitter APIアカウント登録
まず、PCで自分のTwitterアカウントにログインしときます。
**(注)電話番号の登録をしていない場合は必ずしてください!**
その後、[Twitter Developerサイト](https://developer.twitter.com/)で利用登録します。
![image.png](https://qiita-image-store.s3.ap-

元記事を表示

Lambda+Pythonでマルチプロセス化による高速化検証(キューイング処理を自前で作る)

Lambdaの処理を高速化しようと思ったのでマルチプロセス化を試した結果を残しておきます。
pythonのmultiprocessingを使う場合、[LambdaではPool/Queueが使えないという問題](https://aws.amazon.com/jp/blogs/compute/parallel-processing-in-python-with-aws-lambda/#:~:text=Python-,Parallel%20Execution,-The%20multiprocessing%20module)を回避しているので、困っている方の参考になればと思います。

# 前提

高速化対象の処理はブロッキングが発生する処理
⇒asyncio等でマルチスレッディングしても効果がない処理
⇒検証ではシンプルに1000万回ループして変数にインデックスをセットするだけという処理を10回実行

# 比較結果一覧

Lambdaはメモリに応じてvCPUの数が増減し、メモリ10GBで6つまで拡張可能となっているため、各メモリに応じた実行時間を比較してみたいと思います。

https://a

元記事を表示

青いベンチ診断の結果をひたすらtwitterに投稿するアカウントをつくった

[Zenn](https://zenn.dev/okaponta/articles/d89b8c99458b22)にも投稿したので、好きな方でお読みいただければと思います。

# はじめに
みなさま「青いベンチ」という曲はご存知でしょうか。
「この声が枯れるくらいに 君を好きと言えばよかった」からはじまるサビは聞いてて心地いいですね。

さて、私がこの曲を知ったのは[青いベンチ診断](https://shindanmaker.com/240064)というものです。
これがまた面白くて、1/157464の確率で「青いベンチ/サスケ」という文字列が揃うものになります。
確率からしてだいたい外れるんですが、以下のような診断結果が出力されてクスってきてしまいます。

揃わなかった文字列を言い合うみたいなtogetterもありました。

https://togetter.com/li/452165

2021年の終わりになぜか「ひたすらこの診断結果を投稿するBotを作りたい」と強く

元記事を表示

AWS ChaliceからLambda Powertoolsを使ってみた

# 1.はじめに
みなさんLambda Powertoolsはご存知でしょうか?Lambda関数用のライブラリで、X-Rayによるトレース、ログ出力、CloudWatchのカスタムメトリクスの作成等々が簡単に実装できる優れモノです。
現在対応している言語はPython、Javaの2つですが、今回はPython向けのサーバレスフレームワークであるChaliceの中でLambda Powertoolsを使う方法を紹介していきたいと思います。
Chalice&Lambda Powertoolsって何やねんという方は、記事の末尾に参考のリンクを貼ってますので興味があればご覧ください。

# 2.ChaliceからLambda Powertoolsを使う方法
以下、ライブラリのインストールも含め手順を書いていきたいと思います。

## 2-1.ライブラリのインストール
まずは事前準備として開発環境にChalice、Lambda Powertoolsをインストールします。
シンプルにpipでインストールできます。

“`
$ pip install chalice
$ pip install

元記事を表示

OTHERカテゴリの最新記事