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

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

github enterprise × codebuild でビルドプロセスを自動化する -後編-

## はじめに
こちらの前編で、githubとECRの更新までを実施しました!
lambdaの更新は手動で実施する方法を記載しましたが、後編ではそのパートを自動化します。
これにより、ローカルからgithubにpushすると、対象のlambdaまで自動で更新できるようになります!
https://qiita.com/JamyJamy/items/e79c6c4b632162c26f96

## アーキテクチャ概要
前編で実施したECRの更新をトリガーに、EventBridgeを呼び出します。
そして、そのEventBridgeが、対象となるlambdaを更新するlambdaを作成することで、アプリケーションコードの更新が自動化されます!
![スクリーンショット 2023-10-15 23.24.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3351273/b04c2daa-b1eb-d46d-da25-fd7129123423.png)

## 実装例
### 更新用Lambda
EventBri

元記事を表示

github enterprise × codebuild でビルドプロセスを自動化する -前編-

## はじめに
先日実施した開発で、githubへのpushをトリガーに、awsのECRを自動で更新するパイプラインをを作成したので、そちらについて記載します。

この設定を行うことで、ローカルでdockerファイル上のコードを修正しgithubにpushした際、自動でECRに反映されるようになります!
また、ECRのイメージを使用しているlambdaも自動で最新のイメージでビルドされるように設定することが可能です。

前編ではECRをアップデートする部分まで記載します。
後編では、ECRがアップデートされたタイミングで、lambdaのイメージも自動で最新化される設定方法を記載します。

## アーキテクチャ概要
Lambdaを使用する際、ローカルでzipしたものをアップロードするのが一般的です。
しかし、Dockerを使用することにより、メンバーの環境を同じに揃えることができます。
そのため、PCの種類や、言語のバージョン、pipなど、ローカルの環境に依存せずチーム開発を行うことができます!
また、awsから動かすときなども、移行がしやすい設計にすることが可能です!

