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

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

署名付きアップロード・ダウンロードの構成をterraformで作る。

# はじめに
[前回](https://qiita.com/sakai00kou/items/ba5618f0a67064355752)、[AWSブログ](https://aws.amazon.com/jp/blogs/news/large-size-files-transferring-by-serverless-s3presignedurl-and-clientside-javascript/)で公開されていた署名付きアップロード・ダウンロードの構成をAWSマネジメントコンソール画面から構築しましたが、色々と使えそうなので、terraformの勉強も兼ねてterraform化したので公開しようと思います。

– 【前】[API Gateway、Cognito、Lambda、S3を使って署名付きアップロード・ダウンロードを実装する。](https://qiita.com/sakai00kou/items/ba5618f0a67064355752)

**元のブログ記事**
– [AWS のサーバーレスと Amazon S3 署名付き URL、クライアントサイド JavaScript

元記事を表示

初心者がAWSでWebサイトを公開するまで

# やりたいこと
AWSでWebサービスを公開するまでの流れをまとめました。
公式が用意しているサンプルWebサービスを使ってWebサイトの環境構築を学びます。

参考にした公式チュートリアルはこちらです。
https://aws.amazon.com/jp/getting-started/hands-on/build-serverless-web-app-lambda-apigateway-s3-dynamodb-cognito/

# サンプルWebサービスの説明
まずサンプルWebサービスがどんなものかをざっくりと説明します。

![いらすとやユニコーン](https://2.bp.blogspot.com/-kwlzIOtHvuM/XOPXUYPc19I/AAAAAAABS7k/YyQ6OZTB2O4Wg4HSlYMgfOKkOy5E99uUgCLcBGAs/s800/yumekawa_animal_unicorn.png)
シチュエーションは以下です。
> あなた(の会社)はユコニーンを世界各地に派遣する能力を持っています。
そこで世界中の人がユニコーンをタクシーのように乗り

元記事を表示

bundle install先に ‘vendor/bundle’を指定しないとLambdaでInit error when loading handlerになる

# はじめに
Rubyを使用しているプロジェクトで3.2にバージョンアップする対応を進めていたのですが、その際に発生したエラーに沼ってしまい、参考記事も見つけることができなかったのでまとめることにします。

# 環境
– Ruby2.7.5→3.2
– Rails5.2→7.0
– Docker image public.ecr.aws/lambda/ruby:2.7→3.2
– serverless 3.33.0

# 状況
Ruby on Railsアプリケーションをサーバレスデプロイしているプロジェクトでバージョンアップ対応を行っていました。具体的にLambdaのランタイムイメージとGemfileをRuby2.7から3.2にバージョンアップし、デプロイを行ったのですがページにアクセスできなくなりました。

Cloud Watchでログを確認すると以下のエラーが発生していました。

“`
“Could not find net-pop-0.1.2, net-smtp-0.3.3, rake-13.0.6 in locally installed gems”
“`

![imag

元記事を表示

2023年のAWSアップデート追いかけてみる(6月後半編)

どうも、若松です。

前回の記事に引き続き6月後半のアップデートを追いかけます。

(追記)一覧にまとめました

https://qiita.com/t_wkm2/items/2b0fcf742b94c2eacea2

# AWSアップデート2023年6月後半編
#### [Amazon CloudWatch がダッシュボード変数のサポートを開始](https://aws.amazon.com/jp/about-aws/whats-new/2023/06/amazon-cloudwatch-dashboard-variables/)
ダッシュボードに変数が加わりました。
変数を変更するとそれに応じてグラフに表示される値が変化するというもののようです。
ディメンジョンごとにビューを作成するのではなく、変数でディメンジョンを切り替えられるのはすっきり見えていいですね。

#### [Mountpoint for Amazon S3 が新しいファイルの作成のサポートを追加](https://aws.amazon.com/jp/about-aws/whats-new/2023/06/mount

元記事を表示

2023年のAWSアップデート追いかけてみる(7月前半編)

どうも、気づいたら2個もAWS資格を失効してた若松です。

AWSのアップデートってre:Inventのときだけ必死に追いかけるのに年明けになるとサボっちゃうの何なんですかね?
ご多分に漏れず、私も2023年のアップデートを全然追いかけられていません。
当然ながら、AWSは年中アップデートを続けているわけで、その数も年々多くなってきて追いかけるのが大変です。
そこで、2023年分のアップデートを一気に舐めて、個人的に熱いと思ったものをピックアップしていきます。
※現時点で翻訳記事が出ていないものはGoogle翻訳で日本語化したタイトルにしています。

(追記)一覧にまとめました

https://qiita.com/t_wkm2/items/2b0fcf742b94c2eacea2

# AWSアップデート2023年7月前半編
#### [Meta の Llama 2 基礎モデルが Amazon SageMaker JumpStart で利用可能になりました](https://aws.amazon.com/about-aws/whats-new/2023/07/llama-2-foun

元記事を表示

【AWS Lamba】コンテナイメージから Lambda関数を作成する

## ローカル環境の準備
– Golangインストール
https://go.dev/dl/

– Dockerfile作成
“`dockerfile:Dockerfile
FROM golang:1.17-buster as builder
WORKDIR /go/src/lambda
COPY go.mod go.sum ./
RUN go mod download
COPY ./ .
RUN go build -a -o /main .

FROM debian:buster as runner
WORKDIR /app/
COPY –from=builder /main /main
ENTRYPOINT [ “/main” ]
“`

– main.go作成
“`golang:main.go
package main

import (
“fmt”
“context”
“github.com/aws/aws-lambda-go/lambda”
)

type MyEvent struct {
Name stri

元記事を表示

API Gatewayのリクエストバリデーション機能でLambdaのリソース消費を抑制する

# 課題

AWS SAM (Serverless Application Model)は、サーバーレスアプリケーションを簡単に作成、デプロイするためのフレームワークです。
私たちのプロジェクトでは、API Gateway, Lambda, DynamoDBを組み合わせたサーバーレスアーキテクチャを採用しており、AWS SAMを用いてデプロイを管理しています。

しかし、その際に直面した課題があります。
それは、リクエストのバリデーションをLambda関数内で行っていたため、不適切なリクエストがLambdaまで到達してしまい、リソースの無駄遣いにつながっていました。

# 考えた方法

この課題に対して考えた解決策は、API Gatewayでリクエストのバリデーションを行うことです。
AWS SAMのテンプレートを修正して、API Gatewayにリクエストの定義を追加し、リクエストが定義に合致しているかどうかをチェックする設定を加えることで、リソースの無駄遣いを防ぐことが可能になります。

# 今日の目標

今日の目標は、AWS SAMのテンプレートを修正し、API Gatewayで

元記事を表示

「お前らの AWS Lambda エイリアスは間違っている」と言われた気がしたので備忘録

# はじめに

こんなこと言われてないです。ごめんなさい。

AWS Lambda のエイリアス機能について先日思ったことなんです。

インターネットでよく見かける紹介は、

**開発環境は dev エイリアス、本番環境は prod エイリアスを利用して、環境を分けることができます!**

って感じではないでしょうか?でも**↑これ、無理じゃないですか?**

いや、やろうと思えばできますよ。

でも、運用上怖い点があるし、何より IaC(ここでは CDK を念頭に置きます)との相性悪すぎじゃない?と思ったので、思ったことを書いてみます。[^1]

# 前提知識

いくつか前提知識を整理しておきます。AWS Lambda についてある程度利用経験がある方はスキップいただいてOKだと思います。

## AWS Lambda

https://aws.amazon.com/jp/lambda/

何かしらのイベントをトリガーにコードを実行できる AWS のサーバーレスコンピューティングサービスです。

いくつか提供されているランタイムがあり、例えば Node.js で動くアプリケーションを

元記事を表示

lambda + RDS proxy + Aurora serverless v2でまぁまぁ請求された話し

# はじめに
医療系クラウドサービスを提供しているレイヤードという会社で働いています。

新サービスを開発中で、社内リソースの問題から外注に開発してもらっていました。
まだ **本番稼働していないにも関わらず、2023年6月25日時点でaws費用が$915、月末予測が$1,200にもなっており** 、調査依頼してもはっきりとした回答が無かったので、横槍ですが原因調査した内容の共有です。

調査は弊社エンジニアの采本さんがほとんどやってくれました。
いつもありがとう、頼りにしてます。

[![Image from Gyazo](https://i.gyazo.com/934ab01b3a63566353cc56015cdf65ff.png)](https://gyazo.com/934ab01b3a63566353cc56015cdf65ff)

# アーキテクチャ構成
アプリケーションの構成は以下のとおり。

言語:TypeScript
フロント:Vue.js
バックエンド:Node.js on lambda
データベース:RDS proxy + Aurora serverless v

元記事を表示

Amazon Connectからエイリアス版Lambda関数を呼び出す方法 [小ネタ]

### はじめに

ARI コンタクトセンター最適化支援チームのbayashiです。

Amazon Connect インスタンスのコンソール画面から登録できるLambda関数は、通常の方法だとエイリアス(特定関数のバージョンに対するポインタ)がない最新の関数を指定することになります。
・問い合わせフロー > AWS Lambdaから関数の追加
![ac-lambda1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2605350/8db9f284-5b12-db8b-b7f5-6bd3bfa81a42.png)

「lambda add-permission」コマンド登録後に、フローの「AWS Lambda 関数を呼び出す」ブロックでLambdaエイリアスのARN値を直接記載する方法もありますが、今回は「AWS Lambda 関数を呼び出す」ブロックの一覧リストから関数を選択できる方法を共有します。(AWSサポートから対応方法を回答いただきました。)
既にご存じの方もいるとは思いますが、Web検索して

元記事を表示

EventBridgeからLambda起動

# はじめに
2年目に突入したエンジニアでございます。

今回はAWSを少し触れることがあったので忘れないためにここに備忘録として記載しておきます。

# 今回の内容:EventBridgeからLambdaを起動する。

[1. Lambda関数の用意](#1-Lambda関数の用意)
[2. EventBridgeルールの作成](#2-sEventBridgeルールの作成)
[3. 結果の確認](#3-結果の確認)

## 1. Lambda関数の用意

まずは今回実行するLambda関数を用意します。

https://qiita.com/Hamoto/items/bd486937de142a589f8f

上記の記事を参考にしましたが、今回EventBridgeからLambdaを起動するだけの構成を予定しているため、
メッセージを返すのではなくS3にファイル出力するようなコードにしてみました。

### コードの修正

“`python:lambda_function.py
import boto3

def lambda_handler(event, context):

元記事を表示

Lambdaでコンテナイメージから関数を作成する

# 目的
Lambdaの関数を作成する際、3つのケースから選択できます。
– 一から作成
– 設計図の使用
– コンテナイメージ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621838/df642e70-7f56-a11c-6d31-64492721ca18.png)

今回はこの「コンテナイメージ」から関数の作成を行う方法について、AWSベースイメージを使う場合と代替イメージを使う場合に分けて示します。

公式サイトは以下↓
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/images-create.html

# コンテナを使用するメリット
– カスタムランタイムの使用:
– 従来のLambdaでサポートされている実行環境に依存することなく、好みの言語、フレームワーク、ライブラリを選択し、独自の実行環境を構築できる
– バージョン管理:
– コンテナのイメージはイメージレジストリであるECRで管理されるため、

元記事を表示

2023/07 GlueとStepfunctions①(全体像の把握編)

# 執筆にあたって
弊社では、S3に保存されているデータをRDS(MySQL)にimportする際に、LambdaやECSを用いておりました。
この作業をAWSのサービスの一つである「Glue」で行うように変更することが決まりました。
それに伴って情報のキャッチアップを行なっていたのですが、Stepfinctionsと合わせて運用されている記事で、lambdaを使って実装されていたり(今回は直接実行をしたい)、古めの記事や内容のものが多かったので、新しい情報を纏めようと思いました。
※現在は検証段階なので、記事の内容が「全て正しい」、あるいは「ベストプラクティスである」というわけではありません。
※以下、本記事においては、RDSはMySQLと同義とします。

# この記事におけるGlue活用の目標
S3に保存されているデータをRDSにimportする際に、lambdaやECSを使わずに、GlueとStepfunctionsだけを用いて完了させることを目標としています。
以下、具体的にimportに必要なGlueの操作をまとめます。

・Glue crawlerの作成
・Glue cra

元記事を表示

100台超のEC2自動停止をAIに聞いて3分で実装してみた!

EC2の自動停止(メンテ不要Version)

以前の執筆記事でLambdaでのEC2の自動停止について
ご紹介しました。
[EC2の自動停止について](https://qiita.com/fukuchan_milk/items/64c924f8fa3fd4342ba8)

上記は超入門編で、AWSを初めて利用する方でも
行えるように記載しました。

さて、前回のコードでは課題にも記載した通りEC2の数が増減した場合にLambdaコードの修正が必要となってしまうため管理が煩雑になっています。

今回はメンテナンスフリー(EC2が増減してもLambdaの修正が不要!)な
コードでEC2の自動停止を実現します。

今回もAIに質問しながらコードを実装しました。

Q1)東京リージョンで稼働するすべてのEC2を日本時間の午前1時に停止したいです。LambdaでPythonコードを書くとどうなりますか

A1)EC2インスタンスを停止するPythonコードをLambdaで実行することができます。以下のコードは、東京リージョンで稼働するすべてのEC2インスタンスを日本時間の午前

元記事を表示

API Gateway、Cognito、Lambda、S3を使って署名付きアップロード・ダウンロードを実装する。

# はじめに
AWSが運営している[AWSブログ](https://aws.amazon.com/jp/blogs/news/)を流し見していたところ、ちょうどこんなシステムを作ってみたいと思い描いていた内容と合致するソリューションが手順・サンプル付きで紹介されていたので、少しハマったところも含めて手順をまとめてみようと思います。

– [AWS のサーバーレスと Amazon S3 署名付き URL、クライアントサイド JavaScript で大きなサイズの複数ファイルの一括アップロード・ダウンロード機能を実現する方法](https://aws.amazon.com/jp/blogs/news/large-size-files-transferring-by-serverless-s3presignedurl-and-clientside-javascript/)

2023/7/22 今回の構成をterraformで作りました。

– 【次】[署名付きアップロード・ダウンロードの構成をterraformで作る。](https://qiita.com/sakai00kou/items

元記事を表示

NestJSをAPI Gateway + AWS Lambdaで構成する(その2)- NestJS実行用のローカル環境構築

# つづき、その2
– [その1 NestJSやLambdaでのnode.jsの話し](https://qiita.com/ssugimoto/items/988320d34022555401fb)

## 動かし方
– REAEMEは、こちら https://github.com/serverless/examples/blob/v3/aws-node-typescript-nest/README.md
## 上記のREAMEだけではよくわからない場合に必要なものは
### Node.js実行環境
– コンテナを使うことを推奨
– 環境を汚さない、人ごとや環境依存しない、他のプロジェクトが動かなくなるようなことはない
– Node.js 16 または Node.js 18(18を使う方が良いです)
– バージョンやコマンド確認
“`
which node
node -v
npm -v
“`

### serverless frameworkインストール、V3を使う
– V3
– グローバルインストール

“`
npm install -g serverless
np

元記事を表示

Serverless Express rootディレクトリのPOSTメソッドで403発生

# rootディレクトリのPOSTメソッドで403発生

### 結論

API Gatewayの特定のリソース配下にProxを配置してる場合、Expressでルートはproxyのルートを指定すること!

“`jsx
//account (POST)
|-//abc(GET/POST)
|-//efg(GET/POST)
“`

![API Gatewayの設定](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/5968e051-e33f-46e5-975c-a1a78beddfc3/Untitled.png)

API Gatewayの設定

“`jsx
a.app.use(‘/’, accountRouter);
b.app.use(‘/account’, accountRouter);
c.app.use(‘/abc’, abcRouter);
d.app.use(‘/efg’, efgRouter);
“`

Q: 次のパスへのリクエストは、上記どのルーティング処理が実行されるでしょうか。

元記事を表示

CORS対応localhost:3030Node.js(Express)からAPIGateway

■内容

ローカルで立ち上げたExpressからAPI Gateway経由でLambdaを実行しようとすると、下記エラーがレスポンスされる。

> Access to XMLHttpRequest at ‘[https://{hostname}/xx’](https://vtravelapi.dtai-entrancepoc.com/auth%27)
from origin ‘http://localhost:3030’
has been blocked by CORS policy: No ‘Access-Control-Allow-Origin’ header is present on the requested resource.
>

![Untitled](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/ed0d86d2-0d1d-4827-a3cd-d8b319809fde/Untitled.png)

FrontEnd   ー>  BackEnd

(Express)     (AWS API

元記事を表示

Lambda(Node.js18) SystemParameter(SDK v3)

# Lambda(Node.js18) SystemParameter(SDK v3)

### 注意書き

– AWSに関する説明は省略します。(Lambda、SystemParameterの実装/設定方法など)
– C#でLambdaの実装経験がありますが、Node.jsでのLambda作成が初めてでいろいろつまずいたので、備忘録として残しています。

# やること

1. Node.js14ラインタイムのLambdaで、SystemParameterに登録したSecureStringを取得する
2. Node.js14→Node.js18ランタイムへのアップデート対応
3. SDKを利用せずに、SystemParameterから値を取得する (未対応)

## 1.SDKを利用してSystemParameterの値を取得する(Node.js14)

“`jsx
const AWS = require(“aws-sdk”);

exports.handler = async (event) => {
console.log(“Test”);

// // 新規 A

元記事を表示

NestJSをAPI Gateway + AWS Lambdaで構成する(その1)

# はじめに
– いくつかの記事に分けて投稿していく予定です
– NestJS + API Gateway で動かすことを目標にしていきます
– NestJSの使い方等も調べていきます
– [本題](#本題)

## きっかけ
– AWS Lambda Node.js をTypescriptで開発するのはよくある。TypescriptではなくNode.jsそのまま使う場合もある
– AWS Lambdaを1つ1つのハンドラー(1つ1つのLambda function)だけでなく、共通コンポーネント 等が必要になる
– 複数人でバックエンドを作成していくと、手元で 気軽にsls deploy したりして 知らぬ間にhandlerは指定されているけどコードが無いとか、Lambda Layerが変わったとか、CloudFormation 等が壊れるんじゃないか?
– CICDに載せる前の段階で動作確認したい
– GitHub等にpushしていない段階でクラウドに反映したい
– GitHub等のfeatureブランチに対応した誰でも自由に使えるクラウドのENVが欲しい(

元記事を表示

OTHERカテゴリの最新記事