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

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

AWSサーバーレス連絡フォームの作り方?(AWS Lambda、API Gateway、SES)

AWS S3にサイトを安くて簡単にホスティングできますが、S3は静的なサイトしかホスティングできないですので、従来ならバックエンド処理が必要となるフォーム送信の実装などは難しそうですね。しかし、クラウド時代ではそんな心配はありません!ソリューションはサーバーレスアーキテクチャです!AWSはすでに色々なサーバーレス構築のツールを提供しています。

今回はユーザからお問い合わせやフィードバックを送信するたびに、任意な宛先に通知メールを送信するシンプルなサーバーレスメールサービスを一緒に作ります。AWS LambdaとAPI Gatewayを利用し、簡単なAWSサーバーレス構築を紹介します。

構成図はこんな感じです。
![diagram.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/665134/fe6fb6dc-e62e-4eaa-0a50-776a74b19ac4.png)

処理の流れとしては、ユーザーから連絡フォームより入力した情報を収集し、クライアント側のブラウザからAmazon API Gat

元記事を表示

EFSにセットアップしたPythonライブラリをLambdaにimportする方法

# はじめに

**Lambda**に**EFS**をマウントできるようになりました。これによりEFSにセットアップしたPythonのライブラリをLambdaにimportできるようになりました。

これまでは、LambdaにPython標準以外のライブラリをimportしたい場合は、Lambda layer に固めてアップロードする方法しかありませんでした。しかし、この方法には `圧縮して50MB以下、解凍後250MB以下というサイズの制限`があります。このため、サイズの大きいライブラリを複数使うといったことができませんでした。そのため、少し規模が大きいシステムだと、一部処理をdockerに外出しするなどの対応が必要となり、Lambdaだけでは完結しませんでした。

しかし、LambdaにEFSをマウントできるようになったため、この問題が解消します。`EFSにインストールしたライブラリをLambdaにimportできるようになりました。`

# how to

## 概要

1. EFS作成
2. EFSアクセスポイントを作成
3. EFSを作業用にEC2にマウント
4.

元記事を表示

【AWS-CDK】認証付きWebAPIをSolutions Constructsを使って手軽に構築

