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

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

AWS SAMを使って最もシンプルにLambda × S3 のS3イベント駆動プログラムを構築する

# 概要

今回は以前から紹介しているAWS LambdaのAWS サーバーレスアプリケーションモデル (Serverless Application Model)、AWS SAMの続編になります。

【以前の記事】
導入編:[AWS Lambda SAMとは?~AWS SAMを使ってPythonのLambdaプログラムを簡単に作成する~](https://qiita.com/fkooo/items/2dc5ded5149379d7305a “AWS Lambda SAMとは?~AWS SAMを使ってPythonのLambdaプログラムを簡単に作成する~”)
第1回:[AWS SAMを使って最もシンプルにLambda × APIGatewayのWebAPIを構築する](https://qiita.com/fkooo/items/e08cdea0f73f60dabd3d “AWS SAMを使って最もシンプルにLambda × APIGatewayのWebAPIを構築する”)
第2回:AWS SAMを使って最もシンプルにLambda × S3 のS3イベント駆動プログラムを構築する

第1

元記事を表示

Lambda関数をローカル環境からワンタッチでデプロイする

ローカルPythonコードからboto3を経由してLambda関数を更新します。
作成済のLambda関数のロジック修正が簡単に実施できるので便利だと思います。

## コード説明

– デプロイ対象のLambda関数はPythonを前提とします。
– デプロイ対象のLambda関数は作成済であることを前提とします。
– このPythonファイルを置き換えたいLambda関数と同一フォルダへ配置します。
– Pythonファイルが置かれたフォルダ名がLambda関数名と一致することを前提とします。
– Lambda関数の中身を更新します。

`upload_lambda.py`

“`python
import io
import os
from zipfile import ZipFile
import boto3
import pathlib

def main(funcName):
print(“main start”)
file_name = “lambda_function.py”
buf = io.BytesIO()
with ZipF

元記事を表示

RIEを使ってLambdaコンテナイメージをローカルでエミュレートする

# はじめに
前回Lambdaコンテナイメージを、AWS以外のベースイメージから作る方法を記事にしました。

https://qiita.com/a_b_/items/337c4afee2e330efefe1

作成する際AWS Lambda Runtime Interface Emulator (RIE) を使って、ローカルでLambdaをエミュレートする方法を試しましたので記事にしました。

# 参考

https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/images-test.html

https://aws.amazon.com/jp/blogs/news/new-for-aws-lambda-container-image-support/

# やったこと
前回同様に、プロジェクトのディレクトリを作成し、Pythonのファイルを作成します。
Dockerfileは、エミュレータを含めるかどうかで記述が変わりますので、ここではファイルを作成するだけです。
“`bash
# プロジェクトディレクトリ作成
mkdir sam

元記事を表示

Lambdaでpythonの外部ライブラリをレイヤーで使用する方法

# この記事で出来るようになること
#### 結論:外部ライブラリをAWS Lambdaのレイヤーに追加することで、インラインコード編集をできるようにする。

pythonを使用する際に、外部ライブラリを使用することはよくあります。
しかし、Lambda関数自体にローカルでpipしたライブラリファイルをアップロードすると
`Lambda 関数「***」のデプロイパッケージが大きすぎて、インラインコード編集を有効にできません。ただし、関数を呼び出すことはできます。`
と出てしまう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/748917/23335e1f-2df6-2cce-8154-60eea8e17667.png)
すると、インラインコード編集が出来なくなってしまう。
インラインコード編集を使用しない人にとっては問題はないが、便利であるので使える状態にしておきたい。

# ローカルで外部ライブラリをzip化する
本記事の例ではLINE APIで使用する`line-bot-sdk`を

元記事を表示

mysql2/promise を使用し、VPC内のLambdaから RDS Ploxy 経由で RDSに接続してみた [Node.js]

# はじめに
RDS Ploxy 経由で MySQL にアクセスするLambdaをVPC内で実行させましたので、手順をまとめます。

以前、`mysql`モジュールを使用して同様の処理をしましたが、`mysql2`モジュールの方がコード量が少ないため、今回は`mysql2`を使用してみます。

https://qiita.com/hirai-11/items/b0b9abc25e8f49c3815b

![スクリーンショット 2022-06-23 22.00.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/988747/6391a70c-3d26-f29d-2a5c-a8db47bbb6c3.png)

# RDS Ploxyの作成
RDS Ploxyは、以前作成した記事がありますので、こちらを参考にしてください。

https://qiita.com/hirai-11/items/07b25f81f1a983e0191c

# private subnetにLambdaを作成

## 設定

元記事を表示

Redmineに対してREST APIを実行してみる

# AWS Lambdaを使ってRestAPIを実行してみる

– RedmineにはRestAPIでのアクセスができる(https://www.redmine.org/projects/redmine/wiki/Rest_api にAPIの概要)

## 1. Redmineの管理者で `RESTによるWebサービスを有効にする`をチェックONにする

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1482752/8316574e-d9a6-b6c0-b3f3-41ee88a9814f.png)

## 2. Redmineの画面で個人設定画面の右より、APIアクセスキーを発行する
![redmine-api-key.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1482752/55654d6f-0b14-0517-07a5-97ca52acb602.png)

## 3.AWS Lambdaのマネジ

元記事を表示

「AWS CDKのコマンドオプションでサービスのENV変えてーなー」と感じた方へ

CDKでStackを簡単に組めるのはとても便利ですよね。

ただ、デプロイ先のアカウント(dev / test / prodなど)によって、
例えば
・APIの制限
・消費ユニットの制御
・テストデータの参照
などをしたい時、変数で簡単に制御できればいいなと思ったので、
今回復習も兼ねてデプロイオプションでサービスのenv値を変更する方法を紹介します。

編集するファイルは全部で3つです。
① app.py
② cdk.json
③ *_stack.py (自身のstackファイル)
→以下StackファイルはDynamoLambdaStackとします。

### ① app.py
“`python
#!/usr/bin/env python3

from aws_cdk import App

from dynamodb_lambda.dynamodb_lambda_stack import DynamodbLambdaStack

app = App()
# 以下2行追加
cdk_env = app.node.try_get_context(“cdk_env”)
prin

元記事を表示

AWS Lambda

# AWS Lambda とは
Lambda はサーバーをプロビジョニングしたり管理しなくてもコードを実行できるコンピューティングサービスです。Lambda は可用性の高いコンピューティングインフラストラクチャでコードを実行し、コンピューティングリソースの管理をすべて担当します。これにはサーバーおよびオペレーティングシステムのメンテナンス、容量のプロビジョニングおよびオートスケーリング、コードのモニタリングおよびログ記録などが含まれます。Lambda を使用すると、実質どのようなタイプのアプリケーションやバックエンドサービスに対してもコードを実行できます。必要なのは、Lambda がサポートするいずれかの言語でコードを指定することだけです。

コードを Lambda 関数に整理します。Lambda は必要に応じて関数を実行し、1 日あたり数個から 1 秒あたり数千個のリクエストまで自動的にスケーリングします。課金は実際に消費したコンピューティング時間に対してのみ発生します。コードが実行されていない場合、料金は発生しません。

Lambda API を使用して [Lambda 関数](h

元記事を表示

ServerlessFrameworkでサービス名を長くしすぎるとデプロイできない

# はじめに
ServerlessFrameworkでAPIGateway, Lambdaへのデプロイした際に発生したエラーについて記録に残したいと思います。

# 原因
デプロイの際、作成されるIamRoleの文字数制限を超えてしまい、エラーが発生する。

### エラー内容
“`bash
Error:
CREATE_FAILED: IamRoleLambdaExecution (AWS::IAM::Role)
1 validation error detected: Value ‘XXXXXXX-XXXX-XXXXXXXXXXXXXX-XXXX-XXX-dev-ap-northeast-1-lambdaRole’ at ‘roleName’ failed to satisfy constraint: Member must have length less than or equal to 64 (Service: AmazonIdentityManagement; Status Code: 400; Error Code: ValidationError; Request ID

元記事を表示

docker/ecr/lambda(python3.9)を使って、chromeとseleniumでスクレイピングする

serverless-chromeを使った記事は割とあるが、chromeのバージョンやらpythonのバージョンやらをいい感じにできない。
ecrを使うとlambdaにデプロイできるサイズ上限が一気にあがるので、普通に自前でchromeビルドして全部dockerimageに突っ込んじゃえばよくね?というもの。

https://github.com/adieuadieu/serverless-chrome

ローカルでdockerを使います。
python3.9のlambdaで動かします。

# ファイル
“`
.
├── test.py
└── Dockerfile
“`

# コード

この例ではchrome103とlambda(python3.9)

“`Dockerfile:Dockerfile
# chromeのセットアップ用
FROM public.ecr.aws/lambda/python:3.9 as build
RUN yum install -y unzip && \
curl -Lo “/tmp/chromedriver.zip” “https://

元記事を表示

CodePipelineからLambdaを使ってECSタスク定義を更新する

# 概要
AWS CodePipelineを使うとECSに自動デプロイができるが、対応しているのはECSサービスに紐づいたタスク定義だけとなっている。
そこで、EventBridgeを使った定時バッチ用に都度コンテナを起動するタスク定義の更新をCodePipelineから行う方法を試した。

# CodePipelineの流れ
今回作成するパイプラインは以下の通り。

1. Sourceステージ:GitHubから指定したブランチのコードをpullする
1. Buildステージ:buildspec.ymlの手順でビルド、イメージをECR登録
1. Deployステージ:ビルドしたイメージを設定したタスク定義をECSにデプロイ

DeployステージのアクションプロバイダーをAmazon ECSにすると、Buildステージのアクションでアーティファクトに出力したイメージ定義ファイルを元に、ビルドしたイメージを使ってデプロイできる。
この方法はサービスに紐づいていないタスク定義ではできないので、今回はタスク定義の更新にLambda関数を使う。

# Lambda関数でタスク定義を更新する流れ

元記事を表示

AWS Cognito上のログイン履歴をLambdaでS3に定期出力


初めまして、フルカイテンでフロントエンドを担当しておりますヒロシと申します。
テックブログを始めて2つ目の記事を書かせていただくことになりました。

フロントと言いつつ、今回はAWSの記事になります…!
思いのほかCognitoのログイン履歴をLambdaでCSV出力する情報が多くなかった?ので、今回記事にしてみようと思いました!

# 背景・動機
弊社ではサービス導入後、一部お客様で日常業務への利用定着や効果的な活用が進まない問題が発生しました。しかし、当初は定量的な指標がなかったため、各お客様がどの程度利用しているかはカスタマーサクセスチームの感覚ベースとなっていました。
利用定着が進まないまま放置しているとチャーンリスクが増加します。
そこでユーザーの活用状況を知る方法の一つとして[Cognito](https://aws.amazon.com/jp/cognito/)で保有しているユーザーのログイン履歴を参照することにしました。

# 本記事の主な対象
Cognitoを業務利用している人

# やること
お客様の多くは主に1

AWS LambdaのLayerを利用する3つの種類

AWS LambdaのLayerの作り方、使い方をよく忘れるので、備忘録として残しておきます。
以下の3つのことができるLayerを作ります。3つを選択的またはすべて含めたLayerにもできますので、必要なものをLayerに選択して含めてください。
対象言語はNode.jsの場合です。

① 自作のクラスを含める
② Npmモジュールを含める
③ 実行ファイルを含める

# 準備

まず適当なフォルダを作成します。例えば、layer_testというフォルダを作ります。以降、ここをルートフォルダとみなします。

“`
> mkdir layer_test
> cd layer_test
“`

作業環境に、Node.jsがセットアップされている前提です。
バージョンは、Lambdaで指定予定のバージョンに合わせます。今回は、v14系にしました。

# ①自作のクラスを含める

自作のクラスを含めます。
先ほど作成したルートフォルダに作成します。

“`
> vi hello.js
“`

中身はこんな感じです。

“`js:hello.js
class Hello{
c

AWSのアカウント間で定期的にS3オブジェクトをコピー

# はじめに

今回やりたいことは、
「**あるAWSアカウントのS3バケットにあるオブジェクトを、異なるAWSアカウントのS3バケットに、毎日特定の時刻にコピーする**」
内容はすごく単純だけど、実際の中身はS3だけでなくIAM周りやEventBridgeなど複数要素が必要になり勉強になったのでまとめます。

ポイントは、
– コピー処理:コピーするプログラムをどう書く?
– 権限周り:異なるアカウントのS3オブジェクトにどうやってアクセスする?
– 定期実行:どうやって定期実行させる?

なおこの記事は、作業手順をまとめたものであり各要素技術について詳細に説明するものではありません(AssumeRoleは[この記事](https://dev.classmethod.jp/articles/iam-role-passrole-assumerole/)が個人的に面白かったです)。とはいえ、ここに記述する手順を踏んで実際に手を動化してみると色々勉強になりますのでトライしてみてください。

# 実現方法
今回はLambda関数を用いた方法について言及する。コピー先にLambda関数を作成し

Inspector v2の脆弱性診断内容を「Slackベース」で管理する

# はじめに

ご覧いただきありがとうございます。

以前[Amazon Inspector Classic](https://qiita.com/gahirosan/items/7a95ccc86e1cec205859)について記事を書きました。

最近 現行バージョンであるInspector v2で検知を行ったところ、検知精度に差があることがわかり、「Classic⇒v2」への移行を行っているところです。

今回はSlack画面で、Inspector v2の脆弱性検知結果を管理できるようにしたいと思います。

# 概要

1. 事前準備
2. Slack ~ Lambda間の連携
3. Lambda ~ Slack間の連携
4. Lambda関数の作成
5. 動作確認

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2697264/95a99621-0a5e-55c7-ffd3-3703d08dbdbe.png)

Slackのプライベートチャンネルでコマンドを実行すると、La

「AWS Lambda実践ガイド 第2版」をレビューしてみる

# AWS Lambda実践ガイド 第2版

久しぶりの3連休を生かして、少し前に購入し放置していた本書を取り組んでみた。

自分自身Lambdaは業務内で「アカウントがログインした時に通知がなる仕組み」を導入した時に使用した程度なので、Lambdaの理解をより深めたいなと思っていました。

# A. ずばり買いですか?
Q. 目的によります。

■本書で学べること
・Lambdaを業務で使用するにあたり必要な仕様や構成の知識
・現場にてよく使われるLambdaの利用方法
・サーバーレスな構成と関連サービス(DynamoDB、SQS、SNS、SAMなど)の知見
・上記を生かした3~4つのハンズオン

上記を目的にするならば十分買いだと思います。
※レベル感としてはサーバーレス初級者~中級者レベル

自分自身は非常に満足しており、Lambdaの基礎知識はもちろんDynamoDBやSQSといった個人では勉強し辛い箇所もまとめ

AWS SAMを使って最もシンプルにLambda × APIGatewayのWebAPIを構築する

# 概要

今回は前回紹介したAWS LambdaのAWS サーバーレスアプリケーションモデル (Serverless Application Model)、AWS SAMの続編になります。

【前回の記事】
[AWS Lambda SAMとは?~AWS SAMを使ってPythonのLambdaプログラムを簡単に作成する~](https://qiita.com/fkooo/items/2dc5ded5149379d7305a “AWS Lambda SAMとは?~AWS SAMを使ってPythonのLambdaプログラムを簡単に作成する~”)

SAMの便利さは前回の記事でなんとなくわかったと思うので今回からはより実践編です。
実際にSAMを使ってAWSのサービスを連携させてみようという内容です。

第一回は、Lambda × APIGateway 編にしました。
この投稿を最後まで実行すると以下の図のようなAWSサービスで構築したWebAPI環境が、なんと**2ファイル30ライン**ほどで完成します。
理解しやすいように**最もシンプルな記載例**としてファイルサンプルを作成したので

AWS提供でないベースイメージからLambdaを作る

# はじめに
以前、コンテナイメージからLambdaを作りました。

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

ところが諸事情(Amazon Linuxでは、PowerShellが十全に動かせず、MS365の監査ログが取得できない)のため、Ubuntuをベースとしたコンテナを作ろうとした際に、わかったことややったことを記事にします。

# 参考

コンテナイメージを使ったLambdaの仕組みについての解説は以下になります。

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

Dockerfileの作り方の参考にしたのは以下です。

https://github.com/nickadam/powershell-lambda

# Lambda動作の仕組み

公式の解説に書いてある内容の自分なりの解釈です。

– Lambda関数を実行するには、Lambdaサービスとラ

Microsoft SQL ServerにODBCで接続するためのLambda Layerを作成する方法

AWS Lambda から pyodbc を使って SQL Server に接続する案件があり、若干つまづいたので備忘録的なメモを残すことにしました。

# 環境

## Lambda
– ランタイムは Python 3.9
– アーキテクチャは x86_64

## pyodbc
– unixODBC-2.3.11 (投稿時の最新)

# TL;TR

– ほぼこれ(ありがたや。。。)
https://gist.github.com/diriver63/b72a954fa0da4851d89e5086aa13c6e8?permalink_comment_id=4199559#gistcomment-4199559

– lambdaの環境変数にiniファイルまでのパスを設定する

– soファイルのバージョンに注意

# 手順(ざっくりと)

適当なディレクトリを作成

“`
$ mkdir pyodbc-layer
$ cd pyodbc-layer
“`

Dockerfileを作成

“`
$ vi Dockerfile
“`

https://gist.github.

OpenCV で (-212:Parsing error) Failed to open NetParameter file: xxx.cfg in function ‘readNetFromDarknet’ が発生したときに確認すること

## はじめに

OpenCV は画像処理ライブラリです

簡単に画像加工が行え、画像データを行列(numpy array)として扱えるため、機械学習でもよく使います

https://opencv.org/

バージョン 3.3 からは DNN (Deep Neural Network) モジュールが追加され、
OpenCV で機械学習モデルを使った推論が実行できるようになりました

readNetFromDarknet や readNetFromTensorflow などによって、
他の機械学習ライブラリで学習したモデルを読み込んで使うことがきます

## エラー内容

先日、以下の記事でやったのと同じように、Docker コンテナで AWS の Lambda 関数を作っていた時のこと

https://qiita.com/RyoWakabayashi/items/0734f7f0a76a5dad3770

今回は Darknet で学習したモデルを OpenCV で動かそうとしていました

https://pjreddie.com/darknet/

以下のようなコードでロードす