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

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

既存AWS構成をTerraformでIaC化(CloudWatch, Lambda, IAM)

## はじめに
今回は前回の続きです。Lambda部分をTerraformでIaC化していきます。
前回ではVPC回りとAPI Gateway構成部分をTerraformでIaC化しました。以下がその記録です。

https://qiita.com/kennyQiita/items/efa452ca81528acb8270

ちなみにIaC化する前提構成は前回と同じままです(以下図)。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/484097/bc17bb9b-74f2-e029-3214-bace0963c74b.png)

今回の実施内容としては以下となります。
* CloudWatchLogs管理をTerraform管理に変更
* Lambdaで利用するIAMロールをTerraform管理に変更
* LambdaをTerraform管理に変更

## IaC化
### CloudWatchLogs
Lambdaに関わるCloudWatchLogsのロググループだけでなく、本構

元記事を表示

Node.js + LambdaでDDNSのIP紐づけが切れていないか監視する

#### DDNS(ダイナミックドメインネームシステム)って?

DDNS(ダイナミックドメインネームシステム)とは、動的に割り当てられているIPアドレスとドメイン名を紐づけてくれるものです。

https://ja.wikipedia.org/wiki/%E3%83%80%E3%82%A4%E3%83%8A%E3%83%9F%E3%83%83%E3%82%AF%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%8D%E3%83%BC%E3%83%A0%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0#:~:text=%E3%83%80%E3%82%A4%E3%83%8A%E3%83%9F%E3%83%83%E3%82%AF%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%8D%E3%83%BC%E3%83%A0%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%20(Dynamic,%E7%AE%A1%E7%90%86%E3%81%99%E3%82%8B%E4%BB%95

元記事を表示

CodeCommitにサーバーレス(Lambda)の定期実行でPushする

