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

Lambda関連のことを調べてみた2022年08月21日
目次

SNSとLambdaを用いたマイクロサービスのアーキテクチャ

# 目的
SNSとLambdaを用いたマイクロサービスの環境を構築したときのメモです。
今回のアーキテクチャがハマるケースは少ないかもしれませんが、もし誰かの役に立てばと思い残します。

# 経緯
– デバイス(IoT)から呼び出されるクラウドサービスを構築した
– デバイスのバージョンごとに機能の互換性を担保する必要がある
– 互換性のロジックをLambda関数のコードに全部入れるとメンテナンスが大変
– MQTTトピックは既に決定している
– IoTルールは気軽に修正できない

# 構成
– IoT Core
– SNS
– Lambda
## 構成図
![Untitled-3.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2515577/423e3257-52d0-cd65-115e-7c762a3e9e32.png)

# 特徴
簡単に表現すると Fan-out + Message Broker です。
– 1つのSNSトピックに対して複数のLambda関数がサブスクライブ
– サ

元記事を表示

aws-vaultを使ってAWS SAMのデプロイを行ってみる

# はじめに
AWSのSAMを使うとlambda関数の開発がかなり楽になることを知りました。
本記事ではそんなsamのインストールからデモアプリのデプロイまでをまとめてみました。

# AWS SAMとは
SAMとは(Serverless Application Model)の略です。AWSのサーバーレスサービス、Lambdaの関数をローカルで開発する際に非常に便利なサービスとなっています。

## SAMを用いるメリット
SAMを用いてLambda関数を開発すると以下のような利点があります。
– ローカルのエディタを用いてLambda関数のコーディングが可能
– ローカル上でLambda関数に似た実行環境を用意できるためテストが簡単
– pythonのパッケージを用いる場合zipファイルなどにまとめレイヤー分けをする必要がなくなる

# 使ってみる
## 準備
### 前提
本記事はarm系cpuの搭載されたmacOSでまとめています。
“`terminal
$ sw_vers
ProductName: macOS
ProductVersion: 12.5
$ uname -m
a

元記事を表示

Lambda – RDS Proxy(TLSあり) – Auroraの構成でRDS(Aurora)に接続する

## はじめに
Lambda→RDS Proxy→RDSの接続をやってみたのでその備忘録を残す。

全体の構成イメージは以下。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372684/41017c28-5f6c-795c-97ec-b64ba0a46393.png)

※料金について、Auroraはインスタンスの起動時間で料金が発生するので特に注意。Auroraではなく、MySQLとかにすれば無料枠があるのでそちらの方がいいかもしれない。

## Auoraのインスタンスを作成
以下の箇所以外はデフォルトのまま設定。

| 設定項目 | 画像 |
|:-:|:-:|
| テンプレート | ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372684/f92c1631-3a07-bcca-02c3-b82922eb7e3f.png) |
| インスタンスの設定 | ![image.pn

元記事を表示

AWS Lambda + API Gatewayでエラーになったら確認すること

Lambda + APIGatewayでREST APIを構築し、いろんなエラーに遭遇しました。
確認すべき箇所をメモしておきます。

## 403 {“message”:”Forbidden”}

### → **リクエストURLは正しいでしょうか**
API Gatewayはpath+ステージ名を付けたりします。
このステージ名が抜けてるとForbiddenになりますので、確認してみてください。

構成
“`
https://{APIのID}.execute-api.{リージョン}.amazonaws.com/{ステージ名}/{リソース名}
“`


“`
https://api-id.execute-api.us-east-2.amazonaws.com/default/pets?id=4&type=dog
“`
### → **リソースポリシーが間違っていないでしょうか**
リソースポリシーが真っ白だとエラーになります。
左メニ

元記事を表示

AWS LambdaのPythonアップデート手順について

# はじめに
LambdaにおけるPython3.6のサポート終了についてAWSから通知があり、
Python3.6からPython3.9にアップデートする必要がありました。
アップデート作業の備忘として、AWSコンソールでの操作手順をまとめてみました。

# アップデート対象の確認

AWSコンソールにログインし、Lambdaの関数一覧画面に遷移します。
「ランタイム」欄に使用している言語のバージョンが表示されています。
今回はPython3.6を使用している「cwlog_S3export」を例に記載します。
![Lambda_update1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2740559/d5f4167f-1fb7-d6a5-bebc-0eb5badec70f.png)

# アップデート作業

関数名を押下し、関数の詳細画面を表示します。
デフォルトで「コード」タブが表示されており、最下部にスクロールすると「ランタイム設定」欄が表示されます。
「ランタイム設定」欄の「編集」を押下し、

元記事を表示

Lambdaのレイヤーの参照方法

Layerに配置したファイルは `/opt`で参照可能。
試しに表示してみる。

Google fontから[Noto Sans Japanese](https://fonts.google.com/noto/use#how-are-noto-fonts-organized)をダウンロードし、`.font.zip`にしてLayerにアップロード。
Lambda側でLayer参照の設定をしてから以下を実行

“`js
const fs = require(‘fs’);

