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

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

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

元記事を表示

SAMとGoのテンプレートエンジンでSSR

静的なテンプレートを読み込んでSSRを行うWebアプリケーションを作成します。

## 前提知識

* AWS SAM と Golang を利用して Severless なWebアプリケーションを作成することができる。
* Golang の html/template パッケージを利用してHTML形式の文字列を標準出力することができる。

(以後AWSとlangは省略して記述します)

## Lambdaで静的なファイルを扱う

様々な方法があるかもしれませんが、今回は `AWS Lambda Layer`[^1] を利用します。
この機能を利用することで、 HTMLやCSS等の静的なデータをLambdaのzipファイルに含めることができます。

SAMでは、SAMのテンプレートファイル内に設定を記述することでLambda Layerを構築することができます[^2]。

## 構築

早速SAMでLambda Layerを利用したアプリケーションを構築してみましょう。
今回は以下のような単純なページを作成していきます。

PythonでのLambda環境変数の取得

#前提

###環境変数の設定

https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/configuration-envvars.html

環境変数は、関数の未公開バージョンで定義します。バージョンを公開するとき、他のバージョン固有の設定とともに、そのバージョンの環境変数がロックされます。
関数の環境変数を作成するには、キーと値を定義します。関数は、キーの名前を使用して、環境変数の値を取得します。
**Lambda コンソールで環境変数を設定するには**
1.Lambda コンソールで [Functions (関数)] ページを開きます。
2.関数を選択します。
3.**[Configuration]** (設定) を選択してから、**[Environment variables]** (環境変数) を選択します。
4.**[環境変数]** で、**[編集]** を選択します。
5.**[環境変数の追加]** を選択します
6.キーと値を入力します。
    **Requirements**
&

元記事を表示

Pythonでの Lambda関数共通ユーザ(cognito)操作Util

#実装
“`user_utils.py
# -*- coding: utf-8 -*-
import secrets
import string
import boto3

USERPOOL_ID = ‘USERPOOL_ID’
client = boto3.client(‘cognito-idp’)

def show_user_list():
“””Cognitoおよびエンティティからユーザリストを取得する(最大60名)
Returns:
ユーザ情報(ユーザーID、ユーザー名、状態、グループ権限)
“””
def _user_list(pagination_token=None):
“”” Cognitoユーザーリストの再帰取得
Args:
pagination_token: 前回呼び出しトークン

Returns:
ユーザ情報(ユーザーID、ユーザー名、状態、グループ権限)
“””
if paginati

元記事を表示

Pythonでの Lambda関数共通StepFunctionUtil

#実装
“`step_functions_utils.py
# -*- coding: utf-8 -*-
import boto3

stepfunctions_client = boto3.client(‘stepfunctions’)

def execute(state_machine_arn, input_message_body):
“””StepFunctionsを呼び出す関数
Args:
state_machine_arn: 呼び出したいStepFunctionsの名前
input_message_body: StepFunctionsを呼び出す際のメッセージ
Returns:
start_execution実行結果(dict)
“””
try:
return stepfunctions_client.start_execution(
stateMachineArn=state_machine_arn,
input=

元記事を表示

pythonでの Lambda関数 キュー送信

#実装
“`sqs_utils.py
# -*- coding: utf-8 -*-
import boto3

sqs_client = boto3.client(‘sqs’)

def push_message(message_body):
“””SQSの特定キューにメッセージをPUSHする
Args:
message_body: PUSHするメッセージ
Returns:
sqsメッセージ送信時のレスポンス
“””
try:
response = sqs_client.send_message(
QueueUrl=”https://sqs.ap-northeast-1.amazonaws.com/XXXXXXXXXXXX/my-sqs”,
MessageBody=message_body
)
except Exception:
raise
return response

“`

#参考
htt

元記事を表示

OTHERカテゴリの最新記事