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

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

【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`を作成し

元記事を表示

AWSで自分用のLINE Botを作った①

# はじめに
傘を持たずに出掛けて、午後から雨が降ってしまって困ることありますよね。
天気予報を朝見れば良いのでしょうが、少し面倒です。

というわけで、AWSの無料枠を使って自分への通知用のLINE Botを作ろうと思いました。
朝、天気予報サイトのデータを自動でスクレイピングして、予報が雨なら「今日は傘が必要です」というようなメッセージが配信されるようなイメージです。他にも電車の遅延状況の通知もできたら便利そうです。(既にこのようなサービスはありそうですが。。)

## 今回の内容
AWSもLine APIもそこまで触ったことがないので、まずは簡単な部分から実装を目指します。
今回の記事では図のようなAWS環境を構築しました。
2つあるLambdaの機能はそれぞれ以下のとおりです。使用言語はPythonです。
– 返信用(reply_message関数):単純なオウム返しの機能
– 配信用(push_message関数):定型文の配信

![system_conf-aws.drawio.png](https://qiita-image-store.s3.ap-northeast-1

元記事を表示

CloudWatchで通知抑制は出来るのか?

# やりたいこと
CloudWatchAlarmで監視しているインスタンスAがCPU高騰した際に、
CloudWatchAlarmのSNS(Eメール)にて、
初回のみ指定のメールアドレスに通知し、2回目以降は通知さない。

# 結論、できない!
##### サポート回答
>CloudWatchAlarmには上記要件を実現する機能は存在しておらず、
初回のみアラームのアクションを実行するといった対応は出来かねます。

# 対応策
##### サポート回答
CloudWatchAlarmのDisableAlarmAction API(AWS CLIのdisable-alarm-actionコマンド)にて、
アクションの実行を無効化をする。

## 具体的には?
##### サポート回答
CloudWatchAlarmの通知先をSNSではなくLambdaを選択し、
DisableAlarmActionを実行したうえで、次回以降のアクションを無効化する方法。
**CloudWatchAlarm –> SNS –> Lambda –> SNS –> Eメール**

1つ目と2つ目のSNS

元記事を表示

AWS Synthetics Canaryで実際に動くlambdaのArnを調べる

コンソールからだと見つけられないのでAWS CLIから`jq`で調べる。
フィルターは(それほど長いわけではないが) 別ファイルにして実行

“`bash
$ aws synthetics describe-canaries | jq -f canary-lambda.txt`
[
{
“Name”: “example-canary”,
“Function”: “arn:aws:lambda:ap-northeast-1:xxxx:function:example-canary-xxxxx:1”,
“Role”: “arn:aws:iam::xxxx:role/example-canary-ExecutionRole”,
“Code”: {
“SourceLocationArn”: “arn:aws:lambda:ap-northeast-1:xxxx:layer:example-canary-xxxx:1”,
“Handler”: “index.handler”
},
“RuntimeVersion”:

元記事を表示

TensorFlow を低コストのサーバレス(AWS SAM)で実行する

## はじめに

以前、 SAM を使って TensorFlow をサーバレスで実行する方法について記事を書きました

ざっくり言うと、超低コストで AI を動かそう、と言うことです

https://qiita.com/RyoWakabayashi/items/0734f7f0a76a5dad3770

しかし、その時から SAM がバージョンアップして、 `sam init` のときの質問などが変わってしまいました

また、最終的に出来上がったコードを GitHub に上げていなかったため、今どうすればいいのか少し迷子になりました

というわけで、改めて TensorFlow を SAM でビルド、デプロイする方法とコードをまとめておきます

実装コードはこちら

https://github.com/RyoWakabayashi/tensorflow-lambda

今回は `sam init` ではなく、このリポジトリーのコードを使ってデプロイする手順を紹介します

Lambda と SAM の解説は過去の自分に任せます

– [Lambda とは](https://qiita

元記事を表示

Lambda+API Gateway+SlackでNotionにタスクを追加

# 今回やったこと
・SlackのスラッシュコマンドでDMからNotionにタスクを追加できる機能を作成した
・ワークスペースにいるほかの人が勝手にタスクを登録できないようにユーザーIDで制限を付けた

# Notionとは
Notionとはメモやプロジェクト管理,タスク管理のためのオールインワンワークスペースのこと。
個人利用であれば無料で利用することができる。

今回は下の画像のような形式のタスクを追加するものを作成する ~~(プリパラはいいぞ)~~
![task.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269896/e0b90495-6f9a-b04b-41dd-ce6461b086c6.png)

# Notion側の設定
[[Notion] いま人気の Notion の API を試してみる](https://zenn.dev/utah/articles/da8239aca15335)
↑このページの流れで設定を行って、シークレットとデータベースIDをメモしておいてください。
データベー

元記事を表示

AWS AmplifyでTypeScriptとExpressを使ったLambda関数のRESTful APIを作る方法

はいさい!ちゅらデータぬオースティンやいびーん!

# 概要
AWS AmplifyのCLIを通して、API GatewayとLambdaを用いたRESTful APIを作る際に、サーバーレスのExpressと、TypeScriptを使う方法を紹介します。

## 背景
まず、サーバーレスのExpressをなぜLambdaで使うのかですが、単純に筆者は、Expressに慣れており、Expressならさっさと書けるからです。筆者と同様な作者はいるかと思いますが、いかがでしょうか?

その他に、Expressで書くと、Lambdaを脱出する必要があったら、コードを再利用することもできるので、おすすめです。

実際、Expressをサーバーレスで実行するために、オープンソースのプロジェクトがあり、現役で開発が進んでいます。それほど人気な書き方・実装方法だと筆者は捉えています。

https://github.com/vendia/serverless-express

そして、なぜTypeScriptをLambdaに導入するかですが、こちらは、コードの品質を上げるためです。型がないバックエン

元記事を表示

AWS日記45(AWS Lambda – Layer)

# はじめに
今回はAWS Lambdaの[レイヤー](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/gettingstarted-concepts.html#gettingstarted-concepts-layer)を試します。
[Lambda レイヤーの作成と共有](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/configuration-layers.html)を参考に、Lambda関数で使用するライブラリを作成します。

# 動機
Lambda関数実行時に以下のエラーが発生し、エラー解決のため レイヤーにライブラリを設定しました。
“`bash
/var/task/bootstrap: error while loading shared libraries: libXXXXX.so.1: cannot open shared object file: No such file or directory
“`

# ライブラリのzipファイルを作成
“`bas

