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

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

injector(DIコンテナ)の隠蔽

[前々回](https://qiita.com/odxdoge/items/6031419f9461a8775d98)と[前回](https://qiita.com/odxdoge/items/2d1924e7d4fbe92e9969)の続きです。
クラスの依存関係の管理方法について解説しました。
injectorの実用的なテクニックについて深掘りします。

## アーキテクチャ設計と実装

今までのコードでDIの考え方について解説してきました。また、その実装をライブラリを使って実現する方法についても示してきました。このようにアプリケーションのアーキテクチャを設計し、決定した場合、その後実装を行うはずです。
しかし、実際にAWS Lambdaで実装すると、ひとつ思うことがあります。
lambda handlerの最初にinjectorインスタンスを作成し、設定を行う必要があり、複数のLambdaを運用すると重複したコードになります。

これにはいくつかの問題が挙げられます。
– 関係するすべてのLambda実装者がinjectorについて理解している必要があります。
– injecto

元記事を表示

Lambdaで「libcrypt.so.1: cannot open shared object file: No such file or directory」を解消

# はじめに

今回の記事は、Ruby3.2でLambdaを使用しようとしたときに、「/var/lang/bin/ruby: error while loading shared libraries: libcrypt.so.1: cannot open shared object file: No such file or directory」というエラーが出たので、”**力業**”で解消したときのお話です。もしかしたらRubyでも[こちら(Pythonです)](https://github.com/keithrozario/Klayers)のように、出来上がったレイヤーを配布しているかもしれませんので、お時間ある方は探してみてください。

# なぜエラーがでたのか?

Lambdaでは最近Rubyの3.2のランタイムが提供されるようになりました。しかし、Rubyのランタイムが依存しているLinux依存のライブラリまでは網羅されていないため、見つけることができずタイトルにあるエラーが出てしまいました。

# どのように解消したのか?

別の環境でライブラリをLambdaのレイヤーとし

元記事を表示

Lambdaで特定のサブネットのインスタンスを自動停止する方法

## はじめに
当チームではテスト環境等の社内利用用途を目的としたEC2インスタンスは業務時間内しか利用しないことが多いため、深夜帯や休日に稼働し続け無駄なコストがかかってしまうことがあります。
そういった不要なコストを抑えるためにテスト環境専用のサブネットを用意し、定時でサブネット内のすべてのインスタンスを停止する機能があると便利だなと思っていました。
件数が少ない時期はAmazon EventBridgeでルールを作成し個別で自動停止の設定をしていましたが、件数が増えるにつれ一括の設定が必要になり構築することにしました。

今回はLambdaを使って構築をしましたので設定方法を記述します。

## 構築イメージ
AWSサービス全体の構築イメージは以下の図の通りです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3124412/a8870731-8076-9f68-664c-ea007861c001.png)
今回設定方法を記述するのは以下の工程です。
* AWS EventBrid

元記事を表示

CodeBuildとSAMを組み合わせてLambdaを自動デプロイする

## 背景
複数のLambdaで構成されているサーバレスアプリにて、Lambdaのデプロイをコンソールから行なっていました。
時間がかかるのとオペミスのリスクがあったのでCodeCommitにpushするとAWS SAMで自動デプロイが行われるデプロイパイプラインを構築しました。

[SAMの初歩的なこと](https://qiita.com/lyd-ryotaro/items/6ae7f8813d4769dbf184)はこちら
上記のSAM操作をCodeBuildにて行う、というイメージです。

## 全体図
CodeCommit→CodePipeline→CodeBuildでSAMを起動してデプロイという流れ
CodeBuildが肝になってきます
[![Image from Gyazo](https://i.gyazo.com/438c293928c1f1710819c3a1d6008da1.png)](https://gyazo.com/438c293928c1f1710819c3a1d6008da1)

## CodePipelineとCodeBuildの準備

### Cod

元記事を表示

APIGatewayタイムアウト不可避を回避(神回避)

## APIGateway初心者あるある

「LambdaとAPIGatewayでAPI作ったで!
ちょい処理重めやけどLambdaをは最大15分まで動くし、15分もあったら余裕やわ」

ポチっ(実行)

30秒後
~~~bash
{
“message”: “Endpoint request timed out”
# 訳: いつまでリクエスト待たせんねんワレ
}
~~~
「15分間は耐えるんちゃうんかい」

(ナレーション)
彼はどこで間違えてしまったのでしょうか。
そうです、Lambdaは確かに設定を変えれば15分まではタイムアウト時間を延ばせますが、APIGatewayは最大30秒しか耐えられないのです。

つまりこのタイムアウトはLambdaによるものではなくAPIGatewayによるものなのです。その証拠に、Lambdaのログを見るとタイムアウト後も動作していることが確認できます。

## 解決策:APIを二つに分けて回避
やり方はいくつかあるみたいですが、今回は「Lambda発火API」と「Lambda状態取得API」の二つのAPIを用意することで解決します。

元記事を表示

AWS SAM超入門 – 準備からLambda関数のデプロイまで

## 概要
今までLambdaコンソールから手動で関数を書き換えたり設定値を変更してデプロイを行なっていました。
手動作業が多くて危険だったのでAWS SAMを試すことにしました。
動作の理解として超簡単な入門コードでSAMを試してみたので残します。

## 前提
対象AWSアカウントのプロファイルをconfigに設定していること
Node.js 18.x でタイムアウトが3分のLambdaをデプロイしてみます

## 全体図
[![Image from Gyazo](https://i.gyazo.com/2585b8aec1dbaa99787b5e4d76c54b72.png)](https://gyazo.com/2585b8aec1dbaa99787b5e4d76c54b72)

## SAMについて
– Lambda関数コードだけじゃなく、タイムアウト値やトリガーといった設定までテンプレート(SAMファイル)で管理できる
– デプロイパッケージをS3にアップロードしてCloudFormationがLambdaに展開させる

## SAMのインストール
“`terminal

元記事を表示

【ナレッジ】AWS Parameters and Secrets Lambda Extension は、ハンドラー関数内から呼び出さないと400Errorになる

# 0. 要約
タイトルの通りですが、
**[AWS Parameters and Secrets Lambda Extension](https://docs.aws.amazon.com/ja_jp/secretsmanager/latest/userguide/retrieving-secrets_lambda.html) は、ハンドラー関数”外”から呼び出しをすると HTTP 400 Error が出てしまいます。**
そのため、ハンドラー関数”**内**”から呼び出しましょう!

# 1. はじめに…
[2022年10月に、AWS Parameters and Secrets Lambda Extension が発表されました。](https://aws.amazon.com/jp/about-aws

元記事を表示

AWS ECRのイメージタグ付けを簡単に行う方法

# はじめに
ECRのイメージタグ付けを、Lambdaで簡単に行う手順です。

ECRのイメージタグは、マネジメントコンソールから編集できず、不便な場合があります。
CLIで設定出来るのですが、お手軽に設定できるようにしました。

# やりたいこと

### ECRのリポジトリ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155165/65b6756c-2cbc-5785-9c67-9de5330184bd.png)
このようにリリースしてみたが、前のバージョンに戻したい、releaseタグを前のバージョンに付け替えたいときなどに、本ツールが使えます。

これは一例で、後からタグをつけたい場合や、タグを整理したい場合などにも使えます。

# 準備
Lambda関数を準備します。詳細は割愛します。Lambdaのスペックは最弱でOKです。
## IAMポリシー
“`json
{
“Version”: “2012-10-17”,
“Statement”: [

元記事を表示

【DX】ChatGPTを社内Slackから使えるようにしてみた

# ChatGPT使ってみた

皆さんの会社でもChatGPT活用されていますでしょうか
今回はChatGPTの活用促進に向けて社内で取り組んだ事例の紹介になります。

::: note
今回の事例はWeb画面からのChatGPTにおいてAI学習への活用可否Optionスイッチが実装されておらず、API経由でのGPT利用しか選択肢が無かった時点での事例となります
:::

### 導入背景
ChatGPTはその登場から非常に注目され、色々な利用事例があがっており、弊社としても活用していきたいと考えています。しかし、事業会社のシステム部門としては業務利用にあたって情報漏洩がやはり気になるところです。
そんな中、4月頃にOpenAI社よりAPIが公開され、API経由であればAIの学習目的利用をせず、30日間でデータ削除する事を選択できる(≒情報漏洩リスクを軽減できると考えられる)事から、APIを介してChatGPTを業務活用する為の機能開発ができないか。という議論がスタートしました

### Slack連携を選んだ理由
社内でChatGPTを利用するにあたって「いかに社員が使いやすいイン

元記事を表示

Pythin 3.10 の pip にアップグレード & request ライブラリの Lambda レイヤーを作成する方法

Lambda で requests を使いたかったので、Lambda レイヤーを作成する時に Pything 3.10 の pip に切り替えて requests の zip ファイルパッケージを作ったときのメモ書き

MacOS の Homebrew での作業です。

“`
$ brew install python@3.10
# python3.10 -m pip install –upgrade pip
“`

“`
$ pip –version
pip 23.2.1 from /usr/local/lib/python3.10/site-packages/pip (python 3.10)
“`

“`
$ mkdir python
$ pip install -t python requests==2.28.2
$ zip -r9 layer.zip python
“`

– Lambda Layer を追加
– Lambda 関数に Layer を紐付け

参考
https://stackoverflow.com/questions/54409696

元記事を表示

【AWS Lambda】複数のLambda関数を1つのコンテナイメージにまとめる

## やりたいこと・背景
Lambdaをコンテナから作成する場合、Lambda関数が複数ある場合は関数ごとにイメージをビルドしなければならないのか?という単純な疑問が出てきた。その場合、イメージの管理が複雑になりそうなので、1つのイメージで複数のLabda関数を管理できないかと考えた。

## 結論
ランタイムイメージをビルドする際、各Lambda関数ごとに`ディレクトリを分け`、関数作成時に`ENTRYPOINT` を指定することで実現可能。

同一ディレクトリに main関数 を持つバイナリが複数存在すると、実行時にどの main関数 を呼び出すべきかが不明瞭になり、うまく動作しない。そのため、**各Lambda関数は独自のディレクトリに配置される必要がある。**

ランタイムイメージで関数ごとにディレクトリを分けることで、各Lambda関数が独立して実行されるようになる。

## 概要図
![複数のLambda関数を1つのイメージで管理 (1).jpg](https://qiita-image-store.s3.a

元記事を表示

API Gateway→Lambda→DynamoDBとデータを受け渡す

# 背景
最近業務外でサーバレス系サービスに触れる機会が増えました。せっかくなので理解を深めようと考え、タイトルの3サービスを触ったのでそれについての備忘です。サクッと作成できるので、興味がある方はぜひお手元の環境でお試しください。なお、DynamoDBとLambdaの構築は慣れている方が多いので構築手順は省いています。本記事の内容は以下のUdemy講座を参考にしています。

https://www.udemy.com/course/aws-vlfc/

# 構築する内容
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2986198/08d48572-2f8b-3843-c50c-6a6fcff12134.png)
# DynamoDBの用意
テーブル名は`users`として、パーティションキー`id`、`文字列`のみ設定します。
# Lambdaの用意
この後作成するAPI GWからデータを受け取り、DynamoDBに格納するコードです。
ランタイムは`Python 3.9`で、Lam

元記事を表示

署名付きアップロード・ダウンロードの構成を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 で動くアプリケーションを

元記事を表示

OTHERカテゴリの最新記事