## はじめに
CodeCommitで管理しているリポジトリにサーバーレスの定期実行でPushする、ということをやってみたのでそのやり方を残したいと思います。
本記事では、試しに[YAHOO!ニュース(ITカテゴリ)のRSS](https://news.yahoo.co.jp/rss/categories/it.xml “news.yahoo.co.jp/rss/categories/it.xml”)を取得して、JSON形式で保存する。というユースケースでやり方の紹介をします。

# 目次

1. [はじめに](#はじめに)
2. [前提](#前提)
3. [準備](#準備)
4. [権限の設定](#権限の設定)
5. [Lambda関数作成](#lambda関数作成)
5. [Lambda関数の登録](#lambda関数の登録)
6. [おわりに](#おわりに)

## 前提
1\. 以下のツールがインストールされていること。
“`
node18
yarn
aws-cli
“`
2\. Push先のリポジトリの作成と、initial c

元記事を表示

Amazon Aurora(PostgreSQL互換)でLambdaをトリガする際のプラクティス

# はじめに
AWSを使っていると、業務用のデータはリレーショナルデータベースに入れて、バックエンドのシステムに転送するような履歴情報は扱いが容易なKVSに入れたくなるような業務要件がよくある。
履歴情報の処理はリレーショナルデータベースでも実現できるが、1つ1つの処理のシンプルさを考慮すると、非同期でバックエンド処理をした方が良い。
Auroraには、Lambdaをイベントトリガで起動する機能があるので、まさにうってつけの機能と言える。これと、PostgreSQLのトリガプロシージャの機能を用いて非同期処理を実現できるだろう。
まずは、昨日の概要は[公式のユーザーガイド](https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/PostgreSQL-Lambda.html#PostgreSQL-Lambda-network)を確認してみていただきたい。

ただし、本当に冪等性高く、漏れなく処理ができるのかが気になったので、本記事で検証をしてみた。
なお、AuroraはPostgreSQL互換を使用している。

元記事を表示

サーバーレスアーキテクチャで翻訳 Web API を構築してみた【AWS Hands-on for Beginners Serverless #1】

# はじめに
AWS認定試験の勉強している時にサーバレスアーキテクチャに関する問題がたくさん出てきました。
なので復習もかねて、今回は[AWS Hands-on for Beginners Serverless #1](https://pages.awscloud.com/JAPAN-event-OE-Hands-on-for-Beginners-Serverless-1-2022-reg-event.html?trk=aws_introduction_page)を参考に、サーバレスアーキテクチャを実際に構築していきたいと思います。
# 学習するサービス
– AWS Lambda
– Amazon API Gateway
– Amazon DynamoDB
– Amazon Translate

# AWS Hands-on for Beginners Serverless #1の概要
このハンズオンでは、”こんにちは” と入力すると “Hello” と返すWebAPIを作成します。

構築する構成図は以下になります。
![Hands-On-for-Beginners_2022_Se

元記事を表示

実はLambdaの関数URLは署名付きURL化できるよ、29秒の壁も越えられるよ、という話

# この記事を2行で

– S3の署名付きURLと同じことが、Lambdaの関数URLにもできます
– Lambdaの署名付きURLを使えば、APIGatewayの29秒タイムアウトを超えてLambdaを実行できます

## 何が嬉しいの?

– AIのように時間のかかる処理を、Lambdaだけで処理できます
– 署名付きURLなので、Cognito + APIGatewayのような認証がそのまま使えます

## どうやって?

– Lambdaの関数URLは`API Gatewayの29秒タイムアウト制限の影響を受けない`
– S3の署名付きURLと同じ認証方法が、Lambdaの関数URLでも使える
– ※サービスはLambdaだけ、ライブラリもboto3の標準機能だけで実現できます

## このあたりの事情を説明(APIGatewayのタイムアウト制限とは?)

AWSのLambdaは、15分かかる処理までは受け付けることができます。
ただ、APIGatewayは、レスポンスを返すのに29秒以上かかるリクエストを強制的に中断する仕様になっています。

Lambdaは何しろ安

元記事を表示

【AWS】Lambdaのyamlによる移管方法

### 1. LambdaのSAM(yaml)とデプロイパッケージ(zip)をダウンロード
2. 移行する Lambda 関数のコンソール画面へ移動
3. Lambda 関数ウィンドウで [アクション] を選択し、[関数のエクスポート] を選択
4. [ AWS SAM ファイルのダウンロード ] を選択してダウンロード
5. [デプロイパッケージのダウンロード] を選択してダウンロード

### 2. 移行先のAWSのS3にデプロイパッケージをアップロード
1. 適当なバケットに先ほどダウンロードしたデプロイパッケージ(zip)をアップロードする
1. ファイルのS3 URIをコピーしておく

### 3. CloudFormationでLambda 関数をデプロイする
1. ダウンロードしたSAM ファイルを開く
“`
AWSTemplateFormatVersion: ‘2010-09-09’
Transform: ‘AWS::Serverless-2016-10-31’
Description: An AWS Serv

元記事を表示

CDKでNode.jsのLambda関数を作るときにjs|ts以外のファイルをバンドルする

# TL;DR

`bundling.commandHooks.beforeBundling`
を定義して、その中で`cp`でコピーしてあげればOK!

“`ts
new NodejsFunction(this, ‘lambda’, {
runtime: Runtime.NODEJS_18_X,
architecture: Architecture.ARM_64,
functionName: ‘my-nodejs-function’,
handler: ‘handler’,
entry: ‘lambda/index.ts’,
bundling: {
commandHooks: {
beforeBundling(inputDir: string, outputDir: string): string[] {
return [`cp ${inputDir}/lambda/hoge.txt ${outputDir}`];
},
afterBundling(): string[] {
retu

元記事を表示

Lambda関数 指定のログが出た際、Slackに通知する

# 0/3 全体像
![download.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/968569/7a4f5954-5c46-886d-d790-e961b2438e0a.png)

# 1/3 事前設定
## SNSトピックを作成しよう
### AWS SNSから新規トピックを作成 名前はテキトーで、タイプはスタンダート
![39c9b3ab-04aa-43cd-8d97-85e65f506cda.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/968569/9cc0d2e3-7ec8-d0a6-2f93-30ac075eeb31.png)![download.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/968569/3516aef0-f9a3-25ed-b82c-100f761b3837.png)

## AWSとSlackを接続

元記事を表示

AWSのコンボ技

### Webアプリ + APIGateway
APIGatewayのAPIエンドポイントを経由して他のWebアプリからAWSにデータを送信することが可能になります。
– 例:Kintone(website) ⇒ (Webhook経由) ⇒ APIGateway ⇒ その他のAWS(Lambdaなど)

### APIGateway + Lambda
– APIGatewayのリソース➡POST➡総合リクエストからLambdaの指定ができます。
– APIGatewayでのAPIのデプロイ時には、ステージ変数を設定することができます。ステージ変数を使用することで、APIのエンドポイントURLにステージ名を含めることができます。

### Lambda + S3
– S3に配置されたオブジェクトに対してLambdaを実行する場合、IAMロールを作成してS3へのアクセス権限を与える必要があります。
– S3ファイルがアップロード、削除、更新された際、Lambdaを自動実行させることができます。
  Lambda関数➡設定➡トリガー➡トリガー追加でイベントタイプ、S3のバケット、プレフ

元記事を表示

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

元記事を表示

OTHERカテゴリの最新記事