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

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

AWS Organizations 内のアカウントリストを組織構造と一緒に csv 出力する

## はじめに
AWS Organizations でマルチアカウント管理していると、アカウントの一覧を定期的に取得したいときはありませんか?

アカウント情報だけではなく、所属する OU の情報も一緒に出力する方法を紹介します。

## 実はコンソールから csv をダウンロードできる
コンソール上でも通知が出ているように、最近組織内のアカウントリストを csv 出力することができるようになりました。アクションから「アカウントリストをエクスポート」でダウンロード可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125105/1333de19-3353-0d66-e9af-375ee8c6ba97.png)

これはこれでとても便利なのですが、2022年1月時点では以下の問題があります。

### コンソールからしかダウンロードできない
AWS CLI や SDK 経由でダウンロードができないため、定期的に取得したいといったケースでは自動化が困難です。以下のドキュメントに記載が

元記事を表示

チャットからLambda関数の実行を予約する

#はじめに
LINEからLambda関数の指定時刻実行を予約したかったのでLambda関数を作成しました。

#つくるもの
###イメージ
![訓練時.drawio (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2457109/4e3230bb-7a9b-559f-befb-7b9a711ebe3d.png)

* LINEから受け取ったメッセージを基にLambdaでboto3を実行し、指定のLambda関数を実行予約するEventBridgeルールを作成します。
* 定期実行ではないため実行予約1つにつき1つのEventBridgeルールを作成します。
* ルール名は<Lambda関数名-実行時間>とし、この関数から作成された事を示すためのTagと実行時刻(UTC)Tagを付与します。
* Tagを参照しこの関数から作成されたEventBridgeルールの中で、実行済みのEventBridgeルールをチャットから一括削除出来るようにします。
* 実行対象に取れる関数のリージョンは1つのみです(

元記事を表示

Amazon Connect と、LambdaやLexとの連携方法

#はじめに
下記のような構成で、connectのシステムを構築した際、
お問い合わせフローから、LambdaやLexを使用する際のパラメータの渡し方などのまとめます。

パラメータを`問い合わせ属性`と呼びます。

>Amazon Connectでは、顧客とのやり取りはそれぞれ問い合わせ として処理されます。やり取りには、音声通話、チャット、または Amazon Lex ボットを使用した自動的な対話があります。
各問い合わせは、特定のやり取りに固有の、いくつかのデータを保持することができます。このデータは、問い合わせ属性としてアクセスされます。
例:
– 顧客の名前。
– エージェントの名前
– 電話やチャットなど、問い合わせに使用されるチャネル
– その他

![スクリーンショット 2022-01-30 18.01.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/988747/b63d3fb3-8a3b-7ace-2fe4-82400f4d9b26.png)

#Connectのお問い合わせフロ

元記事を表示

lambdaとは一体何者か。

##目的
めも。labmdaを名前しか知らなかったので軽く調べた。

##lambdaとは

* サーバーレスでプログラムを実行できるAWSのクラウドサービス。
* あるイベントが発生したら、プログラムを実行するなどの関数(=lambda関数)を
定義しておくことで、自動でプログラムを実行してくれる。

* 使用状況は、関数に対するリクエスト数とコードの実行時間に基づいて決まる、従量課金制。
無駄なコストがかからない。

##そもそも”サーバーレス”とは
Webサービスの開発に必要なサーバーの構築や保守をしなくても、サーバー上でプログラムを実行できること。

“レス”と言っているが、サーバーが必要ないわけではなく、管理が必要ないことを指す。
サーバーレスにも種類があってその中の一つがFaaS(Function as a Service)と呼ばれるサービスである。

lambdaもFaaSである。

##FaaSの特徴

* イベントドリブン式
* イベントごとに実行されるコードを書く
* 開発費用を抑えられる
* イベントが発生すると処理が動くので、動いた分だけ払えばOK

元記事を表示

【AWS】Go Lambdaのローカル開発環境を作る ( aws-sam-cli + M1mac )

# はじめに

`aws-sam-cli`を利用すれば、手元の端末内にLambdaの実行環境を再現して、動作検証できる。
手元でコードを修正しながらその場で動作確認できるため、ディプロイの手間とLambdaの費用を削減できる。
nodejsとpythonの導入手順は多い中、Golangのドキュメントが少ないように感じたため、ここで纏める。

### やること

* 開発用にarm版Golangをローカル環境にインストールする
* `aws-sam-cli`でローカル環境にLambdaとAPIGatewayを構築する

### 前提

* arm版(M1チップ)の`macOS`環境をベースに説明する (goenv導入部分以外は大差ないはず)
* Z shell (zsh) をベースに説明する (環境変数の通し方以外は大差ないはず)
* Dockerは既にインストールしてあるものとして説明する

# もくじ

1. Golangをセットアップする
* aws-sam-cliをセットアップする
* ローカル環境でLambdaを起動する

# 1. Golangをセットアップする

#

元記事を表示

Lambda Layersで自作モジュールを共通ライブラリ化する [Python,Node.js]

#はじめに
Lambda Layersを用いることで、モジュールを共通ライブラリとして、複数のLambdaで使用できるようなので、PythonとNode.jsのパターンで方法をまとめます。

メリットとして、Lambdaのソースコードの量を減らすことができること、各Lambdaごとにモジュールをアップする手間がなくなることがあげられます。

Lambda Layersについて
>Lambda レイヤーは、追加のコードやデータを含めることができる .zip ファイルアーカイブです。レイヤーには、ライブラリ、 カスタムランタイム 、データ、または設定ファイルを含めることができます。レイヤーを使用すると、コードの共有と責任の分離を促進し、ビジネスロジックの記述をより迅速に繰り返すことができます。

#自作モジュールのディレクトリ構造

Lambda Layersにアップロードされたモジュールは、`/opt`の領域に展開されます。
そのため、指定されたディレクトリ(`下記の表参照`)にPythonモジュールを格納してアップロードすることでLambdaを実行した際にモジュールとして自動的に読み込

元記事を表示

AWS Lambdaから別Lambdaを呼び出す際にPickle形式でデータをやりとりする

Lambdaから別Lambdaを実行するのはアンチパターンにも載っている方法ですが、やってみたので書いておきます。

https://aws.amazon.com/jp/blogs/news/compute-operating-lambda-anti-patterns-in-event-driven-architectures-part-3/

# 呼び出し元

FooのdataclassをいくつかリストにしてPickle形式にシリアライズして送信先のLambdaに送信しています。
返り値もPickleで返ってくるので読み込んでプリントします。

“`py
import json
import pickle
from typing import List
from dataclasses import dataclass
from datetime import datetime
from base64 import b85decode, b85encode

import boto3

@dataclass
class Foo:
i: int
d: datetim

元記事を表示

AWS Lambda(Python)でmultiprocessing【Python,Lambda】

# はじめに

Lambda高速化のためのmultiprocessingを使った並列処理です。パッと使いたいときの自分用テンプレです。

# 実装
LambdaのPython3.6です。

“`python
import json
import boto3
from multiprocessing import Process, Pipe
import time

def worker(conn, num):
# ここに処理を記述
# boto3を使う場合
# session = boto3.Session()
# s3 = session.client(‘s3′)
print(num)
response = f’process: {num}’
time.sleep(1)
conn.send(response) # 処理結果
conn.close()

def lambda_handler(event, context):

results = []
processes = []

元記事を表示

AWS Lambdaで環境変数のTZは指定しないほうが良いかもしれない件

##はじめに
Lambdaで現在日時を取得する際は、
リージョン関係なくデフォルトでUTCとなっています。

そのため業務等では扱いやすいようにJSTに変換して運用するかと思いますが、
その方法で2022年1月現在、よく見かけるのが2パターン存在します。

本記事はPython3.9を使用していますが、
他の言語に読み替えていただいても内容は問題ありません。

##1.Lambdaの環境変数でタイムゾーンを設定する方法

まずは環境変数なしで取得してみます。

![スクリーンショット 2022-01-28 18.36.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392337/2f5a7920-6d0c-6973-6e14-63b00bc016e7.png)

“`python
from datetime import datetime

def lambda_handler(event, context):

current_at = datetime.now().strftime(‘

元記事を表示

AWS IoT Coreに証明書を使わずユーザー名/パスワード認証で接続する

AWSのIoT Coreに接続するためには、証明書が必須と思っていましたが、カスタム認証を使うと、ユーザー名とパスワードで認証ができます。

証明書を使った認証は、IoT Coreが自動でやってくれますが、ユーザー名とパスワードによる認証の場合は、認証用のLambdaを作成して認証を行います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1180441/616cd98d-052f-48e1-3502-978d313630e1.png)
※図は公式ドキュメントからの引用です。

MQTT接続で行う場合には以下の制約があります。

* 接続ポートはMQTTSの8883ではなく443である必要がある
* ALPN拡張に`MQTT`の値を指定する必要がある

https://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/custom-auth.html

> オーソライザーを呼び出すには、MQTT とカスタム認証を使用して AWS I

元記事を表示

lambdaからECS:RunTaskを使用し、Taskを起動する

業務でLambdaの実行時間に引っかかる処理を切り分けるためにLambda->ECSTask実行を行いました。
ServerlessFlameWorkを使用したNode.js/TypeScript環境でECSのTaskを実行する手順です。
Python3&boto3を使用した記事は[こちら](https://qiita.com/ken992/items/1d4ee5e33c04744d1d1c)です。

## 環境
“`
Node v14.7.0
“typescript”: “^4.1.3”
“serverless”: “^2.23.0”,
“serverless-esbuild”: “^1.17.1”,
“`

## 結論
“`typescript:ecsTask.ts
import { ECSClient, RunTaskCommand, RunTaskCommandInput } from ‘@aws-sdk/client-ecs’;

const client = new ECSClient({
region: ‘ap-northeast-1’,
});

cons

元記事を表示

Serverless Framework

[Serverless Framework](https://www.serverless.com/) とは、AWS などでサーバレスのサービスを作る手順を省略するツール。自分で CloudFormation を書くより簡単。よく似たツールとして AWS SAM というのもある。

インストール。開発に使う node と混ざるのが嫌なので standalone binary を選んだ (実際には node_modules があるとそちらを優先して使うようだ)。~/.serverless/bin にインストールされるので .zshrc の読み込みが必要。

curl -o- -L https://slss.io/install | bash

AWS 環境の選択。AWS_PROFILE や AWS_DEFAULT_REGION の region 設定は無視されデフォルトの region は us-east-1 になるので注意。

export AWS_PROFILE=hoge

## ドキュメントの構成

ドキュメントは https://www.serverless.c

元記事を表示

AWS Lambda は、Amazon SQS、Amazon DynamoDB、Amazon Kinesis をイベントソースとするイベントフィルタリングをサポートしました

# はじめに

https://aws.amazon.com/jp/about-aws/whats-new/2021/11/aws-lambda-event-filtering-amazon-sqs-dynamodb-kinesis-sources/

> AWS Lambda は、イベントソースとして SQS、DynamoDB、Kinesis のコンテンツフィルタリングオプションを提供するようになりました。イベントパターンのコンテンツフィルタリングでは、お客様が指定したフィルタリング条件の下で、SQS、DynamoDB、Kinesis からのみ Lambda 関数がトリガーされるような複雑なルールを書くことができます。これにより、お客様の Lambda 関数へのトラフィックを減らし、コードを簡素化し、全体的なコストを削減することができます。
>
> お客様は、SQS、DynamoDB、Kinesis をトリガーとする Lambda 関数のためにイベントソースマッピングを作成または更新する際に、最大 5 つのフィルター条件を指定することができます。フィルターの組み合わせは、デフォルトで

元記事を表示

lambda 関数作るときのメモ

### 1. 概要

lambda関数作成するとき、忘れてググるやるまとめる

### 2. 目次
– [1. 概要](#1-概要)
– [2. 目次](#2-目次)
– [2.1. layer の追加](#21-layer-の追加)
– [3. 参考](#3-参考)

#### 2.1. layer の追加

1. `pip install -t {dir_name} {package_name}` でパッケージをdir_nameにインストールする
* dir_name を python にする事で、lambda関数内でパスを指定する必要がなくなる
2. `zip -r9 layer.zip python` で zip化する
3. AWS コンソールからレイヤーの作成→zipをアップロードする
4. arn を取得し、レイヤーの追加でarnを指定する

### 3. 参考
* [Lambda レイヤーの作成と共有](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/configuration-layers.htm

元記事を表示

Cloud9でLambdaレイヤーをサクッとつくる(スクレイピング環境構築

# はじめに
Lambdaでスクレイピングしたいですよね。じゃあChromedriverにSeleniumいるね。
そして取得したデータ、良い感じに取りまとめしたいですよね。じゃあBeautifulsoupとかPandasいるね。
という感じで、ピュアではないライブラリやドライバが欲しくなることが多々あります。

で、Lambdaレイヤーつくるかあ。となるのですが
Winで落としてきたChromedriverはそのままでは動かなかったり,
ローカルで作ったzipもレイヤーに上げようとすると「AmazonLinux以外お断り!」とか怒られたりするわけです。
もう全部AWS上で完結してしまいたい。となってAWS経済圏に入り込むわけです。
商売上手(for 開発下手)。

# AWS Cloud9の活用
ということでペアプログラミングでお世話になることの多いCloud9を使います。
それにしてもAWSのサービス名はおしゃれですね。クラウド使って最高にハッピー(Cloud nine)になるだって。

AWS Cloud9にアクセスをして,
↓Create Environmentして…
![

元記事を表示

API Gateway + Lambda + S3で音楽ファイルのタグ情報を取得するアプリを作成する

ローカルに持っている音楽ファイルのタグ情報(曲名・アーティスト名・アートワーク)を取得する簡単なアプリケーションを作成したので、実装の流れを記事にまとめます。
今回はAWSの学習も兼ねて、API Gateway、Lambda、S3(Presigned URL)を組み合わせて実装してみました。タグ情報の抽出には、mutagenというPythonライブラリをLambda内で用いています。

* この記事では主に実装の流れを説明していますが、Presigned URL(以下署名付きURL)、mutagenについても軽く説明しています。
* 機能実装の流れをわかりやすくするため、セキュリティ面の処理の実装を一部省いています(実際は許可されたユーザーだけがAPIエンドポイントにアクセスできるようにする必要があるなど)。そのため、あくまで練習用だと思ってください。

#目次

– 実装機能の構成
– 音楽ファイルをS3にアップロードする
– 署名付きURLとは
– S3バケットの作成
– ロールの作成
– Lambda関数の作成
– API Gatewayの作成
– クライ

元記事を表示

Notion API + LINE + AWS Lambda他でメモ内容をLINEにしゃべらせる

# 野望
相も変わらずNotionをDBに用いたLINE Bot的なものが作りたいです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/455207/7acc353d-96ab-d5a0-8a5d-289b8e41e0c0.png)

# 前回のあらすじ
Notion APIの前にまずはLINE Messaging APIの検証から始めました。
どうやら用意したLINE公式アカウントで受信したテキストをもとに応答をすることができるようになったっぽいです。
https://qiita.com/DJROU/items/900e3c32b87b5d43d8ed

# 今回やったこと
いきなりNotionを繋げて読み込みと書き込みをできるようにするのは荷が重いので、LINE公式アカウントに対してユーザが送ったテキストをNotionで検索した結果を返せるようにしました。
指定したDBのキーに対する値がゲットできるところまでのお試しです。

![image.png](https://qiita-im

元記事を表示

Chalice with DynamoDB

## この記事の目的

この記事の目的は、AWS製のサーバーレスフレームワークChaliceとDynamoDBを組み合わせて利用する手順を個人的なメモとして記すことです。

以下の内容を含みます。

– Chalice, DynamoDBともにAWS上で利用します
– Chalice, DynamoDBLocalを用いてローカルマシンでも利用します(長くなるので次回投稿にします)

以下の内容はカバー出来なかったので今後の課題とします。

– ローカル環境でのIDEを利用したデバッグ
– DynamoDB構築のCDKなどの利用(今回はaws-cliコマンドで実行)
– ユニットテスト

## 前提事項

以下のインストールについては済んでいるものとします。

– Python3
– chalice
– aws-cli
– docker-compose

ちなみに、私の環境は以下のようになっています。(2022/1/24時点)

– Python 3.9.7 (pyenv利用)
– chalice 1.26.4
– aws-cli 2

元記事を表示

Lamda作成テンプレートCloudFormation

# はじめに

他のAWSサービスに対して自動操作ができるかなど、試しにLambdaを作ってみる際に、都度IAMロールやログの管理を考慮するのが面倒と感じていました。
なので、必要最小限のリソースをCloudFormationで作ることで、削除時にまとめて消せるようにしました。

# CloudFormation

各部分の解説をし、全体は最後に記載します。

## パラメータ
“`
Parameters:
LambdaFunctionName:
Type: String
“`
`Type: AWS::Lambda::Function`ではFunctionNameは任意ですが、本番使用の関数作成時も想定して、名前を付けられるようにしました。

## ロググループ
対象のLambda関数の出力先ロググループを作成します。

“`
FunctionLogGroup:
Type: AWS::Logs::LogGroup
Properties:
LogGroupName: !Sub “/aws/lambda/${LambdaFunctionN

元記事を表示

LocalStackを用いたKinesisをトリガーとしたLambda実行

* LocalStack上で動作するKinesisへのレコード登録をトリガーとしてLambdaを起動し、LambdaからDynamoDBへレコード登録を行う方法についてメモする。

## 構成

![kinesis-trigger.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/586535/fb89f035-75f4-e38c-492d-6b74c842b769.png)

## Kinesis準備

* ストリーム作成

“`shell
aws kinesis create-stream –stream-name test-stream –shard-count 1 –endpoint-url http://localhost:4568 –profile localstack
“`

* ストリーム確認

“`shell
aws kinesis describe-stream –stream-name test-stream –endpoint-url http://local

元記事を表示

OTHERカテゴリの最新記事