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

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

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

元記事を表示

Pythonでの Lambda関数共通ログ出力Util

#実装

“`log_utils.py
# -*- coding: utf-8 -*-
import logging
import sys
from datetime import datetime
from pytz import timezone

def _customTime(*args):
“””ログ用の時間出力
Returns:
現在時間(Asia/Tokyo)
“””
return datetime.now(timezone(‘Asia/Tokyo’)).timetuple()

LOG_LEVEL = ‘INFO’
_logger = logging.getLogger(__name__)
_logger.setLevel(LOG_LEVEL)
_logger.propagate = False
for h in _logger.handlers:
_logger.removeHandler(h)

h = logging.StreamHandler(sys.stdout)
# ロガーのフォーマット指定
FO

元記事を表示

Pythonでの Lambda関数共通認証Util

#実装

“`auth_utils.py
# -*- coding: utf-8 -*-
import base64
import boto3
import json

cognito_client = boto3.client(‘cognito-idp’)
cognito_identity_client = boto3.client(‘cognito-identity’)
USERPOOL_ID = ‘USERPOOL_ID’
CLIENT_ID = ‘CLIENT_ID’
IDENTITYPOOL_ID = ‘IDENTITYPOOL_ID’

def authenticate(user_id, password):
“””指定されたユーザIDとパスワードで認証を実施する
Args:
user_id: ユーザID
password: パスワード
Returns:
認証結果(AccessToken,RefreshToken,IdToken,ExpiresIn,TokenType)
“””
tr

元記事を表示

Pythonでの Lambda関数共通レスポンスUtil

#目的
PythonでのLambda関数共通レスポンスUtilを作成方法を共有します。

#実装
“`response.py
import decimal
import json

class DecimalEncoder(json.JSONEncoder):
“””DecimalEncoder クラス
Decimal クラスを使用して保存された数値を出力するために使用されます(Amazon DynamoDBの数値を保持します)
“””
def default(self, o):
if isinstance(o, decimal.Decimal):
if o % 1 > 0:
return float(o)
else:
return int(o)
return super(DecimalEncoder, self).default(o)

def response_200(body, **kargs):

元記事を表示

外部ライブラリのLambda Layerを生成するAPIをLambdaで作ってみた【Python】

もはやクリスマスが終わってしまいましたが、Advent Calendarの24日目です。
直前に書き始めた+文量があるので、読みにくい箇所があったらすいません!(何部作かに分けるべきだったか、、)

## 0. はじめに
この記事では、「Lambdaで確実に動くコンパイル済みライブラリが欲しいなら、Lambda自身に作らせてしまえばいいのでは?」というアイデアから始まり、AWS LambdaとAPI Gateway、S3を使ってLambda Layer用のPythonライブラリをLambda自身が生成してくれるAPIを作って素晴らしく快適なLambda生活が送れるようになったライフハック(?)を紹介します。

– M1 Macなどarm64アーキテクチャの上のDockerではx86_64用のLayerが作れない(逆も然り)
– 複数のライブラリを1つのLayerにまとめて、Layerの数を抑えたい
– 最新だけでなく、任意のバージョンのライブラリを使いたい
– Klayersでは、自動で旧バージョンのレイヤーが削除されて使えなくなってしまうため、Layerを自己管理下に置きたい
– 宗

元記事を表示

【AWS Lambda/CDK】RSSフィードをツイートするBotを作るLambdaファンクション作ってみた

# 作ったもの

特定のTwitterアカウントをRSSリーダBot化するLambdaファンクションを作ってみました。CDKで構成を管理&デプロイします。

https://github.com/kuredev/rss2witter

# 仕組み

– AWS LambdaでRSSフィードを読み込み、ツイートします
– CloudWatch Eventsで定期実行します
– RSSフィードのURLはLambdaファンクションのコードで管理します(他に手軽な方法が思いつかなかった)

# 準備

## Twitterアカウントを準備する

Botとするアカウントを準備し、Developer Portalで以下のキーを取得します。
取得には電話番号の登録や、メールの返信等が必要なようです。

– consumer_key
– consumer_secret
– access_token
– access_token_secret

## RSSフィードを読み込みツイートするRubyスクリプト

全体のコードは[こちらのリポジトリ](https://github.com/kuredev/rs

元記事を表示

How to use AWS Signer for Lambda security

I would like to check the features of AWS Signer in the following steps.
`以下の流れでAWS Signerの機能を確認します。`

1. Create sample python code for test of AWS Signer / 検証用サンプルPythonコードの作成&デプロイ
1. Confirmation of lambda function / Lambda関数の稼働確認
1. Create Signing Profiles using AWS Signer / AWS Signerにて署名プロファイルの作成
1. Create Signing Jobs using AWS Signer / AWS Signerにて署名ジョブの作成
1. Create code signing configuration / コード署名設定の作成
1. Change the setting in lambda function / Lambda関数の設定変更(署名された関数以外デプロイ不可

元記事を表示

Slack App(issue-alize for Redmine,Backlog)の開発して分かったこと

# はじめに
SlackメッセージからRedmineのissueを登録するアプリ(issue-alizeと言います)を開発しました。
[issue-alize for Redmine](https://tailshape.slack.com/apps/A01NTCE2G4A-issue-alize-for-redmine)
[issue-alize for Backlog](https://tailshape.slack.com/apps/A01F1AABZQW-issue-alize-for-backlog)
そのSlackAppの紹介と開発する上で少し困った点およびSlack App Directoryへ登録のメリットなどを記載します。

# 開発しようと思った経緯
– Slackの会話上でタスクを振られることが多く、それをRedmineに手動で登録していた
– その際、SlackのメッセージをコピペしてRedmineに登録するのが発狂しそうな作業だった
– SlackのメッセージをIssueとしてRedmineに登録するアプリがSlack App Directoryに見当たらな

元記事を表示

AWS Lambda layersを作成/管理できるツールlamblayerを作った

AWS Lambda layersを作成/管理できるツールlamblayerを作りました!
現在はPythonにのみ対応しています。

https://github.com/YU-SUKETAKAHASHI/lamblayer

## できること
– pipでinstallできるpakcageのビルド済みlayerを作成する(←これがとっても便利)
– ローカルのディレクトリからlayerを作成する
– Lambdaにlayerを設定する

jsonの設定ファイルからパラメータを読み取って内部でLambdaのAPIを叩いています。

## Quick Start
現在はpipでのみインストール可能です。
`pip install git+https://github.com/YU-SUKETAKAHASHI/lamblayer.git@v0.1.0`