## Solutions ConstructsでAWSインフラ構築
先日、[AWS Solutions Constructs](https://aws.amazon.com/jp/blogs/news/aws-solutions-constructs-a-library-of-architecture-patterns-for-the-aws-cdk/)が発表されました。これはAWS-CDKにおいて、抽象化されたリソースを表す`Constructs`のよく使う組み合わせをWell-Architected準拠の設定込みで一発で構築できるライブラリです。例えば`Lambda + DynamoDB`や`CloudFront + S3`などの組み合わせのパターンが25個(2020/7月現在)提供されています。

+ https://docs.aws.amazon.com/solutions/latest/constructs/api-reference.html

これをつかってパパっとAWS上にWebAPIを構築したいと思います。

## 注意
2020/7/6現在、Solutions

元記事を表示

Lambda@EdgeでレスポンスにHTTPヘッダを付与するやつをGitHub Actionsで自動デプロイする

# 概要

– フロントにNuxt.jsを採用していると、`npm run start`するだけだと`X-Frame-Options`とか`CSP`とか`x-xss-protection`といったヘッダがレスポンスに付与されない
– `Fastify`をNodeサーバーとして使っているのでそちらで頑張ってもよかったけど、せっかくAWSで`CloudFront`->`ALB`->`Fargate`な仕組みを使っているので、AWSで頑張ってみようと思った
– Lambda@Edgeを使って、Nuxtからのレスポンスにヘッダを付与するやつを組んだ
– アプリケーションと連動して動いたほうがいいし、手動でデプロイする運用がしんどいと思ったので、GitHub ActionsでCLIベースの自動デプロイが組めるところまで持ってきた
– それをやるがためにCloudFormationまで導入しててんやわんやした

日本語文献がそんなになかったので、まとまりがないメモですが貼っておきます。

# Lambda@Edgeのソース内容

下記ブログを参考にしました。CSPだけ模倣するわけにいかなかったので

元記事を表示

AWSハンズオン実践メモ 〜サーバーレスアーキテクチャで翻訳 Web API を構築する〜

# はじめに
AWS公式の[ハンズオンシリーズ](https://aws.amazon.com/jp/aws-jp-introduction/aws-jp-webinar-hands-on/?trk=aws_blog)の中から、翻訳 Web API の構築を通して、サーバーレスアーキテクチャの基本を学ぶ[ハンズオン](https://pages.awscloud.com/event_JAPAN_Hands-on-for-Beginners-Serverless-2019_LP.html?trk=aws_introduction_page)を実施しました。

本記事は自身のハンズオン学習メモとして投稿します。
# 目次
– [ハンズオンの目的](#ハンズオンの目的)
– [本編](#本編)
– [おわりに](#おわりに)

# ハンズオンの目的

– AWS Lambda, Amazon API Gateway, Amazon DynamoDB の基本を学ぶ
– 上記のサービスを組み合わせて、サーバーレスな Web API を作成する

>翻訳 Web API の構築を通して、サーバーレ

元記事を表示

SAM CLI の Docker内(–use-container) ビルドをProxy環境下で実施する方法

2017年頃からサーバレスに浸っている、小西啓介です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/40049/f960c804-b36c-2893-1ae5-eed795f20606.png)

# SAMでは、Lambdaに近い環境でビルドできる

SAM(Serverless Application Model) CLI のビルドコマンド(`sam build`)には、
Lambda用の `npm` や `pip` などで、アーキテクチャ(WindowsかLinux等)に依存するモジュールが有る場合に対応する
オプション (`–use-container`)がある。

このオプションを使用すると、通常、実行環境(windows等)で行うビルド処理を、Lambda(Amazon Linux) に近い
Docker環境内で行うようなるため、コンパイルを伴うようなモジュールでも問題なく、Lambda用のリソースを作成することが可能となる。

# Proxyの憂鬱

ここにも、

元記事を表示

Laravelのマイグレーションで「Application In Production!」が表示されたときの対処法

# はじめに
本番環境でマイグレーションを実行したら、以下のメッセージが表示されて、マイグレーションが実行されなかった。

“`
**************************************
* Application In Production! *
**************************************
“`

# 環境
“`
$ php artisan -V
Laravel Framework 5.8.29
“`

# メッセージが表示された理由
productionでマイグレーションを実行する場合、以下のメソッドで環境のチェックが行われ、productionの場合はメッセージが表示されます、

“`/vendor/laravel/framework/src/Illuminate/Console/ConfirmableTrait.php

元記事を表示

.NET Core アプリを AWS Lambda で動かす

# 本投稿について

この投稿では、以下の方法について説明しています。

1. .NET Core で AWS Lambda 関数を開発する方法
2. Lambda 関数として動かすことができる ASP.NET アプリの開発方法
3. 既存の ASP.NET Core アプリを Lambda 関数として動かす方法

(※ 本記事は、2020/06/22時点での最新の.NET Core バージョンや各種ツールを使用することを想定に書いています)

# 1. .NET Core の Lambda 関数を作成する

ここでは .NET Core で Lambda 関数を開発する方法について説明します。

## プロジェクトテンプレートをインストールする

まず、以下のコマンドで[Amazon.Lambda.Templatesパッケージ](https://www.nuget.org/packages/Amazon.Lambda.Templates)をインストールしてプロジェクトテンプレートを追加します。

“`
dotnet new -i Amazon.Lambda.Templates

元記事を表示

LambdaをCanaryリリースするSAMテンプレートに自動ロールバックを組み込む

# はじめに
LambdaのCanaryリリースは非常に便利。自動でトラフィックコントロールをして様子を見ることができる。
しかし、クラウドネイティブなリリースの完成は、万が一の状況を検知した場合は自動でロールバックすることだ。
今回は、過去に作ったSAMテンプレートに自動ロールバックを組み込んで実際の動作を確認する。

# 前提条件
– SAMテンプレートでCanaryリリースの設定を書いたことがあり、ある程度内容を理解している。特に、“`AutoPublishAlias“`と“`DeploymentPreference“`の概要と、“`LambdaPermission“`を設定しなければいけない理由が分かっているのが望ましい ⇒ [過去の記事](https://qiita.com/neruneruo/items/73906cdc3c2aa699644f)でも紹介してるよ!
– CloudWatchアラームをなんとなく分かっている

# SAMテンプレートを書く前に
ロールバックの設定は、SAMテンプレートの“`AWS::Serverless::Function“`リ

元記事を表示

X-RayのSAMとLambda内への組み込みとjestでのモック化

2017年頃からサーバレスに浸っている、TISの小西啓介です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/40049/a3cf8470-1e9b-e715-9505-7a6f5a123e3c.png)

# 概要

SAM(Serverless Application Model)を使ったnode.jsのLambdaプログラム等に対して、
パフォーマンス計測等を行いX-Ray機能の組み込みについて説明します。

また、X-Ray機能を組み込むと、aws-sdk-mockを使用したユニットテストでは
通らなくなるので、aws-xray-sdkのモック化についても説明します。

# SAMへのX-Rayの追加

API Gateway – Lambda – DynamoDBのような構成だとして、
SAM(Serverless Application Model)へのX-Rayの組み込みは、
以下のように、SAMのテンプレーレートのGlobalセクションの
`Function` に対して

元記事を表示

AWS LambdaからRDSへの接続はアンチパターン?Lambdaのコールドスタートとは?対策とは?

# VPC LambdaからRDSの呼び出しはアンチパターンだったらしい
Lambdaを起動すると、VPCLambdaで起動する。
VPCLambdaは以下の点で、アンチパターンと言われていた
– 特定の状態において、遅延が発生(ENI作成に伴うコールドスタート)
– Lambdaの同時実行によりVPC内のプライベートIPを消費するため、アドレス管理が必要。
– RDSの最大同時接続数以上に、Lambdaが起動した場合は、接続エラー。

だが最近
[Hyperplane ENI](https://aws.amazon.com/jp/blogs/news/announcing-improved-vpc-networking-for-aws-lambda-functions/)
[RDS Proxy](https://aws.amazon.com/jp/rds/proxy/)
のアップデートがあり、解消されつつある。

# Lambdaコールドスタートとは?
Lambdaには、コールドスタートという概念が存在する。
コールドスタートとは、Lambdaの初回実行次に内部的に以下の処理が行

元記事を表示

Golangはじめて物語(APIGateway+Lambdaといっしょ編)

# はじめに
Lambda関数を色々触っていると、Javaの限界を感じることが多い(別にJavaをdisるわけではなく、Lambdaとの親和性と言う意味ではイマイチだと主張したい)。

手軽さで言えばPythonは間違いなく最強の一角だと言えるが、importが増えると結局処理が重くなるという話があり、Golangを勧められる機会が増えてきたので、ここらで一丁、覚えてみようと思った。

# 統合開発環境は何が良いか?
色々と試してみたわけではないが、Eclipseは重いし、Golang拡張はJDKのバージョン縛りがあって面倒だったので、VSCode+Remote Development Extension Pack+EC2にしてみたら非常に快適だった。ローカル環境がWindowsで動かせるモノの制約が面倒だというのもあるので、この構成はオススメ。
Go言語だけ触るなら別に何の環境でも良いのだけど、SAMなりServerless Frameworkなりcurlなりを並行で触ることを考えると、EC2を直接触れるというのは生産性に大きく貢献してくれる。

Remote Development

元記事を表示

AWS Lambda 待望の RDS Proxy を CloudFormation で作ってみる

2020/06/30、RDS Proxy がプレビューを終了し、ついに GA (正式リリース) となったことが[発表](https://aws.amazon.com/jp/blogs/aws/amazon-rds-proxy-now-generally-available/)されました。

これまでアンチパターンと言われていた、AWS Lambda と RDS との接続について解決策のひとつとなることから、サーバーレス界隈では待望の機能であったと思います。

この記事では、CloudFormation でこの RDS Proxy を作ってみたいと思います。が、その前に、RDS Proxy について少し振り返ってみたいと思います。

# RDS Proxy は AWS Lambda にとって何が嬉しいのか

AWS Lambda はいわゆるサーバーレスのサービスです。そのため、常在的に起動しているリソースは基本的にありません。なんらかのイベントが発生したことを契機に、Lambda 上で実装したアプリケーションを動作させるためのリソースがスピンアップするので、例えば HTTP 要求が着信し

元記事を表示

【Python】Lambdaで定期的にCloudWatch LogsからS3へエクスポートする

[【AWS】CloudFormationでS3バケット作成とライフサイクルルールを設定する](https://qiita.com/homines22/items/e28e8ec51ca562effc6e) で作成したS3にCloudWatch Logsに保存しているログを定期的にエクスポートするLambdaをPythonで開発したお話です。

簡単に試せるようにGitHubリポジトリを作成しておきました -> [homoluctus/lambda-cwlogs-s3](https://github.com/homoluctus/lambda-cwlogs-s3)

# 要件

– 毎日JST14:00に前日のログをエクスポート
– 複数のロググループをエクスポート可能

# 開発

## 言語

– Python3.8

## 開発ライブラリ

– isort
– mypy
– flake8
– autopep8

## 本番ライブラリ

– boto3
– boto3-stubs (type annotation用)

## デプロイメントツール

– Serverless Fram

元記事を表示

Private subnet内でNAT gatewayを介さずにlambdaから別のlambdaを呼び出す

###はじめに
 だいぶ特定領域の話になりますがとあるプロダクト開発にあたってちょっとした知見を得たので後学のために残しておきます。

###構成
 まずは今回の構成を一部分だけピックアップしたものが以下のものになります。
![qiita.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/53020/b3bb5d94-27c4-a3d5-75a7-3e672c810782.png)
 要件としては、プライベートサブネット内で動いているサービス(今回であればECS上で動かしています)からマイクロサービスとして切り出した同じくプライベートサブネット内のlambdaを呼び出し(invoke)、さらにそのlambdaから別のlambdaを呼び出す。
ただし、lambdaからVPC内のリソースにアクセスするためにlambdaをVPC内に置く必要があると言った具合です。
 この場合同じVPC内なため、セキュリティグループを適切に設定すればECSからlambdaを呼び出すことはうまくいきますが、lambdaから別のlam

元記事を表示

CodeCommitにcommit/pushしたらLambda経由でSlackにcommentつき通知を飛ばす

AWS CodeCommit上で管理しているリポジトリに、誰かがcommit/pushしたらSlackで通知を受け取りたいと思って試行錯誤したときのメモになります。Lamda関数はNode.jsで記述しています。

# スクリーンショット

screenshot.jpg

※ アイコンとCodeCommitの太字はSlack Incomming Webhookのカスタマイズで変更しています。

# 前置き

* CodeCommitやLamda、Slackの細かい話は書きません。
* Lamda関数のNode.jsのサンプルコードや注意点だけを書きます。
* 以下はすべてAWS Console上からの操作です。

# 処理の流れ

CodeCommit → トリガー → Lambda → Slack Inco

元記事を表示

サーバレスアーキテクチャにおけるアクセス制御について

# はじめに

Webサービスには、認証・認可が必要な場合が多く、それをアプリで実現しようとすると手間が掛かります。
サーバレスアーキテクチャでは、認証・認可をAWSのサービスをうまく使って実装することで、開発にかかる期間を短縮できます。
また、IDやパスワード忘れなどのよくある問い合わせにも、一切コードを書かずに対応できる仕組みがあります。

# 認証と認可

混同しがちなのですが、認証と認可を改めて確認してください。

よくわかる認証と認可
https://dev.classmethod.jp/articles/authentication-and-authorization/

## 認証

通信の相手が誰(何)であるかを確認すること。

## 認可

とある特定の条件に対して、リソースアクセスの権限を与えること。

# AWSサービスそれぞれの役割

API Gateway、Cognito、Lambdaの3つの役割を記載します。

– API Gatewayは、アプリケーションがバックエンドサービスからのデータ、ビジネスロジック、機能にアクセスするための「フロントドア」とし

元記事を表示

S3に保存されたMP3ファイルをLambdaでGoogle Cloud Speech-to-Textを使って文字起こしする

# S3に保存されたMP3ファイルをLambdaでGoogle Cloud Speech-to-Textを使って文字起こしする

## はじめに
前回の[S3に保存されたwavファイルをLambdaでGoogle Cloud Speech-to-Textを使って文字起こしする](https://qiita.com/haruhiko28/items/55cc892eb2c41f8f12cf)に引き続き、
今回はMP3ファイルを対象に、S3に保存されたMP3ファイルをLambdaでGoogle Cloud Speech-to-Textを使って文字起こしする手順をまとめます。

重複する点が非常に多いので、相違点になるコードの部分だけ([前回](https://qiita.com/haruhiko28/items/55cc892eb2c41f8f12cf)でいう5-9のみ)ご紹介します。

## Code
実行するコードは以下になります。

“`javascript
const AWS = require(‘aws-sdk’);
const speech = require(‘@googl

元記事を表示

AWSでRESTで送信したものをWebSocketでリアルタイムに受け取るサーバレスシステム

#はじめに
オンラインイベントで応援ボタンなど押した時に、現地で一方向の情報として受信し、それをトリガーにエフェクトなど表示したいことがあります。
方法としてはSocket通信や、MQTTなどを利用したり、ngrokなどのローカル環境をネット上で受けれるようにするサービスを使うなどあります。
ただ、クライアントが数百人など多数の環境になるとソケットを大量に張る必要がある、サービスの上限制限や毎回URLが変わるなど運用が面倒なことなどが考えられます。
今回はそれらを回避しつつ、サーバレス環境でコストも少なくしたシステムを作ってみます。

#全体構成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58795/13a3d737-ea38-411f-c338-5e2f3abfc591.png)

送信する方はRESTで送ることで接続数に依存せずコストを下げることが可能です。
特にいつ押されるかわからないため、無駄にSocketなどを張って時間課金のコストを増やすということをしないようにします。

元記事を表示

DynamoDB Streamを用いて、日付のパラメータを与えながらLambdaを繰り返し呼び出す

## はじめに
パラメータを変えながらLambdaを繰り返し実行したくてDynamoDB Streamを使いました。参考までにと思い投稿してみました。

この記事ではAWS LambdaからDynamoDBに日付などの数字を書き込んだのち、DynamoDB Streamを用いて同じLambda関数を呼び出し、書き込んだ日付について処理を行う実装をします。
ランタイムはPython3.8を選択しています。
Lambdaの設定で「ハンドラ」は「lambda_function.lambda_handler」であるものとし、
LambdaのロールにはDynamoDBFullAccess権限が付与されています。

### この方法を使ってよかったこと

自分の場合はS3でyyyymmddフォルダに入ったファイルを処理する必要に迫られましたが、
Lambdaの性質上+自分の技能上の都合で、「どのファイルを処理するか/したか」をどこかに持たないと再実行は実装できませんでした。が、大量のファイル名をリクエストに手書きする訳にもいかず・・・

そんな悩みをここに書いてある方法で解決することが出来ました。

元記事を表示

OTHERカテゴリの最新記事