- 1. 初めてのlambda
- 2. 面倒な議事録をAWS Transcribeを利用した自動文字起こしの構築
- 3. firecrackerが1.0になったので試してみた
- 4. API GatewayでWebSocketを利用したルームチャットの作成
- 5. LambdaとSESによるドメインでのメール送信
- 6. Lambdaでaws_s3.query_export_to_s3 関数を使用したクエリデータのエクスポート
- 7. Lambda で外部ライブラリ(psycopg2)を使用する
- 8. Firecrackerがバージョン1.0になったので正式版になったRaspberry Pi OS (64-bit)で試してみました。
- 9. AWS Lambda 内容整理
- 10. ローカルでAWS Lambdaをいい感じにデバッグする方法
- 11. Lambdaの明瞭な出力ログ [Python, Node.js]
- 12. Terraformを使ってEC2インスタンスの自動起動/自動停止環境を構築する
- 13. API Gateway の API バージョン指定(ベースパス)で Lambda の処理を分岐させる
- 14. Amplify CLIでLambda関数を定期実行させる方法
- 15. AWS Lambda Layer(レイヤー)を作成する方法
- 16. Visual Studio Code 上でAWS Lambda が編集できるようになるまで
- 17. AWS Organizations 内のアカウントリストを組織構造と一緒に csv 出力する
- 18. チャットからLambda関数の実行を予約する
- 19. Amazon Connect と、LambdaやLexとの連携方法
- 20. lambdaとは一体何者か。
初めてのlambda
#概要
簡単なlambda関数を作成し、テストでの引数を渡して関数を実行。
結果の違いを確認してみようと思います。#手順
1. lambda関数作成
2. ソースコードの挿入
3. テスト
4. テストの実行結果#詳細内容
ここから上記手順の詳細の設定方法などを記載していきます。## 1.lambda関数の作成
まずはawsコンソールからlambdaコンソールを表示させ、lamda関数の作成を押します。
![lambda_menu.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621314/0b5ab351-d92e-e7c7-28dc-171f61402388.png)* 一から作成を選択
* 関数名:jyankenで登録(名前は自分で自由に決めてください…)
* ランタイム:今回のlambda関数はpythonで書いております。python3.8でお願いします。
右下の「関数の作成」ボタンを押してください。
*関数の作成に少し時間がかかります。その間に関数について説明しておきます
面倒な議事録をAWS Transcribeを利用した自動文字起こしの構築
## はじめに
会議って憂鬱ですよね。そして拍車をかけるように『この無秩序な議事録を作成するのかぁ』と思うと憂鬱を通り越して絶望感が湧き出でてきます。
ならば勉強がてらAWS Transcribeをつかって、自動議事録を自分で構築してみようと思い立ち今回のハンズオンに至りました。
あくまで学習用という側面が強く、機密性というものをどこまで担保するかなどは考慮してないので、実際の会議では利用できないと思っています。ただし無料アプリなどを利用して知らないサーバにアップロードするくらいならLambdaを利用したサーバレスの方が安全かな?程度の、人によってはお叱りを受けるような認識で構築をスタートしていきます。## 参考資料
各種参考にしたURLです
### AWS
[AWSハンズオン-音声を文字起こしする](https://aws.amazon.com/jp/getting-started/hands-on/create-audio-transcript-transcribe/)
[AWSドキュメント-Lambda_チュートリアル: Amazon S3 トリガーを使用して Lambda
firecrackerが1.0になったので試してみた
AWSのfirecrackerが1.0になったようなので試してみました。
firecrackerはAWSが開発したKVMベースのVMMです。マイクロVMを超高速で起動できる仕組みです。LambdaやFargateの下回りとして使われているとのことです。
Rustによる実装です。
# firecracker
まずはfirecracker単体で使ってみました。
下記のgetstartedの説明通りに進めていけば実行できました。x86_64環境であれば、ビルド済みのバイナリが利用できます。ビルド不要。
https://github.com/firecracker-microvm/firecracker/blob/main/docs/getting-started.md
firecrackerはVMMです。ゲストOSを起動する前に、firecrackerプロセスを起動しておきます。firecrackerプロセスは、socketでAPI呼び出しを待ち受ける状態になります。その後、APIを使って、kernelやrootfsの場所や、仮想CPU数やメモリサイズの指定し、最後にマイクロV
API GatewayでWebSocketを利用したルームチャットの作成
# はじめに
サービスでチャット機能を提供するケースがあるかと思います。
その時に必要になるのが双方向通信であるWebsocketになります。
今回はAWSで公開されている API Gateway で Websocket API を構築して、トークルーム付きのチャット機能を実装してみます。
構成は API Gateway + Lambda + DynamoDB です。また、Websocket接続を特定のユーザーだけが使用できるように制限したいケースもあるかと思います。
WebsocketではHTTPプロトコルで使われるCookie認証を使うことが難しいため、
チャット画面専用のトークンを用いて、Lamdbaオーソライザを間に挟んで認証をします。# 対象者
– チャット機能の導入を検討されている方
– Amazon Web Servicesを使用される方# 目次
1. [構成](#構成)
2. [設定の流れ](#設定の流れ)
3. [Lamdbaの作成](#lamdbaの作成)
4. [DynamoDBの作成](#dynamodbの作成)
5. [API Gatewayの作成
LambdaとSESによるドメインでのメール送信
#流れ
1. ドメイン設定
1. SESでドメインメール設定
1. SES制限解除
1. Lambda作成#ドメイン設定
簡単に説明します。
お名前.comでドメインを購入し、Route53のNSを4つコピーし、お名前.comのネームサーバー設定に貼り付けると設定完了です。#SESでドメインメール設定
ドメインメール設定をします。![スクリーンショット 2022-02-05 14.02.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/988747/8aca2e73-2546-5544-ce3a-f3e4bde0aaec.png)
ドメインを入力し、他は、デフォルトのまま、作成します。
![スクリーンショット 2022-02-05 14.03.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/988747/766f92e9-3493-44ff-fc82-a3f30ee2196f.png)DKIM用
Lambdaでaws_s3.query_export_to_s3 関数を使用したクエリデータのエクスポート
# はじめに
> Aurora PostgreSQL DB クラスター からデータをクエリし、Amazon S3 バケットに保存されているファイルに直接エクスポートできます。そのために、Aurora PostgreSQL によって提供される aws_s3 PostgreSQL 拡張機能を使用します。
### 参考
https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/postgresql-s3-export.htmlソースコードのみの紹介となりますが、実行するためには以下の設定が必要です
・postgresにアクセスするためにLambdaをpostgresと同じサブネットに配置するか、通信できるサブネット(SG、ACLの設定)には配置が必要
・VPC内でLambdaを実行するためのロール設定
・postgresからS3へアップロードするためのIAMポリシーの設定# コード
“`python
import psycopg2def lambda_handler(event.context)
Lambda で外部ライブラリ(psycopg2)を使用する
# はじめに
Lambdaでpsycopg2を使うためには、デプロイパッケージを作成しアップロードする必要があります。
(複数のLambda関数で使用する場合など、Lambdaレイヤーを作成し共通部品化する方法もあります。)### 参考
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/python-package.html
# デプロイパッケージの作成
“`bash
$ mkdir -p hoge-function/package
$ touch hoge-function/lambda_function.py
$ pip install psycopg2-binary -t ./hoge-function/package/**フォルダ構成 (zip前)
hoge-function
| lambda_function.py
| package
| psycopg2-binary
| psycopg2-binary-info$ cd ./hoge-function/package/
# psycopg2
Firecrackerがバージョン1.0になったので正式版になったRaspberry Pi OS (64-bit)で試してみました。
Firecrackerがバージョン1.0になったとのことです。おめでとうございます。
https://www.publickey1.jp/blog/22/awsvmfirecracker10aws_lambdaaws_fargate.html
同じタイミングでRaspberry Pi OSの64-bit版が正式版になったとのことです。おめでとうございます。
https://www.raspberrypi.com/news/raspberry-pi-os-64-bit/
64-bit版のRaspberry Pi OSを使って、Firecrackerを試してみました。Raspberry Pi 4を使っています。(3ではうまく動かなそうです)
# Raspberry Pi OSの準備
Raspberry Pi Imagerを使ってOSをmicroSDカードに書き込みます。
`Raspberry Pi OS (other)`から`Raspberry Pi OS (64-bit)`が選択できるようになっています。
![image.png](https://qiita-image-
AWS Lambda 内容整理
#【AWS Lambda 内容整理】
実務で Lambda × Python でコードを書くことになりました。
そのための内容整理です。##Lambda:サーバーレスコンピューティングサービス
– サーバー無しで、コードだけで実行できるサービス
– サーバーの管理が不要
– 稼働している時間だけが課金対象
– 負荷がかかると自動スケーリングをおこなってくれる。
– 言語やメモリの制限はある。##想定される使い方
– zipファイルを作成して、直接アップロード
– 処理を実行後、S3に保存する。
– S3のIAMポリシーを追加する。
– 定期的にLambda関数を実行したい。
– Amazon EventBridge と組み合わせる。
– 毎月1日に実行。
ローカルでAWS Lambdaをいい感じにデバッグする方法
# はじめに
サーバーレスなどでLambdaを使うとかっこいいけど、ローカルで実行しづらく
かと言ってAWSにデプロイして動かしてデバッグするというのは時間と手間がかかるので
なんかいい方法ないかなと模索した結果のまとめです。# 前提
* LambdaをPythonで書いている(多分他の言語でも大丈夫)
* デプロイは、ECR経由でDockerイメージで実施
* [lambci/docker-lambda](https://github.com/lambci/docker-lambda)を使う# 方法
## 依存ライブラリなどなしREADMEにあるように、
“`bash
docker run –rm -v “$PWD”:/var/task:ro,delegated \
lambci/lambda:python3.8 lambda_function.lambda_handler
“`とするだけ。
`event` に渡したいJSONパラメータがあるのであれば、`lambda_handler` の後に指定するだけよいです(これもREADMEにある通り)
この辺は、い
Lambdaの明瞭な出力ログ [Python, Node.js]
#はじめに
Lambdaの出力ログは、CloudWatchLogsで確認しますが、json形式の明瞭なログ出力を書き留めます。#Python
DynamoDBの数値を取り出す際、データとしてDecimal(数値)として取り出されますが、json.dumpsを実行すると、エラーが起きました。
そのため、Decimalを取り除くロジックをつけています。`ensure_ascii=False`は、文字化け対策です。
“`python
import json
from decimal import Decimal# json形式でログを出力するため、Decimalがある場合取り除く
def decimal_to_int(obj):
if isinstance(obj, Decimal):
return int(obj)def lambda_handler(event, context):
print(“Received event:” + json.dumps(event, default=decimal_to_int, ensure_ascii
Terraformを使ってEC2インスタンスの自動起動/自動停止環境を構築する
# はじめに
もう何番煎じかわかりませんが、EC2インスタンスの自動起動・停止を実現する環境が欲しくなったので構築します。
会社で検証に使っているAWS環境が1週間ごとに消えてしまう仕様なので、毎回手動で設定しなくてもいいように**Terraform**を使って環境構築の自動化を行いました。# 実現したかったこと
* AWS EC2インスタンスの自動起動・停止を行い、利用料を削減する
* 平日の9:00〜21:00の間だけ稼働させる。ただし休日に作業したい際や、夜通し動かしたいといった要件に備えて柔軟にスケジュール設定できるようにしておく
* 検証環境のため、対象サーバは基本全部。インスタンスが増えてもコードや設定をいじらずに対応できるようにする。また一応特定のインスタンスをターゲットにできるようにしておく
* できる限り最小限の稼働で環境構築を行う# 成果物と使い方
以下のGitLab.comに今回作成したコードをあげています。
「とにかく使えればいい」場合はこちらからcloneなりforkしてREADMEを参照の上お使いください。
突貫工事のため、コードが汚いですがご了承く
API Gateway の API バージョン指定(ベースパス)で Lambda の処理を分岐させる
## はじめに
ある API で v2 と v3 を並行稼働させることになりました
URL は以下の想定
– https://xxx.com/v2/some_items
– https://xxx.com/v3/some_itemsv2 と v3 を個別の REST API やステージとして構築すれば簡単に実装できます
しかし、この API では API_KEY を使った使用量制限などを行っているため、
個別に実装してしまうと、 v2 と v3 で API_KEY を別々にしなければなりません– 全ユーザー用に新しい API_KEY を発行する必要がある
– ユーザーは新しい API_KEY を使う必要がある
– 新旧どちらの API_KEY も発行できるようにシステム改修する必要があるそこで、 v2 も v3 も同じ REST_API 、ステージに設定した上で、
ユーザーがアクセスしてきた URL によって処理を分岐させることにしましたこれにより、ユーザーは同じ API_KEY のまま URL を変えるだけで移行が可能になります
この実装のため、検証した内容
Amplify CLIでLambda関数を定期実行させる方法
# Amplify CLIでLambda関数を定期実行させる方法
## 注意点
先に注意点を書いておきます。
`amplify add function`の時点で、定期実行の設定をする必要があります。
「え、更新すればいけるやろ?」と思いますが、私はできませんでした。
また、調べても`amplify add function`の時点で設定している記事しか見つかりませんでした。
**もし後からでも設定できる場合は、教えてください。**## Amplify CLIでLambda関数を定期実行させる方法
**amplifyの環境が設定済みという前提で書いています。**
もし`amplify`がわからない場合は、こちらを参考にしてください。
[Amplify SNS Workshop](https://amplify-sns.workshop.aws/ja/)最初に`amplify add function`を実行します。
そうすると、以下の基本的な設定の質問が出てきます。
### 基本的な設定“`bash
? Provide a friendly name for your r
AWS Lambda Layer(レイヤー)を作成する方法
## Lambda Layerとは
複数のLambda関数に、共通の外部ライブラリやビジネスロジックを追加できる仕組みです。
1つのLambda関数に、5つまでLayerを追加できます。
しかし、Layerのサイズには、制限があります。## Lambda Layerを作成する方法
### nodejsディレクトリを作成する
ディレクトリ名は必ず**nodejs**にする必要があります。
(それ以外の名前では、ダメだと思います。)### 必要なライブラリをインストールする
“`bash
npm init
npm install (必要なライブラリ)
“`
`npm init`と`npm install (必要なライブラリ)`を行い、`node_modules`ディレクトリが作成され、中にインストールしたものが入っていれば大丈夫です。### zipにしてアップロードする
上記で作成した`nodejs`ディレクトリをzip形式にして、アップロードします。
アップロードする場所は、`AWSのコンソール`→`Lambda`→`レイヤー`→`レイヤーの作成`の順に進むと、アップロー
Visual Studio Code 上でAWS Lambda が編集できるようになるまで
### Visual Studio Code 上でAWS Lambda 編集できるようになるまで
(自分用のメモとして残しておきます)
タイトルの通りです。
AWS Lambdaを学習中ですが…Lambdaだとソースが見にくい…
ので、Visual Studio Code 上で以下のことができるようにしました。
・ソースのダウンロード&直接編集
・テストの実行
・(編集した)ソースのアップロード### 事前準備
(1) Visual Studio Code のインストール
https://azure.microsoft.com/ja-jp/products/visual-studio-code/(2) Visual Studio Code のプロキシ設定(※必要な場合のみ)
(記載例:http://userName:password@proxy.xxxTsts.jp:8080 )
(記載場所) ![無題3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518095
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