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

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

Linebot × ChatGPT × Amazon Polly が織り成す楽しい自動対話の世界

# ChatGPT使って何か作りたい
ChatGPTが出てきてからAI(人工知能)への興味や関心を抱く方が非常に増えましたね。
私も魅力にハマった一人です。ChatGPTを初めて利用した時の感動と驚き、これを使ってどんなことができるようになるんだろう!とワクワク感がたまりませんでした。

ChatGPTを使って自分も何か作りたいなぁと思い、考えたのが自動対話アプリです。
本当は、、AIアバターを使って、音声入出力できて、性格や口調なんかもカスタマイズできて、、と色々夢物語を描いてみたんですが、どうやって作れば良いか見当もつかなかった。。

なので、まずはミニマムにテキスト&音声応答する対話アプリを考えてみました。
下のイメージで作ります。(作ったやつです…)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567948/d821f782-938f-9e41-2ad4-b640ef488dfe.png)

# 構成
大好きなサーバーレスサービス駆使していきます。
* フロン

元記事を表示

【AWS】CloudWatchEvents→(SNS→)Lambda→Slackへ通知する場合のLambda関数コード

# 概要

“`
AWS Batch -> CloudWatch -> SNS -> Lambda -> Slack
“`

AWS Batchが`Failed`になった場合にSlackへ通知する流れを作成しました。
本記事では、Lambda関数に記載するコードを紹介します。

※Role含め、これらのリソースをCloudFormationで一括作成する記事も別途投稿します。

# 通知フロー
以下の流れで処理が行われます。

AWS Batch:ジョブ実行結果(ステータス)が`Failed`になる

CloudWatchEvents:`Failed`の情報を収集し、トリガーイベントとしてSNSに送信

SNS:CloudWatchから受信したエラー情報をSNSメッセージとしてパブリッシュ

Lambda:SNSから受信したメッセージをトリガーとして起動(Lambda関数がSNSトピックにサブスクライブされており、SNSメッセージがこの関数に送信される)

Lambda関数:ステータスが`”FAILED”`である場合、Slack通知メッセージを構築し、指定されたSlackウ

元記事を表示

AWS SAMを使ってTypeScriptでImage形式のLambdaを起動する

## 概要

– AWS SAMの `sam init` 使ってLambdaの言語にTypeScript指定する場合にlambdaのZip形式にのみ Templdateファイルが対応しているようだったので、 Image形式に対応させた際の手順のメモ

– 公式ドキュメント
– https://docs.aws.amazon.com/ja_jp/serverless-application-model/latest/developerguide/what-is-sam.html

## 準備

– 参考資料: https://dev.classmethod.jp/articles/typescript-native-support-in-the-aws-sam-cli/

– `What package type would you like to use?` の聞かれた際の選択肢 `1 – Zip`を選択すると、 後続の`Select your starter template` と聞かれた際に Typescript を指定できるが、 `2 – Image` を選択すると j

元記事を表示

LambdaからDynamoDBに接続してみる

## 目的
AWS Certified Developer – Associateの勉強をしている中で
理解が浅いサービスについて実際に使用してみます

今回はLambdaからDynamoDBに接続してデータを取得するまでをやってみます
DynamoDBのデータ取得方法の違いについても確認します

LambdaとDynamoDBは以下で作成したものを使用します
・https://qiita.com/tsubaki_019475/items/70ab982f3ee329978383
・https://qiita.com/tsubaki_019475/items/f40c65b43103f4a9f8e4

## 手順
– ロール付与
– Lambda関数の実行
– API Gatewayを使用した接続

## ロール付与
Lambda関数の権限をデフォルトで作成した場合、DynamoDBの権限がないため設定を追加します
**1. Lambdaのページに移動、左のメニューから関数を選択**
**2. 作成したlambda関数を選択**
今回は事前に作成していたtest_lambdaを選択して

元記事を表示

AWS LambdaからOCIリソースのAPI操作(Secrets Managerを使用)

## 概要
AWS Lambdaを使ってOCIリソースのAPI操作(Computeの開始操作)を行いました。
サーバレスにすることによってEventbridge等を使った時刻起動やイベント起動等でOCIリソース操作可能になります。
また、OCI資格情報をSecret Managerを使用することによって資格情報をコード外に保存しています。