exports.handler = function(event, context){
fs.readdir(‘/opt/’, function(err, files){
console.log(files);
context.done(null, err);
});
}
“`

Cloud Watchに以下のように出力される
“`
[ ‘.font’ ]
“`

さらに`.font`ディレクトリの中身を表示してみる
“`js
const fs = requir

元記事を表示

Amazon SQSのローカル実行環境ElasticMQの構築

Amazon SQSと互換があるElasticMQをインストールし、ローカルにあるLambdaのソースコードと連携するローカル実行環境を構築します

softwaremill/elasticmq

https://github.com/softwaremill/elasticmq

# ElasticMQのインストール

ElasticMQのインストール方法には複数ありますが、今回はDockerを使います。
特に、Docker環境としては、QNAPのNASにインストールします。理由は単にQNAP NASを利用しているから。

QNAPには、Docker環境として、ContainerStationがあります。
ElasticMQのDockerファイルは、リポジトリに対して、elasticmqの入力で検索にひっかかります。

https://hub.docker.com/r/softwaremill/elasticmq-native/

Dockerに馴染みのある方は、以下がわかりやすいかと思います。

 “`docker run -p 9324:9324 -p 9325:9325 so

元記事を表示

【Lambda】list_objectsでひっかかったこと

# やりたいこと
* list_objectsで指定S3バケット上のキー一覧を取得
* あるキーが存在するならファイルにデータを追記
* あるキーが存在しない場合ファイルを新規作成
* ランタイムはPython3.9

# ①LambdaからS3バケットにアクセスできない
“`Python:Error
[ERROR] ClientError: An error occurred (AccessDenied) when calling the ListObjects operation: Access Denied
Traceback (most recent call last):
“`
**解決策:LambdaにS3のアクセス権限を付与**
1.Lambda関数を管理しているIAMロールの概要ページにアクセス
![01_アクセス権限.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2728375/cb40ccb5-e8e1-4144-0a47-b72e257f4c22.png)
2.

元記事を表示

LineMessageAPI+ngrok+Lambdaで送られてきたメッセージをそのまま返すBotを作ってみました

[前回](https://qiita.com/uekichi3/items/bb9cb7d35653ee873982)は、AWSで公開されているgolangのLambdaコンテナイメージの事を書きましたが、
今回はこれを拡張してLineBotを作ってみました。

## 前提条件
[ngrok](https://ngrok.com/)に登録済みで且つ、インストール済み
[LINE Developers](https://developers.line.biz/ja/)に登録済みでチャネルも登録済み

## パッケージの構成
前回の構成で、コードを拡張しようと思ったのですが、
初回main.goをbuildしようとしたらgopkg.in/yaml.v3に関するエラーが出たので今回はPythonで試す事にしました。
“`
├── docker
│   └── lambda-python-test
│   └── Dockerfile
├── docker-compose.yml
├── lambda
│   ├── app.py
│   └── .env
└── requireme

元記事を表示

webhookを叩くだけのシンプルなLambdaを5つの言語で作ってみて実行速度を測る

我が社にて、cloud watchのalertを拾って、LambdaからIFTTTのwebhookに繋げてパトライトを光らせよう、っていうプチプロジェクトが走ろうとしております。

![スクリーンショット 2022-08-13 13.20.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308709/96ae713e-868f-6a59-91ff-2bfbd6bbf46c.png)

だいたいこちらの記事のような内容です。
https://kimama.cloud/2020/01/06/alarm2patlite/

ただ、今回はこのへんの事情は関係なく・・・

![スクリーンショット 2022-08-13 13.22.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308709/33dc51b1-853e-9f45-be5d-ef884f48dadc.png)

