Lambda関連のことを調べてみた2021年02月27日

Lambda関連のことを調べてみた2021年02月27日

AWS LambdaからS3にファイルをアップロードする

# サンプルコード
– Body・・・ファイルに書きたい内容
– Bucket・・・アップロード先のバケット
– Key・・・アップロードしたときのファイル名

“`lambda_function.py
import boto3

def upload():
client = boto3.client(‘s3′)
response = client.put_object(
Body=’Hello from Lambda!’,
Bucket=’my-bucket’,
Key=’sample.txt’,
)

def lambda_handler(event, context):
upload()
return 0
“`

# サンプルロール

既存のラムダロールに追加する。

“`
{
“Version”: “2012-10-17”,
“Statement”: [
{
“Effect”: “Allow”,
“Action”: “s3:PutObject”,

元記事を表示

【APIGateway+Lambda】APIキーを必要とするAPIでアクセス制限

APIはすでに作成されておりデプロイ状態にある前提とします。

まずは**使用量プラン**をクリック
![スクリーンショット (160)_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536448/ab8d8948-cf4a-e5fc-6f26-70f29f3d710a.jpeg)

**作成**

![スクリーンショット (161).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536448/f3a042a1-3675-5b4f-d1f2-475af1aa4b9e.png)

作成に必要な設定を行います。

このリクエスト数を越えてしまうと
429 Too Many Requests というエラーが出てアクセスができなくなります。

![スクリーンショット (162).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/53644

元記事を表示

【APIGateway+Lambda】AWS外からのパラメーターを使用する

## 先ずはLambda関数を作成

今回は与えらえた値を返すだけの**test_return_valuables**という
シンプルな関数をPythonで作成します。

![スクリーンショット (154).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536448/f28ce3f9-7fd9-00d7-2747-81e75bcfb34e.png)

## APIGatewayでAPIを作成

![スクリーンショット (150)_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536448/0b50e9a4-5a7d-4902-6a0e-88b12bd91e7c.jpeg)

**REST API**を選択し構築。

さらにメソッド作成で**POST**を追加します。
![スクリーンショット (158).png](https://qiita-image-store.s3.ap-northeast-1.amazona

元記事を表示

OpenCVをAWS Lambda + Python + Serverless Frameworkで動かす

OpenCVをAWS Lambda + Python + Serverless Frameworkで動かしてみました。

先日、[PillowをLambdaで動かす](https://suzuki-navi.hatenablog.com/entry/2021/02/02/163647)記事を書きましたが、このときと違って、OpenCVはyumでインストールの必要なshared objectに依存しているのでだいぶ面倒でした。

# 手順概要

1. serverless-python-requirements インストール
2. Pythonサンプルコードを記述
3. requirements.txt と serverless.yml と Dockerfile にOpenCV動作に必要な事項を記述
4. あとはデプロイ

OpenCV特有は3のみです。

# 手順詳細

## serverless-python-requirements インストール

AWS Lambda + Python + Serverless FrameworkにPythonのパッケージをインストールする方法

元記事を表示

LaravelをコンテナにしてLambdaでデプロイするのが超簡単になった2021年

[昨年同じ記事](https://qiita.com/umihico/items/64fcf159f68ebd866170)を書きましたが、完全に過去の遺物と化しており、現在の手順はまるで違います。LaravelをコンテナにしてLambdaにデプロイする記事は見つからないので、書きました。

デモサイトとgithubは以下です。
https://w0qw04g8sj.execute-api.ap-northeast-1.amazonaws.com/
https://github.com/umihico/laravel-lambda-docker-bref

### curlでプロジェクトが作成できる

パスが動的に設定可能で、そのままアプリ名となります。この場合`larademo`というフォルダが作成され、配下に展開されます。

“`bash
curl -s https://laravel.build/larademo | bash
“`

### docker-composeがデフォルトでパッケージされている。

即座にコンテナ内でcomposer, phpコマンドを使わせてくれ

元記事を表示

この令和時代にサーバーレス知らないのはヤバみ

## はじめに

皆さま。ごきげんよう。
僕が愛して止まないデヴィ夫人の冒頭挨拶から本記事はスタートすることにします。

タイトルが「見たらわかる失礼なやつやん」で大変申し訳ないと思っております。よくあるただの煽り文句を使いました。
僕も最近までサーバーレス知りませんでした。

## Serverless とは

サーバー管理が不要なアーキテクチャです。

自前でサーバーを用意/管理するとなると様々な課題と向き合うかと思います。例えば、OS設定や容量管理、負荷管理、ランニングコスト、アイドル時のリソース管理、アクセス制御、セキュリティ管理などキリないですが、サーバーレスアーキテクチャを利用することで、そんなものは気にしなくて良くなり、プログラムロジック(本質)の開発に注力することができるかと思います。熱盛ですね。

現代では、モノリシックよりもマイクロサービスなどの疎結合な特性を持つアーキテクチャが注目されていると思いますが、その一部として、サーバーレスアーキテクチャを導入するという形も考えられると思います。

## [Serverless Framework](https://ww

元記事を表示

DynamoDBからCSVをエクスポート&データ登録 Lambda APIGateway

# 記事の内容
 ローカル上のCSVファイルにあるデータをDynamoDB上に登録する。また現在時点のDynamoDBのデータをローカルにCSV出力する必要が出てきたため、簡易的な実装を行いました。メモがてら記事に

# 構成とDB外観
## 構成
 構成は以下の通りです。DynamoDBへアクセスする度にログが残るよう、ClaoudWatchと連携しています。

![aws.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/323251/a77be9a6-9d1f-378f-30c7-32b1ec93aaf5.png)

# DB外観
 テーブル名が`kokyaku`パーティションキーが`id`となっています。今回はサンプルとして予め2件のデータを登録した状態でスタートします。

![スクリーンショット 2021-02-23 2.01.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/323251/a1a19ae5-04

元記事を表示

SAMをつかったサーバーレスな郵便番号APIを紹介!

# SAMをつかったサーバーレスな郵便番号APIを紹介!
## はじめに
郵便番号から住所を検索するAPIってなんで無料で存在しないんだってよく思います。(ほんとにないかはよく調べてないので知りませんが。)
なので簡単にデプロイして公開して自動更新までしてくれるアプリケーションをSAMをつかって作成したので紹介します。
またSAMのチュートリアルに丁度いいくらいの量だと思いますので、ぜひ[実装解説](#実装解説)も見てみてください。
この記事で紹介しているソースコードはこちらです。
https://github.com/Cohey0727/zip-code-app

### 構成について
日本郵便株式会社は郵便番号と住所を紐づけたCSVファイルを公開しています。https://www.post.japanpost.jp/zipcode/download.html
ですがCSVファイルのままだとWeb画面などで利用するのは難しいです。
そこでLambdaでファイルをダウンロードして検索可能な状態でDynamoDBに格納する関数とそれをAPIとして公開する関数、定期的にそれらを更新するイベ

元記事を表示

コピペで出来る!LambdaとAPI Gatewayを使って簡単にAPIを作る手順

散々既出ですが、自分の備忘録を兼ねてメモを残しておきます。

## 構成

Webクライアント – API Gateway – Lambda (Python) – S3

S3上にあるjsonオブジェクトを単純に返すだけのシンプルなAPIです。

## S3にjsonを配置する

Bucket名は何でも良いですがグローバルでユニークである必要があるので適当な数字をつけるなど工夫して下さい。
今回は“`test-lambda-api-12345“`としました。(※1)

![b1511a8403885c4bf3f5877875cee810.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/229008/717354c4-829d-511b-fe2c-e638aab2eab4.png)

以下のようなjsonを作り、“`hello.json“`という名前でBucket上に保存します。

“`
{
“greeting”: “Hello, World!”
}
“`

![58babbdd034

元記事を表示

LambdaからS3を利用する

# はじめに
[チュートリアル: Amazon S3 で AWS Lambda を使用する](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/with-s3-example.html)で公開されているチュートリアルを試しながら、LambdaからS3を利用した時のメモになります。
(Cloud9の環境構築は[Cloud9_環境構築2021](https://qiita.com/mokoberu/items/7810eab2b2852f10cac9)にまとめています。)

## S3にアップロードされる画像のサムネイルを作成する
1. IAM コンソールの [Roles] ページを開きます
1. [ロールの作成] を選択します
1. 次のプロパティでロールを作成します
1. [信頼されたエンティティ] – [AWS Lambda]
1. [Permissions (アクセス許可)] – [AWSLambdaExecute]
1. ロール名 – lambda-s3-role

チュートリアルにあるサンプルを準備します。

“`conso

