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

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

【AWS】基本的なWebアプリケーションをクイック開発する

下記公式サイトのチュートリアルを参考に基本的なWebアプリケーションを一時間で構築してみる。

https://aws.amazon.com/jp/getting-started/hands-on/build-web-app-s3-lambda-api-gateway-dynamodb/

〇 今回構築したWebアプリケーションの構成図
![We_applivcation_basic.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/483556/cbc9c613-991d-66a3-c5b9-84c94b19e96f.jpeg)

## 開発手順

### 1. AWS AmplifyでWebアプリケーションの静的リソースをデプロイする

1. ローカルPCに下記のindex.htmlを用意し、ZIP形式で圧縮する
“`html:index.html



元記事を表示

EC2インスタンスの自動起動停止を、より柔軟にしてみた(Lambda)

# はじめに
こんにちは、はやぴー(@HayaP)です。
皆さん、サーバーの節約対策していますか?

クラウドを使うのであれば、なるべくサーバーを
効率的に使いたいものです。

そこで、今回は
EC2インスタンスの自動起動を、より柔軟に実装した
経験を記したいと思います。

## 対象読者
– サーバー代を節約したい。
– サーバー毎に起動、停止時間を柔軟にしたい。

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

# 概要
## 実現方法
AWS公式記事や、技術ブログを見ていると
複数のやり方がありますが、主に下記だと思います。

– [インスタンススケジューラー(AWS ソリューションライブラリー)](https://aws.amazon.com/jp/solutions/implementations/instance-scheduler-on-aws/)
– System Managerを用いた方法
– Lambdaを用いた方法

今回は、Lambdaを用いて
より柔軟なサーバーの自動起動停止を実現したいと思います。

## 要件
タイトルにもありますが

元記事を表示

ロググループに保存されているログを定期的にS3にエクスポートしてみた。

# はじめに
こんにちは、山田です。
現在携わっている案件で、CloudWatchロググループに保存されているログを一定期間経過後に長期保管用に作成したS3バケットにエクスポートするコードを作成したので以下に記載していきます。
よろしくお願いいたします。
# 全体概要図
全体概要図は以下の通りです。
![](https://storage.googleapis.com/zenn-user-upload/e34fe2b9e3ac-20230107.png)
**①:ロググループ一覧とS3フォルダ一覧を比較します。
②:比較した結果S3フォルダに名前がないもの似関しては、新規でS3フォルダを作成します。
![](https://storage.googleapis.com/zenn-user-upload/f3cc42e21f43-20230107.png)
③:ロググループに保存されているログをS3にエクスポートします。**
# コード
以下が今回作成したコードは以下になります。
“`python
import boto3
import datetime
import time

de

元記事を表示

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

元記事を表示

OTHERカテゴリの最新記事