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

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

DynamoDBで1:nのデータ構造を表現する

こんにちは太郎です。
最近、DynamoDBを触る機会があり1:nのデータ構造を表現しようとしました。
しかし、DynamoDB特有の設計方法に戸惑ったのでメモを残します。

## 前提条件
この先は例を挙げながら進めます。
ひとつのチームに複数の選手が所属しているという想定です。
チームの一覧を表示する画面と属する選手の一覧を表示する画面があります。
DynamoDBではRDBとは違い、どのようにデータにアクセスするのか次第で構造がかなり変わるため、最初にユースケースをリストアップすることが重要になってきます。

### テーブル設計
RDBで設計するなら2つテーブルを作って、一方が片方を参照しているという設計が一般的かと思います。
しかし、DynamoDBではテーブルの数は極力減らすという方針があります。
それぞれの一覧が取得できるように以下のような設計にしました。

| ID(PK) | dataType(GSI) | teamName | memberName | teamID |
| – | – | – | – | – |
| 1 | team | teamA |
| 2 |

元記事を表示

ELB(ALB,NLB,CLB)アクセスログを、CloudWatch Logsに出力させてみた(Lambda)

# はじめに
こんにちは、はやぴー(@HayaP)です。
日々のログ監視、皆さんはどうされていますか?

– とりあえず、ログをS3に出力している
– CloudWatchで見たいな、、と思いつつ諦めている

なんて人は、少なくないはずです。

そこで、今回は
ELBアクセスログを、CloudWatch Logsに出力した
経験を記したいと思います。

## 対象読者
– ログ監視設計者
– CloudWatch Logsに、ログを集めたい
– 毎回S3に、ログを見に行くのがしんどい

この記事が、クライドネイティブな運用の参考になれればと願っています。

# 概要
## ELB(ALB,NLB,CLB)アクセスログとは
ロードバランサーに送信されるリクエストの、詳細情報が記されているログです。

– リクエストを受け取った時刻
– クライアントの IP アドレス
– サーバーレスポンス
などの情報が含まれます。

https://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/application/load-balance

元記事を表示

AWS SAMでJavaScript v3のLambdaをデプロイする(Node16以下)

この記事は Lambda の Runtime が Node16 以下で`SDK for JavaScript v3`を AWS SAM でデプロイする方法について記述しています。

:::note info
Node18以降はv3に対応しているので、v3で書かれたソースだけをデプロイしても動きます。代わりに、Node18以降でv2で書いている場合はv2のSDKをソースに含めてデプロイする必要があります。
:::

プロジェクトを`sam init`で作成した場合、ルートパスでデプロイすると`template.yaml`や`__tests__`などのファイルもアップロードされてしまい見た目が悪いです。そのため`template.yaml`で`CodeUri`を指定すると思います。

“`yaml:template.yaml
SampleFanction:
Type: AWS::Serverless::Function
CodeUri: src/
“`