![スクリーン

元記事を表示

数値を含む文字列のリストを数値順でソートするときに使うPythonのラムダ式

## はじめに
Pythonでのプログラミング中に、「数値を含む文字列のリストを数値順でソートする処理」が必要になり、試行錯誤していました。本来の処理に直接関係ない部分なので、可読性を犠牲にしてでもコンパクトにしたくなり、勉強がてらにラムダ式を使ってみました。シンプルに書けたのでメモとして残します。

## ラムダ式
変数に代入して関数として使う方法を使いました。
* `変数名` = lambda `引数`: `処理`

“`python
num_in_str = lambda str: [int(c) if c.isdigit() else c for c in re.split(r'(\d+)’, str) ]
“`

## 動作確認
### コード
“`python
import re

num_in_str = lambda str: [int(c) if c.isdigit() else c for c in re.split(r'(\d+)’, str) ]

lists = [‘S23’, ‘S14’, ‘S7’, ‘S11’, ‘S1’]
lists.sort(k

元記事を表示

LINE ボットを簡単な構成で作ってみた(TypeScript + Bot SDK ver.8 + Lambda)

LINEのボットを簡単な構成で作る方法を書いてみます。
LINE Messaging API SDK for nodejsの2023年10月にリリースされたver.8を使い、TypeScriptも使うことで型の恩恵を受けながらコードを書きます。
また、バックエンドはAWS Lambdaのみを用いるためサーバーの管理は不要で、コストも削減できます。

# 完成イメージ
LINEで名前を送信すると、「xxxさん、こんにちは!」と返してくれるボットを作ります。
![LINEテスト.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/20639/39fe06ef-35b6-20c0-a501-cb83a571b552.png)

# 構成図
![2023-10-15_15h32_40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/20639/bb5c61ee-f54c-f7cb-e7e2-d691012c2e86.png)

# 前

元記事を表示

Saas on AWS 2023のサーバーレスワークショップに参加してきたのでメモメモ

どうもこんにちは。

今回は**Saas on AWS 2023**に参加してserverless workshopに参加してきたので、備忘録としてメモします。

# Saas on AWSとは?

**Saas on AWS**とは、Saasシステムを武器にして会社を経営している方や、開発しているエンジニアの方の話を聞くことができるイベントです。

その傍では、いくつかのワークショップが開催されています。

# ワークショップについて

今回のイベントでは、以下の3つのワークショップが用意されていました。

– Saas Boost Workshop
– Saas Serverless Workshop
– Saas AuthN/Z Workshop

今回は2つ目の「Saas Serverless Workshop」に参加してきました。

# ワークショップの流れ

ワークショップは、簡単なマニュアルが配布され、それを見ながら自分で開発を進めていきます。

具体的な手順をメモしていきます。

## STEP1:使用するサービスの簡単な使い方

STEP1で使用したのは以下の4つです

元記事を表示

RのWeb APIをLambdaで作る

# はじめに

前回、LambdaをRで動かす`lambdr`を紹介しました。

https://qiita.com/a_b_/items/aec53d51d40781c18b89

以前から、ちょくちょくRをREST API化するplumberをコンテナサービスで動かしてきました。
ですが、Lambdaで同じコンテナは動かせないため、`lambdr`を使って、Function URLで似たようなものを作ってみました。

# 概要

以下の事をやっています。

– lambdrを使って、RをLambdaで動かします
– LambdaのFunction URLを使って、Web APIにします
– API Gatewayでも同じようにできるはずです
– 動かす処理はPOSTで指定します
– plumberのように、URLパスでの指定はできませんでした…

# 参考

https://cran.r-project.org/web/packages/lambdr/lambdr.pdf

https://rdrr.io/github/mdneuzerling/lambdr/man

元記事を表示

Amazon BedrockをAWS Lambda上で呼び出してみた(API化)

# はじめに
こんにちは、はやぴー(@HayaP)です。

[前回の記事](https://qiita.com/HayaP/items/3395a0d6e1007448fca8)ではPythonスクリプトからAmazon Bedrockを利用してみましたが、今回はAWS LambdaからAmazon Bedrockを動かしてみたいと思います。

# 前提
前提として、Amazon BedrockでJurassic-2 Midが使用可能になっていることが必要です。
実施手順は、過去の記事[Amazon BedrockをPythonスクリプトから利用してみた
](https://qiita.com/HayaP/items/3395a0d6e1007448fca8)にありますので、ご参照ください。

# TL;DR (忙しい人用)
– Amazon BedrockのJurassic-2 MidモデルをAWS Lambdaから利用する手順を解説。
– Lambda関数はPython 3.11ランタイムとarm64アーキテクチャで作成。
– IAMロールを作成し、LambdaにアタッチしてBed

元記事を表示

【AWS】CLIでCloudWatchのカスタムダッシュボードを作成する

## はじめに
CLIでCloudWatchのカスタムダッシュボードを作成する手順。CLI操作用のIAMユーザ作成とか認証情報の設定は割愛。
1はカスタムダッシュボードはどんな感じかっていう話なので本題は2。

## 1. CloudWatchカスタムダッシュボードはこんな感じ(GUIで作ってみる)
CloudWatch -> ダッシュボード -> ダッシュボードの作成で画面右上の`+`か、`+ 最初のウィジェットを追加`をクリックする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3458266/e1182efc-fe2f-25ab-6006-f25cfa0d628b.png)

好きな形式を選ぶ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3458266/2987986d-9033-59cc-bd1b-12c0fa51451e.png)

Lambdaの実行時間のグラフ。他に確認し

元記事を表示

Python3.11×Lambda×Seleniumを動かす方法(docker-selenium-lambda)

## はじめに
Python3.7がLambdaで利用できなくなるということで、新しくPython3.xのバージョンアップを行ってSeleniumを動かうための環境を作ったので、メモを残しておきます。

## 変更前のLambdaの環境
環境はこんな感じ
* Python3.7
* SeleniumとWebDriverはLayerで追加
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1736577/e0856f3b-43fa-50ba-a845-d46f97d13077.png)

## 実現したい環境
* Python3.11
* Seleniumを動かす環境
※本当はRequestとBeautifulSoupで処理したほうが早いと思ったけど、
 今の機能を踏襲する意味で変更しないこととしました。

### Python3.8以降へそのまま移行できない理由
調べてみるとヒットしますが、Python3.7以前と3.8以降では動くOSが違うようです。
![image.png](https

元記事を表示

AWS LambdaとAWS Amplifyを使ってカレンダーアプリを作った

# はじめに
カレンダーを作った話のあと、やっぱりAPIとして生やしたくなりますね。
オレオレカレンダーAPIを生やしてしまえば、改造したく成ったら勝手に改造できるし、他人様のAPI使うよりも便利なはずなので(EOLも自分で決められるし)QoL最高だなと思ったのでやってみた。

カレンダーの記事は以下を参照してください。

https://qiita.com/segfo/items/59706ec9abacae367bd3

え?
– 過去の祝日が考慮されてない?
– 出来事に応じて祝日が追加されない?

オープンソースの強みを活かしましょう!

# やりたいこと
– LambdaにカレンダーAPIを生やす
– `{“year”:2023,”month”:6}`みたいなリクエストをPOSTで送る
– 第N週とか第N月曜日とか、めんどい系の処理をしなきゃいけない情報はまるっと載せてJSONでレスポンスする。
– 1月まるっと取ってLocalStorageにキャッシュしとけばいい。
– 特定の年をまるっと送る みたいなAPIは今回は対象外とする。

元記事を表示

AWS Lambda 用のイメージから作成されたコンテナにVSCodeからAttachする際のエラー解決

# 目的
AWS Lambda 用のイメージから作成されたコンテナにVSCodeの「Remote – Containers」拡張機能からAttachする際、以下のようなエラーが発生し、接続できませんでした。

“`terminal
tar: command not found
tar (grandchild): gzip: Cannot exec: No such file or directory
“`

その解決方法の備忘録です。

# 問題
以下のようなDockerfileがあります。
イメージにはAWS公式のリポジトリから取得した**public.ecr.aws/lambda/python:3.11**を使用します。

“`dockerfile
FROM public.ecr.aws/lambda/python:3.11 as dev

# requirements.txtを使用して関数の依存関係をインストールする。
COPY requirements.txt .
RUN pip3 install -r requirements.txt –target “${LAM

元記事を表示

AWS Lambdaでseleniumを使う方法

# はじめに

備忘録がてらAWS Lambdaでseleniumを使う方法を記載していきます。

– seleniumはサードパーティのライブラリなのでlambda layerでの利用が必須
– また、headless chromium (GUIがないgoogle chromeのようなもの)とchromedriverの導入も必須
– 以下のウェブサイトが非常に参考になるので基本的にはこれを見ればいい
– [AWS Lambda上でheadless-chromiumを動かすときのchromedriverとheadless-chromiumのバージョンの組み合わせ調査 | Create it Myself](https://create-it-myself.com/research/research-combination-of-chromedriver-and-headless-chromium-versions/)
– ライブラリ等の条件
– Python 3.7 (3.7はAmazon Linux、3.8以降はAmazon Linux 2という違いがあり、それが影響

元記事を表示

LambdaをRで動かすlambdr

# はじめに
AWS LambdaをRで動かせるようにした`lambdr`なるものを作った方がいらっしゃいました。

https://github.com/mdneuzerling/lambdr

今回はこれを動かしてみました。

# 概要

– LambdをRで動かせます
– 非公式なので、利用は自己責任で

参考に、PHPでLambdaを動かす事例が公式で記事になっています。これと同様のものをRで作っています。

https://aws.amazon.com/jp/builders-flash/202106/new-lambda-container-development-3/?awsf.filter-name=*all

# やってみた

## 環境
いつものCloud9です。t2.microでやりました。ストレージがギリギリです。他のものが入っているとエラーになりますので容量にはご注意ください。

## コンテナ作成とPUSH
まずはコンテナをbuildします。
“`bash
# プロジェクトディレクトリ作成
mkdir test-lambdr && cd tes

元記事を表示

AWS Lambda+PythonでExcelファイルにPlantUMLを埋め込む

# はじめに

AWS Lambda+PythonでExcelファイルにPlantUMLを埋め込もうとして苦戦したのでメモ

手こずったところ
– plantwebを自前でレイヤー作成
– requestsのインポートでエラー
https://qiita.com/HLHHS11/items/c26f1632a141a1dcc7a7

2023/12/4以降AWS CloudShell環境がAmazon Linux 2からAmazon Linux 2023に更新されていく予定なので、この情報は使えなくなる可能性があります

# 準備 – plantwebのレイヤー

### AWS CloudShellでPython3.10環境をビルド

AWS CloudShellでPython3.10環境をビルドします。AWS CloudShellのデフォルトでは3.7です。

OpenSSL 1.1.1をインストール

“`sh:
sudo yum install openssl11 openssl11-devel
“`

Python3.10をインストール

“`sh:
sudo yum

元記事を表示

LambdaのコンテナのイメージをECRのlatestへ更新する

## 作成済みLambdaのコンテナの更新
マネジメントコンソールからLambdaコンテナを更新しに行くと、
イメージの登録が完了するまでにそれなりに時間がかかる。
CLIで楽にやりたい。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/54100/6bd8f28f-27fe-d6d1-062b-1ffd42eb6c02.png)

Lambdaのマネコンから登録されているイメージURIを見に行くと、
`レジストリURI@sha256`のURIとなっている。
この部分をCLIで更新する。

### 手段1. ハッシュ値による更新
`aws ecr describe-images`を使ってハッシュを取得し、URIを生成する。
生成したURLで`aws lambda update-function-code`する。
“`bash:ecr_deploy.bash
accountID=”アカウントID”;
ecrRepoName=”ECRイメージ名”;
aws ecr get-login-pa

元記事を表示

[OCI]AWS LambdaのファンクションをAutonomous DatabaseからSQLファンクションとして呼び出してみた

# はじめに

先日の機能追加で、AWS LambdaのファンクションをAutonomous DatabaseからSQLファンクションとして呼び出すことができるようになりました。

AWS LambdaのファンクションをSQLファンクションとして呼び出すには、DBMS_CLOUD_FUNCTIONパッケージを使用して設定を行います。

今回は、AWS Lambdaにデフォルトで用意されている「Hello World」を「HelloWorld」という名前のファンクションとしてデプロイし、AWS Lambdaの「HelloWorld」ファンクションをAutonomous DatabaseからSQLファンクションとして呼び出してみました。

OCI FunctionsのファンクションをAutonomous DatabaseからSQLファンクションとして呼び出す場合の記事はこちら。

https://qiita.com/500InternalServerError/items/ac17dbd10ec887301dc5

なお、今回はadminユーザとしてAutonomous Databaseに

元記事を表示

Amazon BedrockをPythonスクリプトから利用してみた

# はじめに

こんにちは、はやぴー(@HayaP)です。

ついに、Amazon BedrockがGAされましたね!
東京リージョンでも、一部のモデルが使用可能になりました。

今回はPythonスクリプトでAmazon Bedrockを利用してみます。
理由として、Lambdaから実行するケースや、Webアプリケーションに組み込むケースが多そうだなぁと感じているからです。(Lambdaで実行するハンズオンは別で記事を書く予定です)

# 対象読者

– Amazon Bedrockに興味がある方
– Pythonスクリプトで、Amazon Bedrockを利用したい方
– AWS Lambdaでの実装を考えている方(Lambdaのハンズオンではありません)

# TL;DR (忙しい人用)
– Amazon Bedrockは、モデル毎に(マネージメントコンソールなどで)初期設定が必要
– Boto3を使えば、比較的簡単に実装できる(基本コピペでOK)
– Claude系は、全リージョン共通で許可制(現時点)
– 東京リージョンで使えるモデルは、us-east-1と比べてまだまだ少な

元記事を表示

AWS Lambda × Ruby 「ランタイムに合わせたbundle install面倒くさい…」「デプロイパッケージが大きすぎて…」という困り事

# AWS Lambdaでライブラリを利用するのって地味に面倒くさい
AWS lambdaでライブラリを利用するときに面倒だと思った以下2点についての対処法
– zipフォルダを用意するまで
– 「デプロイパッケージが大きすぎて、インラインコード編集を有効にできません。…」の回避

## zipフォルダを用意するまで
### Dockerfileを準備
“`Dockerfile:Dockerfile
# AWS Lambdaで利用するランタイムのバージョンを指定する
FROM ruby:2.7

WORKDIR mkdir /var/www

# /var/wwwの部分は/appなどなんでも良い
COPY /app/* /var/www

RUN bundle config –local set path ‘vendor/bundle’

RUN bundle install
“`
### docker container を起動
`$ docker image build -t XXX:YYY`
`XXX`のところは`sample_app`
`YYY`のところは`lates

元記事を表示

Python Lambda DynamoDB ServerlessFrameworkでAPI作ってみた(ローカル開発)

# はじめに
Python / Lambda / DynamoDB / ServerlessFramework でのAPI開発手順を記しておきます。

AWSの方から「Lambda × Pythonは起動が速く(コールドスタートが起きない)相性がいい」と伺っていたので、デプロイして計測するのが楽しみです!

# 環境
– macOS Ventura
– Python 3.11.4
– ServerlessFramework 3.34.0
– npm 8.19.2
– node v18.18.0

“`terminal: バージョン確認コマンド
$ python3 –version
$ python3 -m pip -V
“`

# Lambda作成
## 1. 事前準備
“`terminal:
$ mkdir project-v1 #プロジェクト用ルートディレクトリ作成
$ npm install -g serverless #必要なプラグインのインストール
$ npm install –save serverless-iam-roles-per-function serve

元記事を表示

動いているEC2を全部問答無用で停止するLambda

## さくっとコピペでどうぞ

“`python:python
import json
import boto3

client = boto3.client(‘ec2’)

def lambda_handler(event, context):
response = client.describe_instances(
Filters=[
{
‘Name’: ‘instance-state-code’,
‘Values’: [
’16’,
]
},
]
)
targetInstances = []
for i in response[‘Reservations’]:
targetInstances.append(i[‘Instances’][0][‘InstanceId’])

if not targetI

元記事を表示

OTHERカテゴリの最新記事