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

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

AWS Lambdaに Funtion URLsを設定する

AppSyncから、cloudsearchを叩きたかったので、Lambdaに Funtion URLsを設定して、httpリゾルバで取得する形に。Lambdaリゾルバよりテストなどがしやすそうだったので。

ローカルでcloudsearchのLambda作成する形は以下。
https://qiita.com/rei-ta/items/e86546130d157561ba8e

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83911/2a6a1f95-3dc8-90a9-1745-5e6fa111b27f.png)

configurationから、Function URL (Lambda Function作成後の設定も可能)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83911/927cf5d2-ca9c-5536-2f11-ea9c0a4c45f9.png)

アクセス制御の

元記事を表示

コンテナイメージから作るLambdaをSAMでデプロイ

# はじめに

以前、Microsoft365の監査ログを取得するLambdaをコンテナで作りました。

https://qiita.com/a_b_/items/84d6ae3cf8a21b8b332c

これを以下のページを参考に、Cloud9上でAWS SAM CLIでのデプロイにチャレンジしてみました。

https://aws.amazon.com/jp/builders-flash/202107/new-lambda-container-development-4/?awsf.filter-name=*all

# 所感

– AWS SAM CLIを用いると、デプロイまでの手間が減る
– 特に、ECRの作成や管理を考えなくてよいのが大変助かる
– 上記ページでは作っていますが、現時点では不要のようです
– (Cloud9上の)AWS Toolkitのウィザードでも試しましたが、launch.json を使ったデバッグ実行がうまくいかなかった
– AWS SAM CLIのナビゲーションで十分便利なので、GUIのウィザードを使わなくてもよいかも

元記事を表示

FastAPI with Lambda + API Gatewayでサーバレスアプリケーションの作成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556658/6ec16fbf-ad49-b975-cf6a-642ab0476747.png)

## はじめに
株式会社マイスター・ギルド新規事業部のヒツジーです。
弊社新規事業部では、新規サービスの立ち上げを目指して
日々、アイディアの検証やプロトタイプの作成などを行っています!

技術の進歩は目覚ましいので、置いてかれないように新しい技術のキャッチアップにもいそしんでいます!
本記事では、FastAPI with Lambda + API Gatewayでサーバレスアプリケーションを作成する方法をご紹介します。
サーバレスアプリケーションには
– サーバーの管理が不要
– 使った分だけの支払いで済む
– 柔軟なスケーラビリティ

といったメリットがあり、新規サービスのプロトタイプ作成に向いていると思います。

本記事の手順通りに手を動かすと、さくっとREST APIを作れるようになりますよ!

## やりたいこと
FastAPIで作成

元記事を表示

Amazon S3 → Amazon SQS → AWS Lambda を連携する

# はじめに
S3のイベントをSQSキューに入れて、Lambdaに渡すまでの操作をまとめました。
![Screen Shot 2022-08-25 at 22.06.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1809963/d23f455f-42ab-5fd7-4bf8-13b7129ad88a.png)

# やること
– Lambda関数の作成 → SQS権限設定
– SQSキューの作成 → Lambdaトリガー設定
– S3バケットの作成 → イベント通知設定

# 1. Lambda関数の作成

まずはLambda関数を作成します。

関数名:test-202208(任意のもの)
ランタイム:Python3.9