EC2を使った操作はこちらを参照ください。
[AWS環境からOCIリソースのAPI操作(Secrets Managerを使用)](https://qiita.com/tktk2712/items/26217b46d767569212d9)

## 構成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730992/cf52fbe0-f463-4b04-d47d-3c176496890c.png)

## 設定手順

* OCI資格情報をSecrets Managerへ配置
以下の手順については[AWS環境からOCIリソースのAPI操作(Secrets

元記事を表示

【Python】Switchbot Hub2の気温・湿度をCloudWatchに定期的に送信する【AWS Lamba】

季節の変わり目ということで、自宅の気温と湿度をCloudWatchに保存したくなりました。

そこで最小限の労力でPythonを書いて、Switchbot ハブ2の気温と湿度(とついでに照度)をCloudWatchに送信しようと思います。

さらにEventBridgeとLambdaで5分ごとに定期実行します。
![dashboard.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502255/ab3df0bc-b206-97f9-9ea0-509137916abb.png)

# GitHubリポジトリ

全てのソースコードを下記で公開しています。

https://github.com/tippy3/switchbot-hub2-custom-metrics

# #1 Switchbot API用のトークンを取得する

まずはコーディング前の準備です。

[公式サポートページ](https://support.switch-bot.com/hc/ja/articles/12822710195351

元記事を表示

API Gatewayとlambdaを使用してみる

## 目的
AWS Certified Developer – Associateの勉強をしている中で
理解が浅いサービスについて実際に使用してみます

今回はAPI GatewayとLambdaを使用して、リクエストを送れるまでをやってみます

## 手順
– Lambda関数の作成
– API Gatewayの設定

## Lambda関数の作成
**1. Lambdaのページに移動、左のメニューから関数を選択**
**2. 右上の関数の作成を選択**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1997750/f26b8a57-ac66-56fb-9ae7-e47d2e259681.png)

**3. 下の設定で作成(記載していないものはデフォルト設定です)**
関数の作成:一から作成
基本的な情報
関数名:test_lambda
ランタイム:Python

コードは作成時に用意されているサンプルをそのまま使用します

“`
import json

def lambda

元記事を表示

InstanaでAWS Serverlessアプリを可視化しよう!Lambda編

# はじめに

本記事は、下記動画の手順を書き起こしたものです。
実際に動く画面を確認したい方はぜひご視聴ください。
今回利用している言語はPythonです、その他言語については[公式ドキュメント](https://www.ibm.com/docs/ja/instana-observability/current?topic=agents-aws-lambda-agent#installing-instana-lambda-tracers-in-aws-lambda-functions)を参照の上、適宜読み替えてお試しください。

https://video.ibm.com/recorded/132859917

Instanaは14日間のFree Trialが可能です。
Try Instana! > https://www.instana.com/trial/

# 検証用Lambdaの作成

AWS Lambdaのダッシュボードを開き、**関数の作成** をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast

元記事を表示

AWS Signerを使って既存のLambda関数をコード署名してみた

## これは何?
最近ですが[AWS Signer](https://docs.aws.amazon.com/ja_jp/signer/latest/developerguide/Welcome.html)によってLambdaなどにコード署名をくわえることができるるのか検証する機会があったので、今回はその検証した内容についていろいろ記載していきたいと思います。

シナリオとしては、未署名のCloudformationで管理しているLambda(Python3.11)関数を、コード署名するまでの流れを検証してみました。

## 1. 事前準備

コード署名の設定していない関数をコード署名を有効化し、コードの改竄防止を確認しようと思います。
この章では、事前準備としてコード署名設定をしていないLambda関数の作成までをしようと思います。

### フォルダ構成
Cloudformation を用いてデプロイしようと思うため、以下のようフォルダ構成になります。
“`
./
├── event.json
├── function/
│ └── main.py
└── template

元記事を表示

【備忘録】AWSのセキュリティ対策について学んだことまとめ ~リソース編 リソースの暗号化~

今回はリソースの暗号化についてです。
AWSには保存しているリソースが外部から不正アクセスされたとき
内容が暗号化によって権限がない人が見れないようにする仕組みがあります。

例としてS3, DynamoDB, Systems Managerのパラメータストア, Lambdaの環境変数などで
保存した値を暗号化することができます。
詳しくは以下で説明します。

## S3
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3522793/e1e36d2d-8d20-7b17-7375-143f91b93ed6.png)
バケット作成時に暗号化のタイプを選択することができます。
以下、公式サイトから2023年1月5日以降はデフォルトで
バケットが暗号化されるようになったとあります。
以前は暗号化しない選択もできたようです。
ちょっと注意なのは、2023年1月5日より以前にバケットの暗号化をなしに設定していた場合は
既存のバケットの中のオブジェクトは暗号化されていないようです。
ただし既存のバケ

元記事を表示

API GatewayのJWTオーソライザーでGoogle IDトークンを検証してみた

– toCアプリの認証認可ソリューションを選定する場合、OpenID ConnectやOAuth2.0等の技術を利用したソーシャルログインの実装が候補に上がることが多いのではないでしょうか。
– 今回はAmazon API GatewayのJWTオーソライザーを利用して、Googleアカウントで認証済み利用者への認可処理を実装してみました。

## 環境構成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3562653/38d33f32-8cac-43de-f8b1-f830ff5c978f.png)

## 設定手順

### Google OAuth 2.0をセットアップする

※事前にGoogle Cloud Platformでプロジェクト作成が完了していることを想定しています。

– Google Cloud Platformの「APIとサービス」にアクセスします。
– 左メニューから「認証情報」を選択した後、「認証情報を作成」を押下します。
![Untitled.png](ht

元記事を表示

【備忘録】AWSのセキュリティ対策について学んだことまとめ ~インフラ編④ Lambdaにおけるアクセス制御~

今回はAWSのサーバレスサービスを利用したインフラの構築におけるセキュリティについて
記事を書いていこうと思います!
Lambdaにおけるセキュリティについてのみの投稿のため基本的な
Lambdaの実装方法については記載しないのであしからず。

# Lambdaとは
まず、基本的なことですがLambdaとはAWSが提供する
サーバーレスコンピューティングサービスです。
[前の記事](https://qiita.com/Yukimaru_Rutla/items/6325db36b7584b7d3730)ではEC2インスタンスを構築したネットワーク環境に配置して
管理していましたが、Lambdaは自前でアプリを動かすためのサーバーの構築や運用を
AWSに任せてクラウド上に作成したプログラムさえ置けば動かすことができる優れものです!
初めて触ったときは概念の理解がイメージしにくかったのですが触れば
とても便利なものと分かります。

# サーバーレスにおけるセキュリティとは
前述で説明したようにサーバレスとはサーバーの構築・管理の一斉をクラウドサービスに
お任せできるため物理的な管理は不要にな

元記事を表示

S3EventからLamdaコンテナを動かす

## 今回やること
S3 EventでLambdaジョブ(コンテナ)を実行させる

– 入力: csvファイル
– 出力: jpgファイル

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/54100/7a32469d-334a-41d1-b160-bf8499f80922.png)

### やりたかったこと
S3のPutObjectに応じたS3イベントを使って、
Python(Maplotlib/Pandas)を動かして、生成物を再度S3へ保存。

#### 経緯
– S3 EventとLambdaを組み合わせて簡単に作ろうとした。
– Maplotlibのボリュームが大きく、レイヤーの容量上限250MBにどうしても入りきらない。
– Lmadaコンテナを使う

## やってみる

やった結果:

https://github.com/bd8z/s3event

### Step1 S3イベントの確認する
print(event)だけするLambdaとS3インベントをつないで、
実行

元記事を表示

[備忘録] AWS CDKでRDS,RDS Proxy,Lambda を構築

AWS CDK を学習していく過程を記録する。

# はじめに
[[備忘録]AWS CDKでAPI Gateway, Lambda を構築](https://qiita.com/m-chan/items/0e3869afd193b92dd79a)にて、API GatewayをトリガーにLambdaを実行することで、LambdaがRestAPIとして外部ネットワークから利用可能になることを確認した。
今回は、RDS、RDS Proxy を構築し、Lambda の中の処理を書き換えて、API Gateway から Lambda 経由で mysql に接続できることを確認したい。

### RDS とは
> Amazon Relational Database Service (Amazon RDS) は、AWS クラウド でリレーショナルデータベースを簡単にセットアップし、運用し、スケーリングすることのできるウェブサービスです。

つまり、サーバの設定やOSのインストールなどすることなくすぐにDB構築が可能なサービスであり、RDSでは mysql、Oracle Database、Mic

元記事を表示

Serverless Days Tokyo 2023に参加してきました!(前編)

日比谷のクラスメソッド社さん会場に100名以上が集結するオフラインイベントです!

https://tokyo.serverlessdays.io/

※リアルタイムの走り書きのため、誤り等あればお知らせください?

![IMG_0020.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/7ea79241-278c-a2e6-829e-352c291e13be.jpeg)

# KEYNOTE / Alex Debrie (AWS Data Hero)

有名なDynamoDB Bookを執筆された方です!

![IMG_0022.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/fbf6e64b-b81c-18d4-2219-b3196372539d.jpeg)

### サーバーレスの歴史

– オンプレミス〜EC2の登場〜Lambda登場の変遷
– Herokuから始まった12-Fa

元記事を表示

【AWS Amplify】functionのリトライ回数を変更したい

## この記事の対象となる方

– AWS Amplifyを使用中
– S3のCreateObjectやSQS等に反応するLambda(function)を作成し、デプロイしている
– カスタムリソース(`amplify add custom`)を追加して、S3のCreateObjectのトリガやSQSを定義し、上記のLambdaと関連付けている
– デフォルトのリトライ回数は2だが、要件によって回数を変えたい (多分「0にする」を最も要求されそう)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267110/97052a32-6a8c-b66c-c9cb-6fe00f434099.png)
– ↑↑ この「再試行」です

## どうすればリトライ回数を変更できるか

### 結論

CloudFormation(`[functionName]-cloudformation-template.json`)に加筆するしかありません。
– `Resources`に以下を追加し

元記事を表示

Next.js 13とAWS CDK + Amplify Hosting + Cognito + DynamoDB + Lambdaを使ってTODOアプリを作る

[株式会社Never](https://neverjp.com/)のshoheiです。

株式会社Neverは「NEVER STOP CREATE 作りつづけること」をビジョンに掲げ、理想を実現するためにプロダクトを作り続ける組織です。モバイルアプリケーションの受託開発、技術支援、コンサルティングを行っております。アプリ開発のご依頼や開発面でのお困りの際はお気楽にお問合せください。
https://neverjp.com/contact/

# 概要

自社開発でどうしてもAWSを使う事情があり、扱う技術を一通り触ったので備忘録として記録します。

自分の勉強も兼ねてNext.js 13とAWS CDK + Amplify hosting + Cognito + DynamoDB + Lambdaを使ってTODOアプリを作ります。

弊社内のメンバー向けなので、細かい説明は割愛します。

# 構成

| 種類 |技術スタック |
|—|—|
|フロントエンド |Next.js + SSR |
|ウェブホスティング | Amplify Hosting |
|API |API

元記事を表示

kintone-rest-api-client を使ってkintoneアプリを自動更新する

## はじめに
以前書いた記事「[DynamoDB StreamをトリガーにLambdaを実行する処理をCDKで書いてみた](https://zenn.dev/collabostyle/articles/3ed9b3440c7d09 “DynamoDB StreamをトリガーにLambdaを実行する処理をCDKで書いてみた”)」の、Lambdaの処理でkintone-rest-api-clientを利用しています。

## kintone-rest-api-clientとは
kintone-rest-api-clientは、KintoneプラットフォームのためのREST APIクライアントライブラリです。このライブラリは、Pythonで書かれており、Kintone REST APIを呼び出すための簡単な方法を提供します。
kintone-rest-api-clientを使用すると、Kintoneアプリケーションを操作するPythonスクリプトを簡単に作成することができます。たとえば、kintone-rest-api-clientを使用して、データレコードの作成、更新、削除、検索などを行

元記事を表示

DynamoDB StreamをトリガーにLambdaを実行する処理をCDKで書いてみた

## はじめに
* DynamoDB StreamとLambdaを使ってDynamoDBのデータに変更があった場合(追加、編集、削除)に、その変更内容を別アプリに自動で反映する処理を実装しました。
* 自動化した処理をCDK化しました。

## DynamoDB Streamとは
DynamoDB Streamは、Amazon Web ServicesのDynamoDBサービスに含まれる機能の一つで、DynamoDBテーブルの変更をリアルタイムでキャプチャし、変更を処理するアプリケーションとの間でデータを配信するためのサービスです。DynamoDB Streamを使用することで、アプリケーション開発者は、DynamoDBテーブルの変更を非同期的に受信し、変更を処理することができます。この機能は、サーバーレスアーキテクチャを使用する場合に特に有用であり、システムの拡張性と柔軟性を高めるのに役立ちます。

## やりたいこと(イメージ図)
1.DynamoDBに対する項目の追加、編集、削除をDynamoDB StreamのイベントとしてLambdaに渡す
2.イベントを受け取ったLam

元記事を表示

pythonの引数にlambda関数を使うと便利だった

numbers = [[‘1′, ’40’], [‘4′, ’13’], [‘3′, ’14’], [’25’, ’30’], [’17’, ’20’], [’21’, ’22’]]

# リストの要素をキーとして最大値のリストを取得
– リストの1つ目の要素をキーとして最大値のリストを取得
“`
m = max(numbers, key=lambda x: int(x[0]))
print(m)
“`
> [’25’, ’30’]

– リストの2つ目の要素をキーとして最大値のリストを取得
“`
m = max(numbers, key=lambda x: int(x[1]))
print(m)
“`
> [‘1′, ’40’]

# リストの要素をキーとして昇順に並び替える
– リストの1つ目の要素をキーとして昇順に並び替える
“`
s = sorted(numbers, key=lambda x: int(x[0]))
print(s)
“`
> [[‘1′, ’40’], [‘3′, ’14’], [‘4′, ’13’], [’17’, ’20’], [’21

元記事を表示

OTHERカテゴリの最新記事