元記事を表示

UnityでLambdaを介してDynamoDBにアクセスするAPI連携を実装する方法

# 今回実装したこと
Unity ⇆ API gateway ⇆ Lambda ⇆ DynamoDB ⇆ S3
S3上に置いた画像データをおき、そこに至るパスをDynamoDB上にストックし、Unityからの入力をキッカケにAPI gatewayを経由してLambdaを起動して、入力情報に応じてDynamoDBから必要なS3のパスを返す実装を完成しました。
文字だけだと呪文にしか聞こえないので、実際に動いているところを共有します。

UnityでAWSのサービスを使用する場合、余計なSDKやプラグインなどを使用せず、あくまでAWSのサービスのみで完結する方法についてまとめました。
これができれば、フロントサイドは別にUnityじゃなくてもさまざまなサービスを利用することが可能です。

# 注意点
AWSの使用は従量課金制となりますので、ここから先を進んだ場合に使用量が発生する可能性があります。そのため、ここから先に進んで費用が発生しても自己責任でお願いいたします。

# AWS側の設定

## AWSへのログイン
他の記事やgoogleで検索し、AWSのコンソール画面まで進んでください

元記事を表示

Microsoft365の監査ログを取得するLambda

# はじめに
Microsoft365の監査ログの保存期間がデフォルト90日なので、それを長期間保存するためS3に出力するLambdaを作成しました。

# 参考

https://github.com/nickadam/exo-lambda

# 構成図

構成図は以下の様になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/d856cd57-3909-6efd-7a94-67f958ac718a.png)