元記事を表示

Python AWS Lambda でmultipart/form-dataのファイルをS3にアップロードする

# Python AWS Lambda でmultipart/form-dataのファイルをS3にアップロードする

##### 概要

AWSのLambda経由でmultipart/form-dataできたものを、S3にアップロードする。

##### 小言
clientでそのままS3に送る実装や、Blob化してファイルを送信しているのはよく見るが、めんどくさいし通常のApiならmultipart/form-dataを利用する方が多く(~~多いと思ってる~~)、なんでClientがApiとLambdaで変更しないといけないか不思議に思ったため。

##### Dependent

– [multipart/form-dataをLambdaで利用する](https://qiita.com/Gma_Gama/items/858f32181ef288ba8d8d)

##### Result

– [レポ](https://github.com/Ntakuya/sam-multiple-form-data-sample/tree/feature/multipart-form)

## TL

元記事を表示

Amazon API GatewayのLambda Authorizerのレスポンスに注意

API GatewayのLambda Authorizerでハマったので、原因調査の覚書。

## 症状
Lambda Authorizerで認証すると、アクセス許可しているはずなのに、認証失敗する。
サーバーからは500番のステータスコードが返される。
サーバー側のログを見る限り、リクエストはLambda AuthorizerのLambdaまでしか到達できていない。

AuthorizerのLambda関数から返しているポリシーは下記のとおりであった。

“`json:Authorizerのレスポンス
{
“principalId”: “52e60f29-a7c8-4665-99ea-1ec8f7fecb81”,
“policyDocument”: {
“Version”: “2012-10-17”,
“Statement”: [
{
“Action”: “execute-api:Invoke”,
“Effect”: “Allow”,

元記事を表示

Lambdaから同一アカウントの異なるリージョンのLambdaを呼び出す

# 構成

![Lambda.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344711/27d13986-824f-ddbc-f33a-9422b8bcdf4a.png)

# 呼び出し先の設定

 コードは適当です。

“`py:呼び出し先

def lambda_handler(event, context):
test = “呼ばれたよ!”
return test
“`

 Lambdaからの呼び出しを許可するためのアクセス許可を付与します。
 同一アカウント同一リージョン間でのLambda呼び出しでは必要ありませんが、異なるリージョン間で呼び出す場合は必要になるようです。
 異なるアカウント間でLambdaを呼び出したことはありませんが、おそらく今回のようにアクセス許可を付与する必要があると思います。
 ただしこのポリシーは全てのアカウントからLambdaを使用できてしまうので、ソースアカウントを指定したポリシーを使用した方がいいでしょう。

“`json:リソースベース

元記事を表示

【boto3】LambdaでS3のディレクトリ削除

LambdaからS3のディレクトリ削除、正確にはS3にはディレクトリがないので同一prefixのオブジェクトの削除をするやり方です。

“`python:delete_objects.py
def lambda_handler(event, context):
s3 = boto3.resource(‘s3’)
bucket = s3.Bucket(‘your_bucket_name’)
bucket.objects.filter(Prefix=”insert/prefix/name/”).delete()
“`

上記コードのバケット名とPrefixを環境に合わせて変更しましょう。またLambdaのロールにS3への削除権限が必要なのでそれも付与しておきましょう。
tipsですがやり方調べるのに時間がかかったり、冗長なやり方を多く見かけたので記事にしておきます。

元記事を表示

[AWS] CloudWatch Logsを監視し、Slackに通知するLambda関数の例

# 概要
Lambdaを使用してCloudWatch Logsを監視し、Slack通知を作ったときのLambda関数のソースの共有です。

以下の解説は省略します。

– CloudWatch Logsへログの出力
– Lambda関数の登録方法
– Slack Incoming Webhookの設定

# Lambda関数(Python3)
LaravelのログをJSON形式にしたものを処理しています。
ご自身の環境に合わせて修正してください。

“`python
# -*- coding: utf-8 -*-
import base64
import json
import urllib.request
import zlib

def lambda_handler(event, context):
# print(“Received event: ” + json.dumps(event, indent=2))
data = zlib.decompress(base64.b64decode(event[‘awslogs’][‘data’]), 16+zlib.

元記事を表示

PyTorch on Lambda で MNIST の推論を実行する API を作成する(AWS CDK)

# はじめに

Docker イメージが Lambda で実行できるようになり、イメージも 10GB までとなったため、機械学習の推論 API のロジックを Lambda で実行できるかを試してみました。
今回は PyTorch で作った MNIST のモデルを置いてみます。

## 環境

– Python 3.8
– PyTorch 1.6.0 CPU
– PyTorch 1.1.8

## API Gateway + Lambda で画像を受け取る

まずは、API なので画像を受け取って Lambda で処理できる形まで持っていく必要があります。こちらは長くなったので別記事に記載します。以下の記事の内容が完了していることを前提とします。
[画像をAPI Gateway+Lambdaで受け取って Pillow で処理する(AWS CDK) – Qiita](https://qiita.com/ou-mori/items/f0045028b64e0263c3dd)

## モデル作成

この記事で詳細は解説しませんが、以下のように別途ディレクトリーを作成して PyTorch モデル

元記事を表示

画像をAPI Gateway+Lambdaで受け取って Pillow で処理する(AWS CDK)

# はじめに

API Gateway + Lambda で Post された画像を Pillow で処理したかったため、AWS CDK で環境構築してみました。

## API Gateway + Lambda(AWS CDK)

### プロジェクト初期化

AWS CDK では API Gateway と Lambda を構築します。今回は Python で構築します。
プロジェクト初期化コマンドは以下の通りです。作成するディレクトリー名は任意です。今回は `qiita-aag-image` としています。

“`zsh
$ mkdir qiita-aag-image
$ cd qiita-aag-image
$ cdk init –language=python
“`

### インフラコード

qiita_aag_image ディレクトリーに qiita_aag_image_stack.py が作成されているため、編集します。API Gateway や Lambda の Id は好きな名前をつけてください。
また、今回想定する画像形式は png とします。こちらも状況

元記事を表示

【AWS】Amazon EFSを作成して、EC2とLambdaから使用する

Amazon EFSを作成し、EC2にマウント、Lambdaからアクセスできるようにしてみました。
# 前提条件
– VPC、EFS、EC2は同一リージョンに作成する(今回は東京リージョンを使用)
– LambdaはEFSに到達できるVPCに接続する必要がある
– プライベートサブネットが作成済みの状態から開始する
– EC2へSSH接続を行うためのキーペアが作成済みの状態から開始する

## この記事のゴール
– Amazon EFSを作成し、LambdaからEFS内のファイルを操作する
– EC2にEFSをマウントし、EFS内のファイルを操作する

以下の構成をイメージしています。
![aws.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620994/c52c837e-aeef-5991-f56a-9b8ab492f950.png)

## この記事で扱わないこと
– VPCの作成方法
– パブリックサブネット、プライベートサブネットの作成・設定方法
– EC2インスタンスへのSSH接続方法

#

元記事を表示

Doker Desktop for Windows を利用した AWS lambda ローカルPC開発環境構築

## 環境
* Windows 10 Pro 20H2
* docker desktop Version 3.1.0(51484)

## docker desktop インストール

* [Docker Desktop for Windows](https://hub.docker.com/editions/community/docker-ce-desktop-windows)
Get Docker よりインストーラーをダウンロードして実行

ちなみに、私のPCではインストール実行後、以下の問題が出て解決するまで時間がかかりました。

* [\[Docker\] "Timed out waiting for the lifecycle-server to start"によりサービスが起動しない – Qiita](https://qiita.com/ktz_alias/items/f617c526a18de9b3f0f7)

## amazonlinux 起動
* docker desktop 起動後、PowerShell より以下のコマンドを実行

“`

元記事を表示

Lambdaでメッセージを編集してSNS Publishする一例

# Lambdaのコード

 ヒアドキュメントと変数、`json.dumps`を利用した一例です。
 SecurityHubの通知を例にして作成しています。

“`py:lambda_function
from __future__ import print_function
import json
import boto3
import os

sns = boto3.client(“sns”)
def lambda_handler(event, context):
message = event[“detail”][“findings”][0]
msg = “””
Security Hubにより検知した違反内容
セキュリティ基準コントロール:{standards_control_arn}
タイトル:{title}
説明:{description}
セキュリティステータス:{status}
重要度:{severity}
修復手順:{remediation_text}({remedeation_url})

元記事を表示

OTHERカテゴリの最新記事