その他はデフォルト設定のまま「関数の作成」
![Screen Shot 2022-08-25 at 20.29.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1809963/0d5abe

元記事を表示

保存したデータの分析

# データ分析との連携
S3内のオブジェクトやオブジェクトの中身に対し、**データ分析**を行う機能がある。
**S3 Select**と**Amazon Athena**は、CSVやJSONのような構造化されたテキスト形式のデータに対して、SQLのSELECT文を実行する**クエリ機能**。
**Amazon Redshift Specutrum**も同じ機能だが、大量のデータを処理できる。
# データ分析サービス
Amazon S3には、ログやIoT機器から収集したデータなど、後に分析したいデータも含まれるので、データ分析サービスとの連携が用意されている。
S3 SelectとAmazon Athenaは、S3バケットに格納したデータに対して分析するサービス。一方で、Amazon Redshift Spectrumは、S3バケット以外に置いたデータも分析できる。
## S3 Select
S3 Selectは、S3の機能で保存されている1ファイルのデータに対して、SQLを使って、集計や検索ができる機能。
CSVファイルやJSONの他、ログに使われるApache Parquetフォー

元記事を表示

なるべく手間をかけずにサーバーレスでCognitoユーザーがAWSマネジメントコンソールへログインできるようにする(ログイン画面も自作しないパターン)

# 経緯
[前回の記事](https://qiita.com/yusuke-takagi/items/9e914c43cc4b80055fb7)でCognitoユーザーがAWSマネジメントコンソールにログインできるようにしましたが、ログイン画面さえも自作しないでできることが分かったので書き残しておきます。

具体的にはCognitoユーザープールのホストされたUIを使います。
ホストされたUIでは不満がありログイン画面のデザインや動きを自作したい場合は[前回の記事](https://qiita.com/yusuke-takagi/items/9e914c43cc4b80055fb7)のパターンやウェブアプリを自作すると良いでしょう。

# 前提条件
– ユーザーにAWSマネジメントコンソールを使わせたい
– ユーザーはCLIでなく、ブラウザ(ログイン画面)でログインさせたい
– 事情があってAWS SSOに連携するIdPを使えない、使わない
– ログイン画面のためだけにウェブアプリを作りたくない
– サーバーの運用はなるべくしたくない
– IAMユーザーは発行したくない
– 運用チーム

元記事を表示

CloudFront導入とCognitoで認証した話

株式会社クラシコム テクノロジーグループの冨田です。

北欧、暮らしの道具店とクラシコムのコーポレートサイトにCloudFrontを導入しました。以前から画像についてはCloudFrontやimgixを利用し配信していました。今回はサイト自体を配信するようにしました。

# 背景

2022年8月に東証グロース市場へ上場しました。

– メディアへの露出が増えたため、突発的なアクセスがきても耐えられるようにしたい。
– 既に導入していた[CloudFront Security Savings Bundle](https://docs.aws.amazon.com/ja_jp/AmazonCloudFront/latest/DeveloperGuide/savings-bundle.html)でコストを抑えたい。

という動機からCloudFrontを導入しました。

# やったこと

## Cognitoによる認証

クラシコムの検証環境(ステージング環境)はALBでCognitoによる認証をかけており、社員のみアクセス可能にしていました。今回ALBの前段にCloudFrontを導入し

元記事を表示

AWSで遊ばない時間はNATゲートウェイを削除したい

# 背景
[AWSではじめるインフラ構築入門](https://www.seshop.com/product/detail/23455)を読んでAWSの再入門に励んでいるのですが、
NATゲートウェイのコストは馬鹿になりません。1円2円を求めてポイ活をしている私にとっては耐え難いレベルです。

使っている時間に課金されてしまうのは仕方ないとして、使っていない時間はNATゲートウェイを削除しておきたいものです。
ところがNATゲートウェイはルートテーブルなどの周辺機能にも影響を及ぼしており、手動で削除/起動するのは結構手間です。

そこで**AWS Lambda**を使ってNATゲートウェイの削除/起動を自動化してみます。

# 要件
要件は以下の通りです。
– NATゲートウェイの削除/起動や周辺機能の設定変更を自動化したい。
– 特定の時刻や曜日に自動起動するのではなく、オンデマンドで実行したい。手動でボタンをポチッとするイメージ。

# 前提
Lambda関数のランタイムは「Python 3.9」を選んでいますが、バージョンは大きな問題ではないでしょう。
CloudFormatio

元記事を表示

AWS Lambdaからteamsへ送信してみる

# 背景
* 新プロジェクトに夜間のバッチ処理の開始の時に、teamsチャネルへ送信する
* バッチ処理失敗の時も送信する

# 調査

* [HTML を使用してカードを書式設定する](https://docs.microsoft.com/ja-jp/microsoftteams/platform/task-modules-and-cards/cards/cards-format?tabs=adaptive-md%2Cconnector-html#format-cards-with-html)
* [メッセージを作成して送信する](https://docs.microsoft.com/ja-jp/microsoftteams/platform/webhooks-and-connectors/how-to/connectors-using?tabs=cURL)

# webhookを作成
* 参照: [送信 Webhook を作成する](https://docs.microsoft.com/ja-jp/microsoftteams/platform/webhooks-and-conn

元記事を表示

Serverless frameworkでGoをデプロイしたらPath errorが発生する

# はじめに

この記事は2022年8月にまとめていた「細かいつまずいたことをメモしておく(8月編)をそれぞれ投稿した内容になります
解決方法が最新でない可能性もありますのでご了承ください

# 問題

https://blog.mmmcorp.co.jp/blog/2020/06/07/aws-lambda-with-golang-gin/

https://zenn.dev/sti320a/articles/f60aa3ef305075

この記事をみて設定をしていたがいざデプロイすると以下のエラーが発生

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/810513/982f825a-772f-921b-3286-d61806242e96.png)

# 解決方法

“`Makefile
build:
go mod download
env CGO_ENABLED=0 GOARCH=amd64 GOOS=linux go build -ldflags=”-s -w” -o bi

元記事を表示

なるべく手間をかけず(Amplifyも使わず)にサーバーレスでCognitoユーザーがAWSマネジメントコンソールへログインできるようにする

# 追記
この記事を書いた後、さらにログイン画面(HTMLをS3でホスティング)の自作も不要なことが分かったため、以下の記事を書きました。
CognitoでホストされたUIが許容できる場合はさらに簡単に実現できます。
https://qiita.com/yusuke-takagi/items/37a51b453673b77bda23

# 経緯
タイトルの通りで、私の関わっているサービスで最近わりと切実に実現する必要があったのですが、ググってみてもそのものズバリの情報がなかなか見当たらず、調査にけっこう時間がかかってしまったので他の方々や後の自分が迷いなく実現できるように書き残しておきます。

もっと良いやり方があるよという方は教えてください。

# 前提条件
– ユーザーにAWSマネジメントコンソールを使わせたい
– ユーザーはCLIでなく、ブラウザ(ログイン画面)でログインさせたい
– 事情があってAWS SSOに連携するIdPを使えない、使わない
– ログイン画面のためだけにウェブアプリを作りたくない
– サーバーの運用はなるべくしたくない
– IAMユーザーは発行したくない(

元記事を表示

Nuxt.js(3) で作ったアプリをAWS Lambda 1つで公開する

# 備忘録

“`nuxt.config.ts
export default defineNuxtConfig({
nitro: {
preset: “aws-lambda”,
serveStatic: true,
},
})
“`

Lambda Functions URLを使用する
APIGateWayでもできるらしいのだが、自分の場合上手くいかなかった。
※.output/public/_nuxt配下のアセットの公開がAPI GateWayの場合UrlにStageの値が入る為、上手く折り合いをつけれなかった
解消出来たらよりいいのになと思っています。

https://github.com/nuxt/framework/issues/3586

“`serverless.yml
service: nitro-sample

provider:
name: aws
runtime: nodejs16.x
region: ap-northeast-1

package:
patterns:
– “!**”

元記事を表示

serverless frameworkで作成したAPIでLambdaに送信した値を取得。

# はじめに
Lambdaの引数から値を受信する方法を記載していく。
# メイン
dynamoDBになんやかんやするときに、使えるので書いてみた。
## パスから取得する
serverless frameworkでGETメソッドのAPIを作成するソースが以下になる。
API作成時のパスは、「https://{APIのId}.execute-api.{Resion}.amazonaws.com/dev/get/{id}」 のようになり、{id}の部分に渡したい値を書く。

“`functions.yml
function:
get:
handler: get.get
events:
– http:
path: get/{id}
method: get
# 統合サービスをLambdaにする
integration: lambda
“`
取得方法は、
“`get.py
def get(event, context):
# pathに{}で指定した値が入っている。
path = event[“pat

元記事を表示

Node.js v12 を使用している Lambda をリストアップ

aws-cli で Node.js v12 を使用している Lambda をリストアップする方法です。
AWS SSO を使用している場合の方法になります。

# AWS CLI の準備
aws cli のインストール手順は省略。
aws sso のスタート画面を開く。
対象のアカウントの Command line or programmatic access から “`Option 1: Set AWS environment variables“` をコピー
ターミナルでペーストしてそのまま実行。

“`
>export AWS_ACCESS_KEY_ID=”ACCESSKEYID”
export AWS_SECRET_ACCESS_KEY=”SECRETACCESSKEY”
export AWS_SESSION_TOKEN=”SESSIONTOKEN”
“`

# コマンドの実行
以下のコマンドを実行。
リージョン、Node.js のバージョンは適宜変更して実行。
“`
aws lambda list-functions –function-version ALL

元記事を表示

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

元記事を表示

OTHERカテゴリの最新記事