↑ここだけの記事です。Lambdaのみ。

##

元記事を表示

AWS Lambda+seleniumでLineにpush通知やってみた

# この記事で言いたいこと
– web 画面のpull型確認がめんどいのでLine通知にした
– ハマったポイント

# きっかけ
– 子供が習い事をしていて、土日に練習会がある。

– 練習場所が、毎週可変
– 場所は昔ながらの掲示版でのみ知らされる。
– あれ、今週末はどこだっけ? →わざわざ掲示版を見に行く
 ↑これが面倒 →プッシュ型の通知にしたかった。
– 掲示版(sample)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/445755/f4b694f4-c56b-eadb-7f3d-99df54830ebd.png)

# ひらめき
seleniumで掲示版での投稿内容を読み取って、
lamdaからプッシュ通知すればできるのでは?

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/445755/122e37a1-08ad-3db0-a0b8-83c0b93ad0be.png)

元記事を表示

[AWS.4] Lambda関数のテスト

# 1. 概要
API Gateway に対応した Lambda関数をテストするには、API Gateway の管理画面から対象APIを選んで「テスト」画面を開き、テスト用の入力パラメータを指定して当該関数を呼び出す必要があります。
また、VisualStudio のテストプロジェクトから Lambda関数を呼び出して動作をテストすることも可能です。

本記事では、次の二つのテスト方法について記述します。
1. API Gateway の API 呼び出しテスト
1. VisualStudio テストプロジェクトからの呼び出しテスト

