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

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

AWS SAMで管理するAWS Lambda関数を、単一のAWSアカウント内の複数環境にデプロイする

# Whats’?

AWS SAMで管理するAWS Lambda関数を、単一AWSアカウント内の複数回(別環境として)デプロイするのにはどうすればよいのかな?ということで、試してみました。

# AWS CloudFormationと複数環境

AWS SAMは、AWS CloudFormationの拡張です。

> AWS SAM は AWS CloudFormation の拡張であるため、AWS CloudFormation の信頼性の高いデプロイ機能を利用できます。

https://docs.aws.amazon.com/ja_jp/serverless-application-model/latest/developerguide/what-is-sam.html

このため、AWS SAMで管理している内容を複数の環境に適用するには、AWS CloudFormationの考え方に従うのが妥当でしょう。

AWS CloudFormationのドキュメントによると、テンプレートを複数環境向けに利用するには、パラメーターやマッピング、条件セクションで環境間の差異を吸収してい

元記事を表示

イベントソース・パイプライン

# イベントソース・パイプライン
フロー:DataLake → Glue → QuickSight
CloudWatchに吐き出されたGlueの実行ログを、Lambdaで集計・抽出し、S3バケットへアップロードします。
Lambda関数は、Step Functionで起動させています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2432928/f8780266-a47a-91ee-0ba6-0eb3c5b5785b.png)

## EventBridge (旧:CloudWatch Events)
EventBrightのイベント実行ルールを設定しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2432928/94d9b6b5-3833-a57d-3092-b3fac05ab9f3.png)
イベントパターンをスケジュール(モード)に設定し、スケジュールに基づいたアクション

元記事を表示

Lambdaでrds自動起動停止

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

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

“`
import boto3

rds = boto3.client(‘rds’)

def get_tags_for_db(db):
“””
get instance list
“””
instance_arn = db[‘DBInstanceArn’]
instance_tags = rds.list_tags_for_resource(ResourceNam

元記事を表示

SORACOM LTE-M Button plusをトリガーに、LINE Notifyで位置情報を通知する

#はじめに
SORACOM LTE-M Button powered by AWSを以前使っていたのですが、紛失。
しかし最近このLTE-Mボタンを使う機会ができたので、これを機にLTE-M Button Plusを買いました。

https://soracom.jp/store/5207/

そしてこのLTE-M ボタン Plusを使い、AWS lambda、そしてIFTTTを介してLINE Notifyの通知を使う事を実現してみました。

調べてわかったのですが、このボタンはPowered by AWSのモデルと違いボタンを押した位置座標を大まかではあるものの取得できる機能があります。そこで、今回はtwitterの動画にあるように、LINE Notifyに文章を送るだけでなく、今の位置情報をGoogle maps APIの中のStatick map APIを使って一緒に今の位置情報を画像で送ってみました。

この記事ではこの実現方法をまとめます。

#開

元記事を表示

RDS Proxyの挙動検証(lambda → RDS Proxy → RDS)

AWS RDS Proxyがどのように挙動するのかを検証する。
主にDB接続数まわり。
https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/rds-proxy.html

# 検証環境
## 検証用処理
– `s3:ObjectCreated`のイベント発生をトリガに、lambda起動→RDS通信(特定カラムのupdate) という処理で検証する。([検証用lambda](https://github.com/tatsukoni-pra/lambda-rds-test))
– トリガとなるバケットパスにファイルを100個まとめてアップロードし、lambda関数を100個起動 → RDS接続を100個発生させる。

## 検証用RDS
– エンジンバージョン: `Aurora MySQL 5.7`
– DBインスタンスサイズ: `db.t2.small`(DB最大同時接続数は45)

# 検証
## RDS Proxy未使用時(lambda → RDS直接続)
処理前は以下の感じ。

“`
MySQL> SHOW G

元記事を表示

[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

元記事を表示

OTHERカテゴリの最新記事