このようにすると、v3のSDKが`sam build`の対象に含まれなってしまいます。この場合は`package

元記事を表示

re:Invent 2022 サーバーレス関連の新サービス、アップデートまとめ

# re:Invent 2022で発表されたサーバーレス関連のアップデートをまとめました
## AWS Lambda SnapStart
https://aws.amazon.com/jp/blogs/news/new-accelerate-your-lambda-functions-with-lambda-snapstart/
– Lambda ファンクションのコールドスタート時のレイテンシを大幅に短縮する新機能
– Corretto ( ランタイムのファンクションをサポートし、最大 90% のレイテンシを削減
– Firecracker のスナップショット機能と、その他いくつかの機能改善によって実現。実行環境
の初期化終了時点のスナップショットを使うことで、初期化時間を削減
– 東京を始めはじめ 9 リージョンで一般利用開始に

### 試してみました
上記のブログの通り、[springboot2のサンプルアプリケーション](https://github.com/awslabs/aws-serverless-java-container/tree/main/samples

元記事を表示

CloudWatchとAWS Lambdaを用いてAmazon EFSのスループットモード変更を自動化してみた

# はじめに

業務で使用している`Amazon EFS`の`BurstCreditBalance`が2週間程度で枯渇するため、これまではその都度手動でスループットモードを変更するという対応を取っていたのですが、`CloudWatch`と`AWS Lambda`を用いて対応を自動化してみましたのでその際に設定した内容を記します。

## 注意事項
– この記事の内容は執筆時点のものであるため、最新の設定方法とは異なっている可能性があります。
– 入力が任意の設定項目については記載を割愛している場合があります。
– 自身の備忘録も兼ねて記載しているので内容の誤りや、より効率的に実現する方法がある可能性があります。気になる点などがありましたらお気軽にコメントいただけますと幸いです。。。!

# やったこと

1. Amazon SNS – トピック作成
1. CloudWatch – アラーム作成
1. AWS Lambda – 関数作成
1. IAM – 許可ポリシー追加

## Amazon SNS

Lambda関数を実行させるトリガとしてトピックを2つ作成しました。

| トピック

元記事を表示

Lambda ローカルでサンプルアプリを動かす

前回の記事でLambdaのローカル開発環境を構築したので、今回はAWSチュートリアルのサンプルをビルドして動かしてみる。

AWSのチュートリアルは下記を参考にする。

https://docs.aws.amazon.com/ja_jp/serverless-application-model/latest/developerguide/serverless-getting-started-hello-world.html

前回執筆した記事は下記の通り。

https://qiita.com/nobumichi/items/e876a448b7be21e7e51a

# 作業環境
– Windows11 Pro 22H2
– Windows Terminal
– PowerShell 7.3.1
– Python 3.9.13
– aws-cli 2.9.11
– sam-cli 1.67.0
– git 2.39.0.windows.2

# サンプルアプリ用の作業ディレクトリを作成する
任意の作業ディレクトリを作成する。私は`Documents`配下に`lambda`ディレク

元記事を表示

Dialogflow(GCP) + Lambda + Line Messaging API でLine Bot作ってみた

### 背景

母のお仕事の手助けとして、簡単なファスティング計算サイトを学生時代作っていたのですが、Herokuの無料公開プランが終了し閲覧不可になっていました。
これを機に、母に一番馴染みがあるLineで同じようなことをできないかと思い作ってみました。

#### Dialogflow

GCPのチャットボットが簡単に作成できるサービス。
AWSでいうAmazon Lexのようなもの。
https://wk-partners.co.jp/homepage/blog/webservices/dialogflow/

今回のようなLine等サービスとの連携や、Webhook設定も比較的簡単に行えました。
また、料金もテキスト認識であれば**無料**!!(1分あたり180リクエストまで)
Amazon Lexはお金かかっちゃうので、無料というところに惹かれました。

#### Line Messaging API

LineBotを作成し、応答メッセージの送受信を行うことができる。
応答のパターンもユーザーの反応や流

元記事を表示

Visual Studio のテンプレートを使ってAWSにWebAPIを作成する

# はじめに

AWS上にWebAPIを作成するときは、VisualStudioのテンプレートを使ってAWSにデプロイすると手早く環境を構築することができます。そのやり方について色々教える機会が増えてきたのでアウトプットしました。

# 前提条件

– Visual Studio 2022 をインストール済み。
– AWS Toolkit for Visual Studio 2022 をインストール、Credentialsを設定済み。

# 作成手順

## プロジェクトの作成

Visual Studio 2022を起動し、「新しいプロジェクトの作成」をクリックします。
新しいプロジェクトの作成画面で、右上のテンプレートの検索から「C#」「AWS」を条件として選択します。
すると以下のように4つ程候補が表示されるので、今回は「AWS Serverless Application with Tests (.NET Core -C#)」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.co

元記事を表示

S3に保存されているCSVファイルをjsonレスポンスで受け取る

## 概要
この記事では、S3上に保存されたCSVファイルをLambdaで取り出し、jsonで返す方法を紹介します。
HTTP通信の窓口にはAPIGatewayを使用しています。
APIGatewayのイベントをトリガーにLambdaからS3へアクセスします。

この記事では、S3のポリシー設定、Lambdaのロール設定、LambdaとAPIGatewayの設定は割愛し、Lambdaの実装にフォーカスします。

## 前提条件
CSVファイルは以下のものを使用しました。
全体のソースコードは下に載せます。
またAWSサービスの認証はそれぞれの環境でお願いします。

“`csvs:hoge.csv
“name”,”age”
“fuga”,”22″
“hoge”,”20″

