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

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

AWS Lambdaをコマンドラインから実行してログを標準出力する

## 概要
CDKでdeployしたLambdaをローカルPCからAWS CLI(version 2)でコマンドラインから実行して結果ログを確認することがあり、これまでは

* AWS CLIでLambdaをInvoke
* AWS CLIでCloudWatch Logsの直近実行ログを出力

をおこなっていた。

この方法だとログ出力までに若干タイムラグがあるのと、CloudWatchのログはLambda名で検索するため実行したLambdaの結果ログが一意に定まらないのが若干気になっていた。

単純に知らなかっただけではあるのだが、ドキュメントを見たらコマンドラインから実行してそのまま結果ログを標準出力することが可能だったので、やり方とコマンドをまとめておく。

## やり方
* `–log-type Tail` を指定
* 中身の `LogResult` をデコードして出力

参考:https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/gettingstarted-awscli.html

## コマンド
### 実行してログを標準

元記事を表示

Serverless Frameworkで複数のLambdaを管理する

## やったこと
– Serverless Framework を使って、API Gateway + LambdaでAPIを作りました。
– 一つのAPI Gatewayでリソースが違うpathに対してLambdaを振り分けるようにした。
`https://hoge/v1/fun1` にリクエストがきたら Lambda1 をinvokeして
`https://hoge/v1/fun2` にリクエストがきたら Lambda2 をinvokeする
みたいな感じです。

## Serverless Framework
https://www.serverless.com/open-source/
> Serverless Framework Open Source lets you develop and deploy serverless applications to AWS, Azure, GCP & more. Use it with Pro for full serverless application lifecycle management.

Serverle

元記事を表示

SAMとCodePipelineでサーバーレスのCI/CDを構築する