# 2. API Gateway の API 呼び出しテスト
API Gateway管理画面から、作成した API(EchoSample-API)を選択します。
その後、ツリー項目の「ANY」をクリックすると、リクエスト〜レスポンス の流れを示すフロー図が表示されます。
![スクリーンショット 2022-08-03 22.08.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.co

元記事を表示

【lambda】他の配列を参考にリストを並べ替える

## はじめに

**Pythonで他の配列を参考にリストを並べ替える**方法について解説します。

※プログラミング関係の内容を他にも投稿していますので、よろしければ[こちら](https://qiita.com/oki_kosuke/items/34b1071224953776c211#%E6%8A%95%E7%A8%BF%E4%B8%80%E8%A6%A7)の一覧から他の投稿も見て頂けますと幸いです。

## 実現したいこと
input_list = [‘ten’, ‘nine’, ‘three’]
このようなリストが与えられた際に数として並べ替えたい。つまり、数字の3,9,10の順に従って、[‘three’, ‘nine’, ‘ten’]と出力したい。

## listの並び替えの復習
リストは以下のように並べ替え可能です。

“`python
name_list = [“Charle”, “Mike”, “Bob”, “Alice”]
sorted(name_list)
“`

“`:出力
[‘Alice’, ‘Bob’, ‘Charle’, ‘Mike’]
“`

元記事を表示

【AWS】SQSからLambdaに送られるJSONのフォーマット

## 起こった問題
RustでLambdaを書いていて、SQSの`MessageAttributes`を含むイベントのjsonをうまくデシリアライズできなかったのでメモ。
>Error: Error(“invalid type: map, expected a string”, line: 1, column: 710)

AWSのドキュメントにもjsonのサンプルはあるのですが、肝心の`MessageAttributes`の部分が空オブジェクトになっていて中の形式がわかりません。

[チュートリアル: Amazon SQS での Lambda の使用 – AWS Lambda](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/with-sqs-example.html)
“`json
{
“Records”: [
{
“messageId”: “059f36b4-87a3-44ab-83d2-661975830a7d”,
“receiptHandle”: “

元記事を表示

Lambdaのpython Layer(simple_salesforce)作成

0. 目次

  1. 概要
  2. 環境情報
  3. 作成方法

1. 概要

Lambdaのpythonを使用してSalesforceへの処理を実装したいので、pythonのSalesforceモジュールである『simple_salesforce』をimportするためにLayerを作成します。

2. 環境情報

pythonは、バージョン3.8を使用します。
Lambdaのpythonバージョン3.8はAmazon Linux2上で動作しているので、Amazon Linux2のEC2インスタンス上でLayerを作成します。

詳細に関しては、Lambda ランタイムを参照してください。

3. 作成方法

1. EC2インスタンス作成

Amazon

元記事を表示

AWS サポートケースの履歴を自動で Wiki にナレッジ化する

## モチベーション
AWS Support のケース履歴は最大 12 ヶ月保存されます。

https://aws.amazon.com/jp/premiumsupport/faqs/

> **Q: ケース履歴の保存期間はどくらいですか?**
> ケース履歴情報は、作成後 12 か月間ご利用いただけます。

そのため、サポートケースの内容を社内 Wiki のようなところでナレッジとして長期的に蓄積したいというケースを想定しています。

## 構成
* EventBridge のイベントルールでサポートケースのクローズを検知
* AWS Lambda で AWS Support API を使用してケースの詳細を取得
* Markdown 形式に整形して Wiki に投稿

:::note info
AWS Support API はビジネスサポート以上で利用できます。
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125105/acadaece-2321-160c-8b5

元記事を表示

aws-cliとjupyterでAWSサービスのセットアップ

システムセットアップを簡単にするための全ての設定

# 環境
・MacBook Pro
・macOS Mnterey 12.5
・Apple M1 Max

## 1.AWS/IAM
AWSのIAMから、今回のjupyterでアクセスできる権限を持ったIAMユーザーを作成し、アクセスキーとシークレットアクセスキーを入手する。
そのキーの取り扱いには十分に注意する。

## 2.local/仮想環境の作成
仮想環境で実行するのがおすすめ。
Miniforge3+condaで作成しているので、 `conda acrivate hoge` という形で環境に入る。

### モジュールのインストール
`pip install awscli`

## 3.cliの設定
`aws configure –profile hoge`
AWS Access Key ID [None]: `{アクセスキー(各自)}`
AWS Secret Access Key [None]: `{シークレットアクセスキー(各自)}`
Default region name [None]: `{us-west-2(←オレ

元記事を表示

知っていて当たり前-16 ラムダ関数

# 知っていて当たり前-16 ラムダ関数

匿名関数,無名関数,λ関数,ラムダ関数などと言語ごとにいろいろな名前で呼ばれている。

“`julia
x -> x * 1.08
“`

#1 (generic function with 1 method)

これだけだと,実行できない。引数を与えるには以下のようにするが,メリットが見えない。

“`julia
(x -> x * 1.08)(100)
“`

108.0

“`julia
(x -> x * 1.08).([100, 200, 300])
“`

3-element Vector{Float64}:
108.0
216.0
324.0

ラムダ関数を変数に代入すると,その変数は関数名になる。

“`julia
price = x -> x * 1.08
“`

#7 (generic function with 1 method)

“`julia
price(100), price(200)

元記事を表示

cdkv2を使って別Stackで作ったlambda layerをlambdaに適用したメモ

## 概要
[前回](https://qiita.com/hibohiboo/items/960f713897cfc3b41501)のLambda群はlayerを使用しておらず、無駄なbundleが発生している。
また、同一stackでlambda layer を作成すると、毎回作り直しになるのも無駄である。
今回は、別StackでLambdaLayerを作成し、SSMにarnを保存して使用する方法をとる。

[ソースコード](https://github.com/hibohiboo/aws-cdk-v2/tree/id/7)

## 環境

+ Windows10
+ gitbash
+ aws-cli/2.7.21 Python/3.9.11 Windows/10 exe/AMD64 prompt/off
* cdk v2.35
* node v16.16.0

## ディレクトリ構成

“`yaml
– package.json # lambdaで使用するライブラリを定義
– cdk
– .env # 環境変数定義
– package.json # スク

元記事を表示

cdkv2を使ってLambdaオーソライザ―を作ってHTTPAPIでcognitoのグループを使った認可を試したメモ

## 概要
[前回](https://qiita.com/hibohiboo/items/5d20423ec6ba96e0f521)は、CognitoのJWTトークンによる認証を使い、ログインができるようになった。
今回は、Cognitoのグループ機能を使い、取得できるAPIの認可を与えることを試す。

![](https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/images/custom-auth-workflow.png)

[ソースコード](https://github.com/hibohiboo/aws-cdk-v2/tree/id/6)

## 環境

+ Windows10
+ gitbash
+ aws-cli/2.7.21 Python/3.9.11 Windows/10 exe/AMD64 prompt/off
* cdk v2.35
* node v16.16.0

## 準備
cognitoのグループを作成し、グループに前回作成したユーザを追加する。
今回は`group_1`を作成し

元記事を表示

OTHERカテゴリの最新記事