`lamblayer init`で既存のLambdaを取り込みます。

“`
$ mkdir quick_start
$ cd quick-start
$ lamblayer init –function-name quick_s

元記事を表示

Lambdaの名前を変えただけなのに

## はじめに

[本番環境でやらかしちゃった人 Advent Calendar 2021](https://qiita.com/advent-calendar/2021/yarakashi-production) に懺悔の意味も含めて投稿させていただきます。@kyntkです。

思い出すだけで、今でもあの時が鮮明に思い出されて心臓が締め付けられる思いをするので正直書くのも辛かったのですが、二度と惨劇を繰り返さないためにということで書きます。

https://qiita.com/advent-calendar/2021/yarakashi-production

:::note warn
現在の所属はQiita株式会社ですが、この事故は今の会社ではない時に起きたものですので、Qiitaとは一切関係ありません。
:::

ちなみに、Qiita株式会社もカレンダーを作っているので、よろしければこちらも合わせて見てみてください。

https://qiita.com/advent-calendar/2021/qiita

## やりたかったのは、ただLambdaの関数名を変えること

元記事を表示

ラジオで今流れている曲を Slack に投稿する

現在の職場でラジオを流しているのですが、たま~に気に入った曲があって、調べたりします。
ですが、いちいちラジオ局のサイトを開いて流れている曲を検索するのが実に面倒です。
なので、定期的にラジオ局のサイトを見に行って、流れている曲を見つけて投稿してくれるアプリを作りましょう?

例として、ここでは TOKYO FM で流れている曲を毎分調べて Slack に投稿するというシチュエーションを設定します。

今回使用する AWS のサービスは以下の通りです。

– Lambda
– Secrets Manager
– IAM
– CloudWatch Logs
– EventBridge (CloudWatch Events)

## 前提

– AWS アカウントを持っている
– Python をインストールしている
– Slack のアカウントとチャンネルを作成している

## オンエア曲のサイトを見てみる

TOKYO FM のオンエア曲一覧はこちらで確認することができます。

https://www.keitai.fm/search/view/au/

![tokyofm-np.pn

元記事を表示

AWS CLIで Web サイトを構築、管理、運用する(24日目)

24 日目!
世の中はクリスマスイブ!
ということで、今日は、API Gateway から、昨日作った AWS Lambda 関数をつなぎます。
もちろん、AWS CLIで。

# 24日目の要約
API!

# AWS CLI の準備
このあたりをみて、好きなバージョンとお使いのOSにあった環境設定をしてくださいね。
なんなら、 AWS CloudShell で実行するのも楽でよいと思います。
この記事シリーズは、AWS CloudShell で実行し、実行例を載せています。

バージョン1
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/install-cliv1.html

バージョン2
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/install-cliv2.html

# 概要
API Gateway を作って、リクエストを受けたら Lambda 関数に処理させます。

# さあ、やってみよう!
今回は API Gateway の REST API を

元記事を表示

OTHERカテゴリの最新記事