“`

## `Lambda`の実装
実装には`Go`を用います。
大まかに以下の流れです。
1. s3にアクセスするためのクライアントを作成
2. s3からオブジェクトを取得する
3. オブジェクトを構造体にマーシャルする
4. 全ての処理が成功したらレスポンスを返す

以下で詳しく説明していきます。

###

元記事を表示

2022年にpythonとAWS Lambdaで作ったもの

# 1. まえがき
去年作ったプログラムのまとめ記事となります。

# 2. 競馬関係のTwitter BOT
2022年の初めに、[「AWSではじめるインフラ構築入門」](https://amzn.asia/d/9bYYI0P)の本を購入し、アプリを作成
自分でも作成して見ようと、興味がある競馬関連のTwitterのBOTを4つ作成

・1号機(今日のハクサン地方競馬出走情報Bot)

・2号機(明日のメイショウ冠名馬中央競馬出走情報と今日の競走結果情報BOT)

– 3号機(マカオ競馬の日本人騎手レース結果Bot)

https://twitter.com/macau_keiba/status/16094690722778972

元記事を表示

API Gateway経由でLambdaを呼び出す

## 概要
API Gatewayを自身で構築したことがなかったので、簡単なものを構築してみた。
/test(GET)でLambdaを呼び出せるようにする。

## 手順
1. Lambda関数を作成
2. API GatewayでREST APIを作成
3. APIをデプロイする
4. APIにアクセス

## Lambda関数を作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/255243/22611345-9295-9f9e-80ec-393dec386d6b.png)
コードは初期のまま
“`
export const handler = async(event) => {
// TODO implement
const response = {
statusCode: 200,
body: JSON.stringify(‘Hello from Lambda!’),
};
return response;
};

元記事を表示

Lambdaローカル開発環境構築手順

下記ブログを参考に、Lambdaのローカル開発環境構築手順をまとめる。

ローカルでLambda開発環境の構築手順紹介

# 本記事執筆時の作業環境
– Windows11 Pro 22H2
– Windows Terminal
– PowerShell 7.3.1

# Pythonインストール
下記を参考にPythonをインストールする。

~~https://blog.pyq.jp/entry/python_install_221102_win~~

https://starter-guide.od.pythonic-exam.com/ja/latest/python-setup/install-py39-win.html

2023/01/02追記:LambdaランタイムのPythonのサポートが3.9までだったため、
参考記事を差し替えた。

https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/lambda-runtimes.html

下記コマンドでPythonのインストールを

元記事を表示

Lambdaから直接Parameter Storeの値を取得する

今まではboto3を使ってParameter Storeから値を取得していました。
“`python
import boto3

ssm = boto3.client(‘ssm’)
response = ssm.get_parameters(
Names=[Parameter Store Key],
WithDecryption=True
)
“`
が、以下のアップデートにより、直接Parameter Storeなどから値を取得できるようになったので、実際に試してみた際のメモです。

https://aws.amazon.com/jp/about-aws/whats-new/2022/10/aws-parameters-secrets-lambda-extension/

# 必要な権限
SDKを使って実装していたときと同様に、Lambdaの実行ロールに以下の権限を渡す必要がある。
* `ssm:GetParameter`
* `kms:DecryptSecureString` (SecureStringを取得する場合に必要)

# 必要なレイヤーの追加
## AW

元記事を表示

EventBridgeを使ってLambda関数を月初のAM8:00に実行する

個人で運用しているLambda関数を月初に動かす際に調査した内容のメモです。

# やりたいこと
今回やりたいことは『毎月1日の8:00に特定のLambda関数を実行する』こと。

EventBridgeを使うことでcron形式での記述ができるが、タイムゾーンがUTCであるため時差を考慮する (JSTの9時間前を指定する) 必要がある。

`cron(0 0 1 * ? *)` のように月初を指定すると、9時以前に実行できなかったり、`cron(0 23 31 * ? *)` みたいに記述すると月末が31日まである場合は対応できるが、28日とか30日の場合にルールが複数出来そうで、可能な限り簡潔に記述したかった。

# 実現方法
EventBridgeのユーザーガイドを確認してみると、`L`を使うことで月末・週末を表現することができるらしい。
https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-create-rule-schedule.html
> * The L wildcard in the Day-of-mont

元記事を表示

AWS CDK – API Gateway(REST)+ Lambda Authorizer

# 前回記事

