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

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

LambdaでRDS Proxy経由でAurora(MySQL)に接続する(IAM認証)

待ち望んでいた`RDS Proxy`が東京リージョンでGAされました。
https://aws.amazon.com/jp/blogs/aws/amazon-rds-proxy-now-generally-available/

早速、`Lambda`から利用する機会があったのでメモしておきます。
今回は、セキュアに接続するため、`TLS`+`IAM`認証で接続します。
上記で接続すると、`Lambda`に認証情報(具体的にはDBのパスワード)の取得コードを記載しなくて良いのがかなり良い感じです。

# 前提

`Aurora(MySQL)`は存在していること

# 手順

1. `Secrets Manager`設定
2. `RDS Proxy`作成
3. `Lambda`から接続

## `Secrets Manager`設定

マネジメントコンソールから`Secrets Manager`に移動して、認証情報を入力し、シークレットを作成します。

![スクリーンショット 2020-08-29 10.39.57.png](https://qiita-image-store.s3.ap

元記事を表示

AWS lambdaを使ったサーバーレスウェブアプリの開発

#目的と目標
今回、目的はwebアプリケーションを作る!その過程で、学びながら進めるにあたって大きな壁になるのがサーバーの取り扱いと管理の部分がありました。そこで、最近はやりのサーバーレス webアプリケーションの開発を目標にして進めていくことにしました。

##アーキテクチャー
![コメント 2020-08-28 114937.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/573931/ac919afe-2b3a-f1a4-8083-1d971ff43ada.png)

##今回使用する構成
aws cognitoを使用した認証・認可機能をつけたログイン・ログアウト機能の追加。
aws Apiを使ってaws lambdaを使って、aws DynanoDBにデータの保存と参照。
aws S3にファイルを上げることで外部からの部分的アクセス。

##デモアプリケーション!
https://www.miryuu.com/
このサイトの記事を参照してください

元記事を表示

透過lambda來自動複製S3檔案與重新命名

– [0. Intro](#0-intro)
– [1. 安裝](#1-%e5%ae%89%e8%a3%9d)
– [2. 設定](#2-%e8%a8%ad%e5%ae%9a)
– [3. 細節說明](#3-%e7%b4%b0%e7%af%80%e8%aa%aa%e6%98%8e)

## 0. Intro

先前在專案上常常會需要開放讓外部廠商把眾多的檔案上傳到S3的Bucket中,不過常常遇到檔案不符合規則或是副檔名不對的問題。
後來乾脆寫了一隻lambda來自動在S3 Object Create時幫忙處理這些瑣碎的小事。

因此借用了Serverless framework來幫忙快速完成了這樣的自動化。
整理而言,這隻lambda大致上的流程如下。

1.偵測Object Create@source Bucket,取得object name
2.透過AWS SDK – S3的copyObject來複製到新的Bucket中

開始前必須先安裝好serverless cli,如果不清楚的人可以參考先前的介紹[Serverless Framework for AWS Lambda D

元記事を表示

使用AWS Lambda來每天定時開關機EC2 instance

– [0. Intro](#0-intro)
– [1. 安裝](#1-%e5%ae%89%e8%a3%9d)
– [2. 設定](#2-%e8%a8%ad%e5%ae%9a)
– [3. 細節說明](#3-%e7%b4%b0%e7%af%80%e8%aa%aa%e6%98%8e)

## 0. Intro

對於與EC2整合的lambda有滿多應用的,不過這篇主要介紹的是透過lambda來每天定時的開機/關機特定的ec2 instance,在目前團隊內的用途主要有下面這幾種狀況

1. 每天定時的開關bastion server,避免下班後/週末閒置的$$ resource
2. 定期的batch job透過lambda來開機後自動執行相關script後就會休息。

開始前必須先安裝好serverless cli,如果不清楚的人可以參考先前的介紹[Serverless Framework for AWS Lambda Development
](https://www.p0n2.net/2020/01/serverless-framework-for-aws-lambda.html

元記事を表示

lambda最常見的四大類使用情境

– [0. Intro](#0-intro)
– [1. Automation](#1-automation)
– [2. Data Transformation](#2-data-transformation)
– [3. API Service](#3-api-service)
– [4. Message Processing](#4-message-processing)

## 0. Intro

對於一個已經雙腳踏入AWS雲中的雜端工程師而言,lambda已經被置入每天的生活中了,記得前輩曾經說過,如果開會時PM問了一些AWS的問題而你有聽沒有懂的話,可以用萬用回答來回應牠,”可以把資料先放到S3我們再研究看看怎麼用lambda來處裡”,一直到若干年後,我才發現這句話真的是真理。下面我們就來小小的歸類一下lambda常見的應用。

[本文同步Post在www.p0n2.net中](https://www.p0n2.net/2020/04/lambda.html)

### 1. Automation

對於SRE或是DevOps來說,最常用lambda來處

元記事を表示

CloudWatch Logsのフィルターで複雑な検索条件を指定して欲しいイベントだけ取得する

下図のような流れでアプリケーションログをSlackへ通知する仕組みを構築しています。
![app_err_log-slack_cloudwatch.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269716/02f49cba-6e5d-c5a6-b39e-56e64e71eeec.jpeg)

この仕組み上で通知するログの種類をフィルタリングする場合はLambdaトリガー設定時のフィルタかLambda関数内になるかと思います。
しかし、不必要な通知をLambda関数内でフィルタリング処理を行う場合、Lambda関数自体を動作させる必要がある為、料金が多く発生してしまいます。
これを避ける為、Lambdaトリガー(やCloudWatch Logs メトリクスフィルター)のフィルターパターンを駆使してフィルタリングを行う方法を記します。

# フィルターとパターンの構文について
フィルターは以下3種類に分類できます。※公式名称ではありません。
本稿では「テキストベースフィルター」及び「スペース区切りフィルタ

元記事を表示

AWS LambdaをAWS CLIで呼び出し、S3にファイルを格納する

## :libra: AWS Lambdaとは

**AWS Lambda**(エーダブルエス・ラムダ)は、**サーバレス・システム**の一つで、何らかのプログラムなどによる処理を行う際に、実行環境となるサーバを用意することなくそのプログラムを実行する環境を提供する新しい技術です。
特に、バッチ処理やオフライン処理を実行するのに適しています。

また、AWS Lambdaの実行基盤となるインフラ面(サーバリソースなど)はAWSが管理しているために、この部分についてのメンテナンス作業は不要で、利用側としては実行対象となるソースのみに集中すれば良く、コスト面・運用面でもメリットがあります。

本記事執筆時点で実行できるプログラムとして、Java、Go、PowerShell、Node.js、C#、Python、Rubyがあります。
ただし、処理の実行可能時間には上限があり、最大15分となっています(2020年8月現在)。

## :libra: この記事の目的

本記事では、AWS Lambdaを実行するためのAWSの環境設定と実行方法を確認したいと思います。
実行するプログラムとして、P

元記事を表示

AWS LambdaのqueryStringParametersとmultiValueQueryStringParametersの違いについて

##環境
Python3.7
プロキシ統合あり

##queryStringParametersを使う
API GatewayからLambdaに渡されたペイロードからパラメータを取得できます。

リクエスト
https://XXXX/XXXX/XXXX?id=1&value=foo

“`python

response = event.get(‘queryStringParameters’)

return {
‘statusCode’: 200,
‘body’: json.dumps(response)
}
“`

結果

“`json
{
“id”: “1”
“value”: “foo”
}
“`

パラメータ名で値を取得できます。

リクエスト
https://XXXX/XXXX/XXXX?id=1&value=foo

“`python

response = event.get(‘queryStringParameters’).get(‘value’)

return {
‘statusCode’: 200,

元記事を表示

AWS AppSync(GraphQL)のバックエンドにAWS Lambda(serverless framework) x Golangを使ってみる

AppSync(GraphQL)でバックエンド側でこちょこちょ計算する必要のある機能が必要になり、Lambda(serverless framework)をGolangで書いてみたのでメモ

*serverless frameworkを使うので、前提として[serverless AWS – Credentials](https://www.serverless.com/framework/docs/providers/aws/guide/credentials/)の設定をしている必要がある。

## 導入
Lambdaは[serverless framework](https://www.serverless.com/)を使って管理したいので、以下の手順でGolangのLambdaの雛形を作る。

*`serverless`コマンドは`sls`と省略できる

“`bash
# serverlessフレームワークをインストール
$ npm install serverless -g

# テンプレートを使ってLambdaの雛形を作る
$ serverless create -u htt

元記事を表示

登山の新しいお供?やまみちあんしんボタン。

#概要
SORACOM Button を使って山登りがちょっと安全になる?デバイスつくりました。

###機能
– ボタンを押した位置を地図上に表示する
– 緊急時に特的の連絡先にメッセージを送る

###言い訳
今回は SORACOM Button のメリットを生かすため、極力スマホに頼らない構成にしました。

と、言うのは半分言い訳で正直なとこ今回の機能はスマホのアプリで出来ちゃいます…
( [YAMAP](https://yamap.com/) さんめっちゃ便利だからみんなも使おう!僕もいつもお世話になってます!)

でもスマホってバッテリーの持ちが悪かったり、モバイルバッテリーは重たかったりしますよね?

SORACOM Button なら…

**電池式だから予備電源の確保は簡単!**
**持ち運びも便利な軽量設計!**

なんて山登りに最適なんだ!
と言うことで、宜しくお願いします。

#インデックス
– [なぜ SORACOM LTE-M Button なのか](#なぜ-soracom-lte-m-button-なのか)
– [構成](#構成)
– [今回の詰まり

元記事を表示

AWSの請求を日次でLambda for RubyでSlackに通知する

先行事例をググると Python の例が多かったので、[Ruby][doc] で手でポチポチやったときの最低限の設定メモ。

# 1. AWS Lambda をランタイム Ruby で作成

WebのLambdaコンソール画面からボタンポチポチで作成

– ランタイムを `Ruby 2.7` で
– 実行ロールに `ce:GetCostAndUsage` 付与
– [Cost Explorer の権限は root で有効にすると出てくる][ce_auth]はず

# 2. Rubyで取得処理を書く

“`ruby:lambda_functions.rb
require ‘aws-sdk’
require ‘net/http’
require ‘uri’
require ‘json’

# Lambdaのエントリーポイント
def lambda_handler(event:, context:)
fetch_cost
.then { |response| pretty_response(response) }
.then { |message| notif

元記事を表示

初体験したときのことをお話します

どうも、こんにちは。お元気ですか?
コロナ禍(コロ中?)ではいかかお過ごしでしょうか?
体調など崩しておりませんでしょうか?

わたしは以前、こんなこと↓を書いていました。
**[試験に出るAWS:SAAでしょう 第6夜](https://qiita.com/han-aru/items/652dd12c92c1b8f69ac0)**
あれから早、3ヶ月が過ぎようとしております。
あれから更新しておりませんし、いまだ試験も受けておりません!

が、勉強は続けており、もうすぐ終わりますので
近々試験を受けようと思っております。多分!

さて、今回は有識者の方々のを見たり、聞いたりして、教わりながら
色々と新しいことを体験しながら覚えていったので
それらの知見? 感想? をここに残しておきたいと思います。

## 準備として、すでに行っていたところ

– [AWS CLIをインストール](https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/install-cliv2-mac.html)した
– [Serverless Framewor

元記事を表示

【AWS・Lambda】Lambdaから別リージョンのサービスを使用するための設定

# はじめに

Labmda関数から別のAWSサービスを使用したい…
でも、現在リージョンと別リージョンのサービスを使いたい!

そんな時に使用する設定をご紹介します。

Pinpointなど、まだ東京リージョンで使用できないサービスを使う時にも役立ちます。

# 方法

以下はNodeの例です。

“`javascript
const AWS = require(‘aws-sdk’);
// 以下を追加
AWS.config.update({ region:’us-west-2′ });
“`

# まとめ

`AWS.config.update`することで、リージョンを切り替えできます。

元記事を表示

【Lambda】import requests が使えるようにする【python】

# やること
↓これを実行したら
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185989/7689356e-1f61-9b71-1fcd-0d8aca43f25c.png)

↓こうなってほしい
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185989/15a381c6-b741-152a-d16b-f11e20bf0430.png)

↓しかし、こうなってしまう
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185989/7d209b66-33d7-41b4-e024-3c81cbd9f7da.png)

“`json
{
“errorMessage”: “Unable to import module ‘lambda_function’: No module named ‘r

元記事を表示

AWS API Gateway がリクエストヘッダーを小文字にしてしまう時の解決策 (golang)

ここ最近業務で API Gateway + Lambda を使った開発を行っており、API Gateway の振る舞いで注意しなければならない点を見つけたので、解決方法も添えて記事にしたいと思います。開発言語は Go言語です

## AWS API Gateway がリクエストヘッダーを小文字にしてしまう

– 今回使用するサンプルプログラムです

“`go
package main

import (
“errors”
“fmt”
“log”

“github.com/aws/aws-lambda-go/events”
“github.com/aws/aws-lambda-go/lambda”
“github.com/aws/aws-lambda-go/lambdacontext”
)

type (
request = events.APIGatewayProxyRequest
response = events.APIGatewayProxyResponse
)

// handler handles AWS Lambda execution.
func h

元記事を表示

[AWS] Lambda関数のユニットテストをローカル環境で実行してみよう

# 前提
今回は、以下のような前提で検証してみたいと思います。

– SAM
– Lambda
– Python3.8
– pytest
– moto(モック)
– DynamoDB

なお、SAMを使用すると、Dockerん環境を使って擬似的にローカル環境にDynamoDBなどを構築することができますが、今回は、ユニットテスト(将来的な自動テスト)を見据えてのテストについて検証してみたいと思います。

# プロジェクト作成
では、まず最初にプロジェクトを作成します。
もし、SAMでのプロジェクト作成がよくわからない方は、事前に

– [[AWS] Serverless Application Model (SAM) の基本まとめ](https://qiita.com/herohit-tool/items/420f4a7b294cfcf56ed7)
– [[AWS] Serverless Application Model (SAM) でAPI Gateway + Lambda + DynamoDBなサンプルを作成してみる](https://qiita.com/herohit-tool

元記事を表示

AWS LambdaにてPython3でS3でファイルが追加されたイベントを取得し、実行する。

# 概要
調べたので備忘録

# 手順

1. Lambda上部のデザイナーから「トリガーを追加」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89227/2e3c8db7-3228-1ecc-63e0-c28b5a6c5e88.png)

2. S3を選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89227/ed6ae4b7-03d2-8fb8-0038-f5d64c409b9f.png)

3. 対象バケットを選択、「全てのオブジェクト作成イベント」を選びます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89227/02db54d1-ac97-33c9-5cb0-d2a6441aa4db.png)

※必要あればプレフィックスなどは自由に設定してください。

元記事を表示

Amazon Sagemakerで作成したモデルによる推論処理をREST APIとして公開する

#やったこと
SageMakerで作成したモデルを使った推論処理をREST APIとして公開してみた。

#構成
API Gatewayで公開されるAPIにアクセスし、Lambdaを実行。LambdaからSageMakerで作成したModelをエンドポントから呼び出し、推論処理を実施、リクエスト側に結果を返す、という感じ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187747/a5ab192f-be98-4b22-cfe6-43a9c3371cf0.png)

#構築手順
1. SageMakerで学習モデルを作成
2. モデルをデプロイ&エンドポント作成
3. LambdaからSageMakerのエンドポイントを呼び出すためのロールを作成する
4. Lambda関数実装
5. Amazon API Gateway設定
6. CurlでREST APIの動作確認

1,2だけでかなりの量になるので別で執筆中。
以下、3以降について記載。

## 3. LambdaからSageMak

元記事を表示

ECSのデプロイ中の正常性確認を自動化するAppspecのHooks設定

# はじめに
デプロイに失敗した際に自動でロールバックできるというのは重要だ。
ECSのCodeDeployによるデプロイでは、End-to-Endの正常性確認を自動化することができる。
今回はチュートリアルとほぼ同じ内容ではあるが、AppspecのHooks設定による正常性確認のやり方を整理する。

# 前提条件
少なくとも以下のことを理解していた方が飲み込みが早いはずである。

– ECS+Fargateのデプロイパイプラインを自分で作ったことがある

※デプロイパイプラインのサンプルは[以前の記事](https://qiita.com/neruneruo/items/d5e58b4013debdf9ebbe)で書いているので参考までに。

# やること
パイプラインの整理までできているのであれば、それほど大変ではない。
以下の作業をやればよい。

– Appspecの編集
– IAMポリシーの点検
– 正常性確認用Lambda関数の作成

## Appspecの編集
Appspecでは、CodeDeployの各ライフサイクルイベントをフックしてLambda関数をコールすることがで

元記事を表示

RDSをlambdaで定期的に停止を開始を行う

# はじめに

勉強も兼ね個人開発しているアプリをawsで公開しているのですが、AWSのEC2とRDSの料金が結構高い。
特にRDSは最低スペックでも確か2000円くらいかかってしまう。

とりあえず料金下げるため開発を行わない平日の昼間はRDSを停止する様にして、ちょっとでも節約したかったのでlambdaで自動的に
平日の昼間は停止する様にしました。

lambdaの言語に関してはRubyを使いました。

# lambdaの作成

まずlambdaを作成します

![スクリーンショット 2020-08-22 19.05.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/207921/6d01c1d7-20f6-4f09-7fb1-012dc3eb79eb.png)

作成したらlambdaの詳細の画面から

アクセス権限を表示して、実行ロールのロール名の部分をクリックします。

そしてポリシーのアタッチからRDSの権限を付与します。

権限に関しては調べるの面倒だったので自分はRDSのFullAcc

元記事を表示

OTHERカテゴリの最新記事