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

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

40 代おっさんLambdaを使ってみる

## 本記事ついて

本記事は プログラミング初学者の私が学習していく中でわからない単語や概要をなるべくわかりやすい様にまとめたものです。
もし誤りなどありましたらコメントにてお知らせいただけるとありがたいです。

## lambdaを使う

lambdaの作成画面に行ってください。

作成を押してください

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641940/85ca853c-5b13-9ada-3d44-f0b5f629862b.png)

左から

・一からの作成

・設計図の使用
あらかじめAWSで設計されているもの使用できる

・コンテナイメージ

・Serverless Application Repository

### 設計図の使用を選ぶ

hello-world-pythonと入れる

テンプレートが表示されるのでチェックボックスにチェックを入れて、左下の設定をクリック

### 関数名に名前を入れる

関数名をhello-pythonにしました(わかる名前で

元記事を表示

Lambda/SAM ログ出力方法 メモ

* Lambdaでのログ出力をsam cliを使って試したのでメモとして残しておく。

## 事前準備

* sam プロジェクト作成

“`shell
sam init
“`

※ランタイムはPython3.8を選択。

## コード

* `template.yml`

**ログレベル**を環境変数として設定する

“`yaml

Environment:
Variables:
LOG_LEVEL: !Ref LogLevel

Parameters:
LogLevel:
Type: String
Default: INFO
“`

* `app.py`

“`python
import json
import logging
import os
import requests

def lambda_handler(event, context):
logger = logging.getLogger()

# ログ

元記事を表示

40 代おっさんLambdaのイベントソースとlambda関数を学ぶ

## 本記事ついて

本記事は プログラミング初学者の私が学習していく中でわからない単語や概要をなるべくわかりやすい様にまとめたものです。
もし誤りなどありましたらコメントにてお知らせいただけるとありがたいです。

## イベントソース

### イベントソースとは

lambda関数が呼び出されるきっかけとなるもの
lambda関数にはハンドラーなるものがあり、それでイベント受け取る

#### lambda関数を呼び出すタイプ

・同期
・非同期
・ストリーム
がある

イベントソースにより呼び出しのタイプが異なる。
それにより、aws側でリトライを実行されるのか、ユーザー側でリトライを実装するのかで変わる

## 最後に

またこの記事は AWS 初学者を導く体系的な動画学習サービス「AWS CloudTech」の課題カリキュラムで作成しました。

元記事を表示

amplifyで発生した Export EXPORT_NAME cannot be updated as it is in use by STACK_NAME の対処

# amplifyで発生した `Export EXPORT_NAME cannot be updated as it is in use by STACK_NAME` の対処

– amplify cli version: 7.6.3
– AWSコンソール操作 : 2022/03/05 時点

amplify pushをしたところ以下のエラーが発生した

“`markdown
Export EXPORT_NAME cannot be updated as it is in use by STACK_NAME
“`

このメッセージ単体だけで調査したところAWSの以下の記事が引っかかるが、解決の方法の一部でしかなかったので対処方法を残す。

[https://aws.amazon.com/premiumsupport/knowledge-center/cloudformation-stack-export-name-error/?nc1=h_ls](https://aws.amazon.com/premiumsupport/knowledge-center/cloudformatio

元記事を表示

40 代おっさんLambdaの概要、料金、主な連携サービスを学ぶ

## 本記事ついて

本記事は プログラミング初学者の私が学習していく中でわからない単語や概要をなるべくわかりやすい様にまとめたものです。
もし誤りなどありましたらコメントにてお知らせいただけるとありがたいです。

## Lambda

### Lambdaとは

サーバーレスコンピューティングサービス
サーバーなしでコードを実行できるサービス

#### サポートしている言語

Java,Go,PowerShell,Node.js,C#,Python,Ruby

#### メリット

・基盤となるインフラに依存せずコードを実行
・イベントに応じてコードを実行する
・自動スケーリング
・エッジで実行可能

### 料金

リクエスト数と実行時間で決定

#### 無料枠

リクエスト数:100万件まで無料
実行時間:40万GB-秒まで無料

#### 課金

リクエスト数:100万件あたり0.20USD
実行時間:GB-秒あたり0.0000166667USD
(メモリ1GB割り当ての場合)

### lambdaに連携できるサービス

・Cognito:ウェブアプリケーションおよびモバ

元記事を表示

SAMで構築したLambdaのエラーをSentryに通知する

# 概要

AWS SAM(AWS Serverless Application ModelにてStepFunctionsを利用したバッチを作成しています。
各Lambdaで発生した例外をSentryへ通知したかったため、調べてやってみました。

共通的にソースコードを変えずに設定する方法が見つからなかったので、
1つ1つのLambda handlerのソースを修正する方法になってしまいました。
※知っている方いたら教えてください。

# 設定方法

まずはSentryにてプロジェクトを作成しdsnを取得してください。

次に[公式](https://docs.sentry.io/platforms/node/guides/aws-lambda/)にも書いている通り@sentry/serverlessを追加します。
(Lambda Layerを使用することもできます。詳しくは後述)
“`sh
yarn add @sentry/serverless

or

npm install –save @sentry/serverless
“`

実際のソースコードへSentryへの通知設

元記事を表示

jest.mock + prototypeでDynamoDBをMock化した

# そもそもやりたかったこと
SQSから受け取ったメッセージを lambdaで加工し、
その情報を使ってDynamoDBからItemをGet、指定のURLへItemの内容をaxiosを使ってPostする仕組みを作っていました。

テストコードを記述するにあたり DynamoDB.DocumentClient.get部分をMock化したいと思いました。
ググると[aws-sdk-mock](https://www.npmjs.com/package/aws-sdk-mock) とか、[aws-sdk-client-mock](https://www.npmjs.com/package/aws-sdk-client-mock)とか情報が出てくるのですがうまくMock化できず詰まりました。
aws-sdk-client-mockはそもそも使っているAWS SDKがv2だったので使えなそうと思い断念。

最終的に jest.mock + JavaScriptのprototypeの組み合わせでうまく行ったので、備忘のため記述します。

# 環境
lambda: typescript(4.1.3)

元記事を表示

AWS LambdaからTwilio Functionsに値を渡す

# これはなに?
AWSLambdaからTwilio Fnctionsへ値を渡すときに使用した例です。

例えばですが、CloudWatchAlarmの発生をトリガーにLambdaが動き、
LambdaからTwilio Functionsが呼び出されSMSの通知内容でアラート名をお知らせするなど行えると思います。

## Lambda側
下記にて紹介されているコードを転用して作成しております。
今回はCloudWatchAlarmよりアラートが上がった際のアラート名を連携するようにしています。

https://qiita.com/mobilebiz/items/406461282a23d2e056a6#%E3%82%BD%E3%83%BC%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%E6%BA%96%E5%82%99

“`index.js
exports.handler = function (event, context, callback) {
const crypto = require(‘crypto’);
const

元記事を表示

別のLambdaを同時に呼び出して実行する方法【備忘録】

## 背景
Lambdaを使って日付ごとにデータをスクレイピングすることがあった。
大量のデータであったが、繰り返し文で日付を変えながら行うプログラムとしていたため、非常に時間がかかった。

そこで、①実行指示Lambdaと②スクレイピングLambdaに分けてプログラムを作成し、①にて変数を入れ替えながら②に指示するような構成にすることで、Lambdaの同時実行が可能になったので、備忘録として記載する。

参考記事については複数層に分けて大量のLambda実行を可能としているが、今回はわかりやすさ優先で、(親)と(子)の2層構造でLambdaを同時実行してみる。

## イメージ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/414468/49578015-605e-e696-d64f-c0bab0855d94.png)

## 親Lambda

“`Python:parent

import json
import io

client = boto3.client(‘lambda

元記事を表示

Docker+AWS Lambdaのローカルテスト環境を作成する

## 概要

Lambdaのローカルテスト環境をDockerで作成しました。本記事ではPythonで書いています。
公式ドキュメントを読んでも上手くいかなかったので、記事にします。

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

## 用意するもの

– Dockerコマンドを実行できる環境

## 構築手順

### ディレトリ構成

“`
(プロジェクトルートディレクトリ)/
├── Dockerfile
├── requirements.txt (不要なら作成しなくて良い)
└── app.py
“`
### ファイル作成

“`Dockerfile:Dockerfile
FROM public.ecr.aws/lambda/python:3.8

COPY app.py ${LAMBDA_TASK_ROOT}
COPY requirements.txt .

RUN pip3 install -r requirements.txt –target “${LAMBDA_TA

元記事を表示

Presigned URLの発行と取得したURLを使用して画像ファイルをGET/PUTする。

## 目的
コンテンツをサーバー上にアップロード・ダウンロードして配信するというユースケースがある。コンテンツを保持しておくサービスとして、AWSにS3というサービスがあるのでそれを利用する。

## 環境
– AWS Lambda Python 3.9

## Lambdaコード
“`python
# — coding: utf-8 —
import boto3
from botocore.client import Config
import os

REGION_NAME = os.environ[‘REGION_NAME’]
S3_BUCKET_NAME = os.environ[‘S3_BUCKET_NAME’]
DURATION_SECONDS = os.environ[‘DURATION_SECONDS’]
KEY_NAME = os.environ[‘KEY_NAME’]

s3 = boto3.client(‘s3′, config=Config(signature_version=’s3v4’))

def lambda_handler(event, cont

元記事を表示

LambdaPermissionとは何か

# はじめに
Former2でCloudformationテンプレートを作っていたらLambdaPermissionなるものが生成された。
“`yaml
LambdaPermission:
Type: “AWS::Lambda::Permission”
Properties:
Action: “lambda:InvokeFunction”
FunctionName: !GetAtt LambdaFunction.Arn
Principal: “apigateway.amazonaws.com”
SourceArn: “**************”
“`
身に覚えがないぞ。

# 結論
* コンソールから手動で作成するときは自動で生成されるもの。
* Lambda関数にトリガーをセットする際、トリガーからのInvocateを許可するリソースベースポリシー。つまりこいつがないとトリガーが機能しない。

## 公式を確認
_The AWS::Lambda::P

元記事を表示

Cloud Watch Alarm + SNS + LambdaでECS・Fargateのリソース状態をSlack通知する(Terraform)

# 本要件の流れ

1. Cloud Watch Alarm発動
2. SNSへメッセージを送信
3. トリガーを検知しLambdaが起動
4. LambdaからSlackへ通知を送信

# 前提

– ECSでなにかしらのアプリケーションを構築済み

# Webhookの取得

まずは実装の前にwebhookが必要なので、事前設定を行います。

[https://slack.com/apps](https://slack.com/apps) へアクセスし、

アプリを検索する > カスタムインテグレーション > Incoming Webhook

で設定の編集を行い、webhookを追加するslackのチャンネルを登録してください。

するとwebhookのurlが発行されるので、それを控えておきます。

「対象のチャンネルにWebhookを追加し、URLを取得する」ということができれば良いです。

色々と記事は出回っているのでググってもらえれば助かります。

# 実装

最初に取得したwebhookのurlは変数で渡せるようにしておきましょう。

develop/variables

元記事を表示

Lambda(Node.js)で別アカウントのECSサービス情報を取得する

# はじめに
Node.jsを使ってスイッチロールして別アカウントのECS情報を取得する際に実装方法が分からなかったので、備忘として残しておきます。
Lambda+Node.jsの情報少なすぎひん…?

# 設定内容
## 権限設定
Lambdaを作成する前に以下の設定だけ先にやっておきます。
色々試しながらだったので、もしかしたら漏れがあるかもしれません。

* アクセス元のIAMロールにAssumeRole権限追加
* アクセス先のIAMロールにECSへのアクセス権限追加(ECSFullAccess)
* アクセス先のIAMロールの信頼関係にアクセス元のIAMロールを追加

## Lambda実装
初めてNode.js書くので不要な実装とか含まれているかもしれませんが、実際に実装したプログラムは以下です。
普段Pythonしか書かないのでcallbackとか全然頭に入ってこなかった。。

“`
const AWS = require(‘aws-sdk’);
const sts = new AWS.STS({apiVersion:’2011-06-15′,region:’ap-

元記事を表示

Amplify Lambdaのトリガーでミスした件

# Amplify Lambdaのトリガーでミスした件

## はじめに
Amplify CLIでS3にLambdaトリガーを設定した際に、トリガーが永続的に発火しLambdaの請求額が上がってしまったので再発防止+覚えておくように書きます。

## 概要
AWS Amplifyで開発をしています。以下に簡単な概要を記述します。
クライアントは、ある特定のファイルをAmplifyで作ったStorage(S3)にプットします。それと同時にAPIでDynamoDBにレコードを挿入します。

この際にS3にプットされたファイルオブジェクトが正しいデータが否かを確認するためにLambdaトリガーをAmplifyで設定します。

このLambdaはDynamoDBにそのファイルのデータがあるかを確認し、あればそのままファイルをS3に保存し、ない場合はそのS3オブジェクトを削除するというものです。

## ループまで
Amplify cli で storageにトリガーを設定し、プッシュしました。

“`
$ amplify update storage

Select from one of

元記事を表示

Lambdaでデプロイしたのに反映されない?と思ったらエイリアスを確認

# Lambdaのデプロイが反映されない
最近ジョインしたプロダクトの開発環境にて、修正したLambda関数をサクッと確認してみようとしたところ「あれ? デプロイしたのに反映されていない……?」となったので以下対応メモします。

## 事象
既にCloudformationその他で構築され問題なく動作しているAWS環境にて、Lambdaのソース(Python3.7)を修正して動かしてみたところ、明らかにソースが反映されていない(修正前のコードで動いている)という事象が発生。

デプロイのやり方としてはとてもシンプルで、Lambdaのチュートリアルとかでもよくある「コンソール画面でソースを修正して、『Deploy』クリック」するという方法。

↓画像の「Deploy」をクリック
![コメント 2022-03-01 124222.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1319998/682df768-17c0-ce83-1a31-41595d982b29.png)

その後別のデプロイ方法(zipフ

元記事を表示

AWS Lambda(Python)から直接画像を出力する方法(覚書)

# SVGを出力したい

特に何も考えずに `Content-Type` だけしっかり指定してあげればOK。

“`Python
return {
‘statusCode’: 200,
‘headers’: {
‘Content-Type’: ‘image/svg+xml’,
},
‘isBase64Encoded’: False,
‘body’: ‘svg version=”1.1″ xmlns=”http://www.w3.org/2000/svg”>…’,
}
“`

# PNGを出力したい

こっちが主題になります。
Pythonで画像を取り扱う場合、何らかのライブラリを使用することになると思いますが、今回はおそらく一番使われてるであろう[Pillow](https://github.co

元記事を表示

Amazon API Gateway + Lambda統合をJavaで実装するメモ

## 対象読者
– 自分
– JavaでLambdaを実装する人
## API Gateway
REST APIで定義する。
メソッドの作成時、統合タイプが選択できる。この時Lambda関数が選択できるが、
– 「Lambda プロキシ統合の使用」にチェックを入れるとLambdaプロキシ統合のリクエスト・レスポンス形式に沿ってLambda(Java)の実装が必要
– Lambda プロキシ統合
– チェックを入れないとAPI Gateway側の「統合リクエスト – マッピングテンプレート」での定義が必要となる。
– API Gateway 内でリクエスト変換をするということ
– Lambda 非プロキシ統合

マッピングテンプレートの例:
“`text:マッピングテンプレート
#set($inputRoot = $input.path(‘$’))
{
“title” : $input.json(‘$.title’),
“body” : $input.json(‘$.body’),
“coverImageUrl” : $input.json

元記事を表示

RDS Proxy を使って、AWS Lambda から接続してみた

# はじめに

AWS Lambda が良く語られますが、予測不可能なリクエストが来た時に、多くのインスタンスを横に並べてリクエストを捌く構成があります。AWS Lambda の場合は、1リクエスト1インスタンスとなるので、需要が高まったときには必然的に多くのインスタンスが立ち上がる構成になります。この時、インスタンス が RDS のコネクションを取得している場合、多くのデータベースコネクションを取得することにより、データベース側の負荷が高まってしまう課題がありました。

こういった問題を解決するための選択肢の一つとして、RDS Proxy と呼ばれるデータベースのコネクションをプールしてくれる機能があります。Amazon RDS に備わっている機能となっており、複数のインスタンス間でデータベースコネクションをプールしてくれます。

RDS Proxy を利用するメリットは次の通りです。

– アプリケーションのスケーラビリティ
– データベースのフェールオーバーに伴う、アプリケーション側のフェールオーバーにかかわる時間の短縮
– AWS IAM 認証により、クレデンシャル情報を Se

元記事を表示

AWS Compute Optimizerを利用したコスト・パフォーマンス最適化

## はじめに
まず、AWS Compute Optimizerというサービスをご存知でしょうか?
AWS Compute Optimizerは簡単に言うとAWSコンピューティングサービスのメトリクスから
パフォーマンス及びコストを最適化の提案をしてくれるサービスです。

“`
AWS Compute Optimizer は、 AWS リソースの設定と使用率のメトリクスを分析するサービスです。
リソースが最適かどうかを報告します。また、コストを削減し、ワークロードのパフォーマンスを向上させるための最適化に関する推奨事項を生成します。
“`
https://docs.aws.amazon.com/ja_jp/compute-optimizer/latest/ug/what-is-compute-optimizer.html

## 対象リソース

AWS Compute Optimizerでは以下のリソースをサポートしています。

– Amazon Elastic Compute Cloud (Amazon EC2) インスタンス
– Amazon EC2 Auto Scaling

元記事を表示

OTHERカテゴリの最新記事