– [AWS CDK – Node.js 18 TypeScript での Lambda 実装](https://qiita.com/takmot/items/83326c5e3e3213038dde)

# 前提条件

– IaC は CDK(CDK v2)
– Lambda のランタイムは Node.js 18(拡張子は.mjs)
– Lambda の実装は TypeScript(AWS SDK for JavaScript v3)
– API Gateway の API タイプは REST API

# ファイル 構成

[前回](https://qiita.com/takmot/items/83326c5e3e3213038dde)から Lambda Authorizer を追加している。

“`
├─ src/
│ ├─ lib/
│ │ ├─ api-gateway/
│ │ │ ├─ handlers/
│ │ │ │ └─ sample-api/
│ │ │

元記事を表示

AWS LambdaでTypeScriptのコードを動かす最小の構成 with AWS SAM

# はじめに

AWS Lambdaってお手軽に使えるんでしょ?と思いながら簡単なLambdaを書いたのですが、初心者の私はTypeScriptの知識もないために、デプロイするまでが難しかったです。

AWS SAM CLIを使ってテンプレートから作成するとゴチャゴチャしていて分かりにくいと感じたので、Lambdaとして実行するための必要最小限の構成を手動で作る手順を残しておきます。

# 開発環境

– Windows 10
– Git bash
– Node v16.18.1 / npm 8.19.2
– aws-cli/2.9.9 Python/3.9.11 Windows/10 exe/AMD64 prompt/off
– SAM CLI, version 1.67.0

# 基本的なセットアップ

SAMでは `$ sam init` で対話型でテンプレートからプロジェクトを生成することが可能ですが、今回は使わずに一からプロジェクトを作ります。

ちなみに、Windows版のAWS SAM CLIをインストールすると、bashで `$ sam` を使うためにはひと工夫必要でし

元記事を表示

【小ネタ】Lambda の Dockerイメージをコードから作成した話

# はじめに

[Releaseタグ作成からEKSへのデプロイを自動化した話](https://qiita.com/ijufumi/items/c8c54c2295baf04113b2) でやった内容のうち、 `Lambda` に焦点を当てた内容です。

載せているコードは一部だけなので、全体を見たい方は上記の記事から辿ってください。

# 環境

* `Kubernetes`: `1.24`
* `AWS CDK for Golang`: `v2.56.1`

# やったこと

## Lambda用のコードを準備

`lambda` ディレクトリに、必要なファイルを用意します。
`Dockerfile` のみ載せています。
他は、`Github` リポジトリを参照。

* `Dockerfile`

“`Dockerfile
FROM public.ecr.aws/lambda/python:3.9

COPY . ${LAMBDA_TASK_ROOT}

COPY requirements.txt .
RUN pip install –upgrade pip && pip3

元記事を表示

AWS CDK – Node.js 18 TypeScript での Lambda 実装

# 前提条件

– IaC は CDK(CDK v2)
– Lambda のランタイムは Node.js 18(拡張子は.mjs)
– Lambda の実装は TypeScript(AWS SDK for JavaScript v3)

# ファイル 構成

`cdk init`で自動生成される構成から多少変更している。
[実践!AWS CDK #7 ファイル分割](https://dev.classmethod.jp/articles/cdk-practice-7-split-file/)を参考に、AWS リソースごとにリソース定義ファイルを分割している。
Lambda のコンパイル用に別途`tsconfig.json`を用意する。

“`
├─ src/
│ ├─ lib/
│ │ ├─ api-gateway/
│ │ │ ├─ handlers/
│ │ │ │ └─ sample-api/
│ │ │ │ └─ index.ts // Lambdaコード

元記事を表示

[Python / AWS lambda] AWS Lambda実行時にnumpyのRuntime.ImportModuleError

# エラー内容

“`bash:Cloudwatch Logsのロググループで確認
[ERROR] Runtime.ImportModuleError: Unable to import module ‘src.handlers.filename’:

IMPORTANT: PLEASE READ THIS FOR ADVICE ON HOW TO SOLVE THIS ISSUE!

Importing the numpy C-extensions failed. This error can happen for
many reasons, often due to issues with your setup or how NumPy was
installed.

We have compiled some common reasons and troubleshooting tips at:

https://numpy.org/devdocs/user/troubleshooting-importerror.html

Please note and check

元記事を表示

lambda Amazon API Gateway APIキー認証を用いた認証付きAPIを作ってみる

# 概要

– lambdaとAPI Gatewayを使ってAPIキー認証を使った認証付きAPIを作ってみたので方法をまとめる。

# 情報

– 筆者はMacOSの端末を使っている。

# 方法

## lambdaの準備

1. 下記の情報でlambda関数を作成する。
– 関数の種別:一から作成
– 関数名:returnHello
– ランタイム:Node.js 18.x
– アーキテクチャ:x86_64
– 基本的な Lambda アクセス権限で新しいロールを作成
1. 関数作成時に作成されたindex.mjsの内容は特に変更せず、Testを実行して、200のステータスと「Hello from Lambda!」の文字列が返されることを確認する。

## API Gatewayの準備

1. lambdaの「関数の概要」から「トリガーを追加」をクリックする。

![returnHello_-_Lambda.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0

元記事を表示

OTHERカテゴリの最新記事