AWSのSAMとCodePipelineを使用して、サーバーレス環境でのCI/CDを構築していきます。CodePipelineはCloudFormationは使用せずマネジメントコンソールから作成していきます。
###全体像
以下のような構成でパイプラインを構築していきます。
![sam_black_belt.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1051954/ee18d1a5-fa45-9377-65ab-ebb6fee4853c.jpeg)
出典:[Amazon Web Services ブログ](https://aws.amazon.com/jp/blogs/news/webinar-bb-aws-serverless-application-model-2019/)

###構築手順
####前提
– SAMで必要なコードはgitにプッシュ済み(template.ymlとLambdaのソースコード)
– CloudFormationによるスタックは新規作成済み

上記を前提とし、tem

元記事を表示

AWS S3バケットの指定フォルダ直下のフォルダとファイルをLambdaで取得する

Amazon Web ServiceのS3バケットの指定フォルダ直下のフォルダとファイル一覧を取得するLambda関数を作ってみました。

##サンプルコード
まずはコードから。Pythonです。

“`Python:ListFoldersAndFiles.py
import json
import boto3

def lambda_handler(event, context):
S3Bucket = “{your-bucket-name}”
S3KeyPrefix = “”
dirDepth = 1

folders = []
files = []
result = “”

# Get requesting path from query string and normalize it.
try:
path = event[‘queryStringParameters’][‘path’]
if path is not None:
S3KeyPr

元記事を表示

【AWS】VPC Lambdaを構築したときのメモ

普段、インフラを構築する機会が滅多にないけど、最近VPC Lambdaを構築する機会があったので、色々学んだ事をメモしておく。

**やりたかったこと**

– Lambdaからピアリングで他のVPCにあるAPIとの接続
– Lambdaからインターネット経由で外部APIとの接続

**本記事の内容**

– Lambdaを置くPrivateサブネットのCIDR設計
– Privateサブネットからの疎通確認
– SessionManager越しのSSHアクセス

# 背景
今までLambdaをVPC内に置く必要はなかったが、LambdaからVPCピアリングでAPIにリクエストする必要が出たのでLambdaをVPCのサブネットに含む構成に変えることになった。

ネットワーク構成は以下の図の通り。
Lambdaからインターネット経由で外のAPIにアクセスする必要もあるためPublicサブネット内にNATインスタンスを用意している。
![aws-new2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26

元記事を表示

LINEBotに送った画像をGoogleDriveに保存して共有URLを返すまで

##はじめに
GoogleDriveAPIを触っていたので、LINEBotに送信した画像を代わりにアップロードし、共有URLを返して欲しくなったので実装してみました。

##どうなりたいか

元記事を表示

Lambda(Python)でDynamo DBに接続しようとした際に”Unable to marshal response: Object of type SSLError is not JSON serializable”が出た件について

下記の記事を参考にして、Amplifyプロジェクト内にDynamo DBに接続するLambda関数を実装していたところ、タイトルにあるエラーが出ました。

[AWS API GatewayとLambdaでDynamoDB操作](https://business.ntt-east.co.jp/content/cloudsolution/column-try-20.html#section-03)

この記事では、その対処方法を備忘録代わりに記載します。

# 環境

– Windows10 20H2
– WSL2 – Ubuntu-20.04
– Amplify CLI 4.41.0
– Python 3.8.5
– pipenv 2020.11.15

# 症状
冒頭の記事を参考にして、一部を書き換えながら試していたとき、タイムアウトのエラーが起こりました。

“`
START RequestId: 04359089-637f-48f3-aa2b-e7649c53e4d1 Version: $LATEST
{‘OperationType’: ‘SCAN’}
END RequestI

元記事を表示

AWS LambdaのDocker Container ImageをPerlでやっていく

結構引っかかったのでメモ。

# Lambda用のPerl Container
コンテナ自体はshogoさんが動くものを置いていただいているのでそれをベースイメージとすればよい。感謝感謝。
自分で作る手順も書いてあるのでこんどやる。

https://shogo82148.github.io/blog/2021/01/02/perl-runtime-supports-docker-format/

手順としては、まず 上記のコンテナをFROMとして `Dockerfile` をつくりECRにビルドしてpush、そしてビルドしたECRのイメージをLambdaで使うという設定をすればよい。

# 実際にやってみる
だいたいコピペ。
ECRとかLambdaのIAMとかは適宜作ってください。

以下の `Dockerfile` を用意。

“`dockerfile

FROM public.ecr.aws/w2s0h5h2/p5-aws-lambda:base-5.32-paws.al2
COPY handler.pl /var/task/
CMD [ “handler.handle” ]

元記事を表示

【APIGateway・Lambda】AxiosでAPIを叩いた時にCORS設定でハマった

ReactからAxiosでLambdaで作ったAPIへリクエストした時に、CORSの設定でハマったのでメモしておきます。

## 症状
`curl`ではレスポンスがAPIから帰ってくるが、`Axios`でReact側からリクエストをすると、下記のエラーメッセージが返ってくる。

`Response to preflight request doesn’t pass access control check: No ‘Access-Control-Allow-Origin’ header is present on the requested resource.`

## 原因
API GatewayでCORSが有効化されていない。
Lambda関数が必要なヘッダー情報を返していない。

## CORS(Cross-origin resource sharing) とは?

– ブラウザのセキュリティ機能。
– ブラウザからのHTTPリクエストを制限する。

ざっくりいうとこのセキュリティ機能のせいで、ReactからLambdaのAPIを叩けない。
具体的に言うと、プレフライトリクエス

元記事を表示

Alexa SmartHomeSkillの開発 公式チュートリアルに加え、アカウントリンクの実装、ModeControllerの追加

# はじめに
AlexaのSmartHomeSkillは、照明や扇風機などの家電を、Alexaを使って操作するための機能です。PowerOnOffやModeControllerなどのあらかじめ決められたインターフェイスがあり、それらを利用して機能を組み立てていきます。
SmartHomeSkillでは、音声認識から意図解釈まではAmazon側でビルドされたモデルによって実行するため、開発者が意図解釈のために対話エージェントを訓練する必要はありません。
CustomSkillでは、意図解釈は、開発者が、Dialogflowのようなエージェントを訓練する必要があります。

# 目指す姿
スマートフォンのAlexaアプリから、SmartHomeSkillを呼び出します。
SmartHomeSkillを使って、PowerOnOffおよび、ModeControllerを使えるようにします。
本記事では、Alexaを通じて、洗濯機のオン、オフ、および、洗濯モードをデリケートモードに設定するのを目指します。
基本的には、公式のチュートリアルに従って進めます。
https://developer.am

元記事を表示

【メモ】LambdaからgoogleDriveAPIを操作する

##はじめに
LambdaからgoogleAPIでGooglDriveをいじりたかったのですが、サービスアカウントを用いた参考文献が少なく、理解するのに時間がかかったのでメモ感覚で書いておきます。

##本題

###Googleデベロッパーコンソールに行く,プロジェクトを作成
[Googleデッッベロッパーコンソール](https://console.developers.google.com/)にログイン
![スクリーンショット 2021-01-23 0.32.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/488939/380e136c-fe39-9a18-45db-29a94f2563a2.png)

###APIの有効化>APIライブラリから`Google Drive API`を有効化させる
![スクリーンショット 2021-01-23 0.33.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4889

元記事を表示

【Netlify functions】Netlifyでデプロイ成功したらSlackにメッセージを投稿する

`Netlify functions`でSlackにメッセージを投稿するAPIを作成した際の忘備録です。

## やりたい事
NetlifyでホスティングしているWebページのデプロイが成功したら、Slackにメッセージを投稿する。

ちなみに、Netlifyの有料プランなら[Slack notifications](https://docs.netlify.com/site-deploys/notifications/#slack-notifications)で簡単に設定できるようです。
(以前は無料プランでも使えていた…?)

## Netlify functionsとは
– AWS LambdaをNetlify上で使えるようにしたもの(AWSアカウント不要)
– JavaScript または Go で書ける。
– 無料プランでは、**リクエスト数125,000/月**と制限がある

:warning: リクエスト数の上限を越えると、自動的に次のレベルまたはパッケージにアップグレードされるようなので注意!

## 構成
– ホスティング: Netlify
– SSG: Next.

元記事を表示

M5StackGRAYのセンサの値を3G拡張ボードを使ってDynamoDBに送ってみた

以前、
[M5StackGRAYのジャイロセンサの値を3G拡張ボードを使ってSORACOM Harvestに送ってみた](https://qiita.com/tatsuya1970/items/b25881ddf11ae8cd6409)
というのをやったのですが、ゲームのように頻繁にリクエストが生じる場合、Harvestだとすぐリクエスト制限にかかってしまい、悩んでたところ、[SORACOMのMAXさん](https://qiita.com/ma2shita)からアドバイスを受け、DynamoDBに保存することにしました。

こんな感じです。
![アーキテクチャ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/291592/55461a60-5adf-b517-1c21-a43b8fba64e5.png)

M5Stackに3G拡張ボード(SORACOMのSIM)を使ってSORACOMプラットフォームに飛ばすまでは、手順、コードとも冒頭で紹介しました[私が以前書いた記事]
(
https://qiit

元記事を表示

AWSのAPI Gateway + Lambda + DynamoDBでAPI作ってみた

# はじめに
はじめまして。筆者の伊藤です。

今回はタイトルにある通りAWSを使ってサーバレスなAPIを作ってみたいと思います。
本記事の目的は以下の通りです。

+ アプリ開発未経験者によるAPI設計構築とpython学習(初歩的な内容となります)
+ サーバレスAPI構築に必要となるAWSサービスの学習

似た目的の方がいらっしゃれば一度記事に目を通してみて下さい。

# APIとは?
そもそもAPIとは何なのか?作る前に改めて確認してみましょう。
API(Application Programing Interface)とは
「サービス・アプリ開発を効率化するためのある機能・データと
その仕様を定め公開しているもの」とのこと。
一般的にインターネット上で公開されているものはWeb APIと呼ばれ、
私たちでも利用することが可能ですね。(Twitter、Facebook、Amazonなど)
APIをサービス・アプリ開発に活用することで
利用者は自身のサービス・アプリに少ない労力で新しい機能や最新情報を追加でき
開発者はAPIを使ってもらうことでAPIの宣伝や利用料を得る
といった

元記事を表示

React.js & Next.js, Material UI + AWS Lambdaでお問合せフォームを作ってみた

# はじめに
今回の記事は以下2冊の書籍の復習を兼ねて作成した内容になります。

* React.js & Next.js 超入門(掌田津耶乃さん 著)
* AWS Lambda実践ガイド(大澤文孝さん 著)

# 何を作ったのか
今回は上記2冊で学んだ内容を総動員ということで以下のようなお問合せフォームを作成してみました。
こちらに内容を記載し、「送信」ボタンをクリックすると管理人へメールが飛ぶ仕様です。
まあこれだけですとわざわざライブラリ等を利用するほどでもないのですが、一応復習ということで敢えて利用して作りました。
フロントエンドではReact.js & Next.js, CSS, Material UIを利用し、バックエンドではLambda(Python), S3, DynamoDB, API Gatewayを利用しています。
![お問合せフォーム.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538249/1c4031e8-0ca8-917c-2003-2e3ae2dce7e8.gif)

元記事を表示

【Python】S3にアップロードされたCSVファイルをAWS LambdaでJSONファイルに変換する

## 本記事で目指す構成

![lamda-csv-to-json.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688854/cdf24a71-9d1c-b669-9392-d6434acf726a.png)

**S3にCSVファイルをアップロード → Lambda起動 → JSONファイルに変換**

## 使用技術

言語: Python 3.8
AWS: S3、Lambda

## 下準備

まず最初にIAMユーザーやIAMロール、S3バケットなどの準備を行います。

### IAMユーザーを作成

今回はAWS CLIを使って作業していくので、専用のIAMユーザーを作成します。

![スクリーンショット 2021-01-19 19.22.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688854/58a395ce-6ff7-dc18-e6f1-c322dae62146.png)

「IAM」→「ユーザー

元記事を表示

AWS Lambda + カスタムランタイムでbash実行

## 概要

2020年12月にLambdaのコンテナ実行に対応([リンク](https://aws.amazon.com/jp/blogs/news/new-for-aws-lambda-container-image-support/))しているが、任意のプログラムを実行するために Lambda ランタイム APIに準拠して実装する必要がある。
(カスタムランタイムは2020年8月にAmazon Linux2に対応([リンク](https://aws.amazon.com/jp/about-aws/whats-new/2020/08/aws-lambda-supports-custom-runtimes-amazon-linux-2/)))

このページでは、[公式チュートリアル](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/runtimes-walkthrough.html)にあるbashをコンテナ経由で実行する。

既存のzipファイル化する方法とさほど変わらないがECRにdockerイメージを置いとくだけなのでデプロイ

元記事を表示

ちゃま語でツイートするSlack Bot 〜AWS Lambdaを用いたSlack Botの作り方〜

# はじめに
## こんな人に読んでもらいたい
ネタはホロライブ関連だけど、やってることは以下のようなことなので、役に立つかも(役に立ってほしい)。

・AWS Lambdaを用いてSlack Botを作る
・Botとの個人チャットに送信された文章を取得して、定められた動作する。(返信もする)
・twitterAPIでツイート
・AWS Lambdaをserverless-frameworkでデプロイ
・Python外部モジュールはserverless-python-requirementsで導入

## これは…?

 ちゃま語でツイートするSlack Botを作った。ざっくり説明すると、

1. Slack Botにツイートしたい文を入力する
2. ちゃま語に翻訳する
3. 翻訳した文をツイートする

## そもそも「ちゃま語」って…?(最初にこれ書けよ

 先日、マリン船長が配信で、**「ちゃま語であそぼ」**なるものを、はあちゃまが提案していたという旨の話をしていた。(以下の動画を参照)
https://www.youtube.com/watch?v=T2yMNE_zb

元記事を表示

AWS SAM を使って AWS Lambda Layer を作成する

# はじめに

以前に Layer を使って Lambda コンソールの AWS SDK の更新をなるだけコンソールを使って更新する方法を紹介しました(以前の記事は [こちら](https://qiita.com/azureus/items/385ab10b6d12de65ba1f) )。今回は、同じ内容を AWS SAM を使って行いたいと思います。

## 開発環境を用意する

開発環境には AWS Cloud9 を利用しました。この後の作業を全く同じかたちで実行してみたい方は Cloud9 を用意してください。AWS CLI、SAM CLI が既に用意されているので、この後で必要な操作にたいして準備が必要ありません。Cloud9 の準備には [Cloud9 環境を用意する](https://qiita.com/azureus/items/92f287c164990daefb5b) を参照してください。

## Lambda 関数を作成し、SAM でデプロイする

* 作業を行う work ディレクトリと、 Lambda 関数を格納する my-new-sdk-function2

元記事を表示

なぜサーバーレスアーキテクチャを選んだか(AWS Lambdaアプリケーション)

## 背景

自社新システムの開発のバックエンドを担当することになった際にサーバーレスアーキテクチャを選定したので、メリット・デメリットなどを合わせてなぜサーバーレスアーキテクチャにしたのか書きたいと思います。
## 前提

クラウドはAWSを利用しているのでAWS Lambdaを使用する前提です。
また、言語はRuby(2.5系)を使用しています。

## サーバーレス(AWS Lambda)のメリット・デメリット
### メリット

– インフラ構築の工数が削減できる
– サーバーを管理する必要がないのでEC2インスタンスの構成などを考えること自体が不要です。(※VPCは設定できます)
– アプリケーションエンジニアがシステムの大部分を管理できます。
– 自動スケーリング
– 水平にスケーリングするため、パフォーマンスを維持できます。
– メモリ圧迫により「サーバー落ち」が起きて再起動するまで利用できなくなるなどの心配がありません。
– 従量課金制
– リクエストに比例して課金されるため、システムを使わない間は課金されません。
– 耐障害性

元記事を表示

OTHERカテゴリの最新記事