– 任意のサービスが、対象のLambdaをInvokeします。
– Step Functionsを想定
– 与える引数は以下
– 監査ログ取得対象開始日時
– 監査ログ取得対象終了日時
– 保存先バケット
– オブジェクトキー名
– Microsoft365への接続に使う情報はSystemsManagerのParameter Storeから取得します。
– 格納先のPar

元記事を表示

AWS Lambda でLine bot を作成する

Line bot を作成し、自動でメッセージを送受信する方法を解説します。

## LINE Developersコンソールからチャネルを作成

下記手順を参考にLINE Developersコンソールからチャネルを作成します。
[LINE Developersコンソールでチャネルを作成する](https://developers.line.biz/ja/docs/messaging-api/getting-started/#using-console)

– [LINE Developersコンソール](https://developers.line.biz/console/)へログイン
– `Messaging API`のチャンネルを作成
![image](https://user-images.githubusercontent.com/38905609/181906073-e2371056-01c9-4329-abf1-5e3334fdc3f0.png)

## Webhook用のLambda関数を作成する

?これより先は下記記事の内容を前提とします
[REST AP

元記事を表示

[AWS.3] Lambda関数へのトリガー追加 (API Gateway)

# 1. 概要
AWS.1 および AWS.2 は、すでに広まっている情報を思いっ切り焼き直した記事でした。
もう少し高度なサンプルも予定していますが、その前に作成済みの Lambda 関数を Amazon API Gateway に対応させてインターネットから簡便に呼び出せるようにしておきます。

## Amazon API Gateway とは
バックエンドで動くビジネスロジックへアクセスするための「フロントドア」として機能する仕組み、とのことです。
具体的には RESTful API や WebSocket API の作成・公開・管理 を一手に担い、Lambda 関数をはじめとするビジネスロジックへアクセする「API」を提供します。

Amazon API Gateway
https://aws.amazon.com/jp/api-gateway/

### Lambda プロキシ統合について
API Gateway を利用する際は、クライアントから渡される情報を「呼び出し先のロジックがアクセスできる領域」へマッピングする必要がありました。
マッピングの考え方自体はともかく、定義

元記事を表示

LambdaのコードとCFnテンプレートの環境変数を同時に変更すると一瞬死ぬかも

# はじめに
Lambda関数をデプロイする際、CloudFormation(以下、CFn)を利用される方も多いと思います。
今まで知らなかったのですが、Lambda関数に乗せるソースコードとCFnテンプレートの両方で環境変数名を同時に変更するとダウンタイムが発生する場合があったので、備忘録として検証記事を書きます。

# 使用するCFnテンプレート
今回の検証に利用する、最小構成のLambda関数をデプロイするためのCFnテンプレートです。
Lambda関数のリソース定義において、Environmentに`HOGE: 1234`を追加し、Codeに`HOGE`を参照するPythonコードを直接書いています。

“` minimum_template.yml
AWSTemplateFormatVersion: 2010-09-09

Resources:
LambdaFunction:
Type: AWS::Lambda::Function
Properties:
Runtime: python3.9
FunctionName: hoge

元記事を表示

Go+API Gateway+Lambda+DynamoDBでサーバレスなAPI

# はじめに

こちらの記事はGoとAPI Gateway + Lambda + DynamoDBでサーバレスなAPIを作る記事となっています。
前回の記事の続きとなっているため、一部手順を省略しています。

https://qiita.com/tkhs1121/items/b1e332acdbc50fad8c45

https://qiita.com/tkhs1121/items/18d8ba86f1afdec13381

# 環境
MacBook Air M1
開発言語 Go

# 手順
## Lambda関数の作成

一から作成のままランタイムを`Go.1.x` アーキテクチャを`x86_64`にして関数の作成をします。
![Lambda.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1391445/e76764b3-3f67-c9c6-092f-efcfdf99e889.png)

### 必要なパッケージのインストール
“`
go get -u github.com/aws/aws-sdk-

元記事を表示

OTHERカテゴリの最新記事