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

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

Lambda LayersをGolangで実装してみる

# はじめに
Lambda の共通処理と言えば Lambda Layers である。

Golang には共通モジュールの扱い方が他にもいくつかある(Git Submodulesを使うとか、ローカルのGitリポジトリを使う([過去の記事参照](https://qiita.com/neruneruo/items/fdbb9bbe02861223c215))とか)が、今回は、Lambda Layers を使った共通化の使用感を確認して考察してみよう。

# Go Plugin パッケージを使う
Lambda Layers を Golang で使う場合、Plugin パッケージを使用する。
まずは、このモジュールについてちゃんと知っておこう。

パッケージの説明は[公式](https://golang.org/pkg/plugin/)を確認。

ログ出力をする mylogger なプラグインを作ってみることにしよう。

“`golang:mylogger.go
package main

import (
“log”
)

func OutputLog(str string) {
lo

元記事を表示

無料版のsentryでslackに通知を送る(lambda利用)

# この記事について
slackに通知させるには、sentryのintegrationとして用意があるのですが、利用できるのが有料版のみとなっています。

個人でのプロジェクトでの利用で、有料化するつもりはなく、無料版でもできるようにしてみました。
通知の部分のみにフォーカスしているので、sentryの設定などは、説明を省いております。

# 対象
– sentryの無料版を利用していて、slackに通知したい
– awsのアカウントを持っている

# 方法について
sentryのwebhookを利用します。
送信先にlambdaのURIを指定して、lamdaからslackのwebhookにリクエストします。

# 手順

– slackのincoming webhookを設定して、リクエスト先を用意します。(いろいろ記事があるので省略)
– lambdaを作成し、環境変数`SLACK_INCOMING_WEBHOOK_URL `に、slackのURIを設定する
– lambda処理を下記をコピペして保存・デプロイ(サンプルはruby)

“`ruby
require ‘json’

元記事を表示

CodePipelineによるlambdaの自動リリースのメモ(未来の自分のコピペ用)

# はじめに
自分用のメモとして作りました
python 3.8 の hello world を返す lambda を2つリリースします

# 手順
1. [githubのリポジトリ](https://github.com/lnsw/sample-lambda-release)をフォークする
2. AWSのマネジメントコンソールでパイプラインを作る
3. lambdaがリリースされるのを確認する

# 注意
CodePipelineは従量制の課金です!
無料枠でも100回を越えると課金されます

# 前提
AWSのアカウントがあること
githubのアカウントがあること

# 詳細
## 1. githubのリポジトリをフォークする
githubにログインして、赤線の所をクリックするとforkできます
https://github.com/lnsw/sample-lambda-release
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128663/4494d19f-29c7-ee5a

元記事を表示

AWSのVPC Lambdaからエンドポイント経由でSQSにアクセスする際の注意

# 結論
AWSでLambdaをVPCに配置して、エンドポイント経由でboto3 SQSを使用する際にはendpoint_urlオプションが必要。

“`python
import boto3
sqs = boto3.client(“sqs”, endpoint_url=”https://sqs.ap-northeast-1.amazonaws.com”)
sqs.send_message(…)
“`

このオプションを付けないと、接続できなくてタイムアウトします。

# 詳細
AWSでLambaをVPCに配置してプライベート接続でSQSを使用する際にめちゃはまったので注意点をメモします。
詳細は以下のサイトが詳しいのでそちらを参照して下さい。私が試した時はLambda上でboto3を使用した際にのみ現象が発生しました。

私の発生条件ではLambdaのboto3はバージョン1.14.48でした。また、EC2を立てて試したバージョンは1.16.8でしたが、こちらでも同様の現象が発生しました。

1. AWS CLI等でSQS VPC Endpointを利用するときの注意点 —

元記事を表示

Splunkの検証環境をAWS CloudFormationで簡単構築

# 1.All in Oneの環境をAWSで簡単に構築したい
新しいバージョンがリリースされたり、バージョンによる動作の際を確認する際に、なにかと検証環境を用意するシーンが多かった日々でした。
スタンドアローンの環境を構築する際にはCloudFormationでテンプレートを利用していました。
しかし、Splunkのダウンロードリンクを毎回取得し、テンプレートを編集しなければいけないのが煩わしかったのです…
前回の記事では、ダウンロードリンクを取得するLambda関数を作成致しました。
[Splunkのダウンロードリンクをスクレイピングで取得](https://qiita.com/minaminosima/items/1f4fa5475e613265ff95)
本記事ではCFn上でへ上記の関数を実行するテンプレートを作成しました。

# 2.使用する機能や技術
– AWS CloudFormation

他にもいろいろ使ってはいるのですが、本記事ではCFnのみ掲載いたします。
API GatewayやLambdaも利用しているのですが、前回投稿分と内容が重複するので、割愛いたします

元記事を表示

AWSでSlackへのPOST先を限定する仕組みを構築する話(成功ルート)

# 0. はじめに

今年の7月にAWSアソシをギリで取得した初心者が、AWSでそれっぽいことをする奮闘記である。の続き。
https://qiita.com/haman/items/3ab610dd4f3c00584dd0

一応、成功ルート。

# 1. やりたいこと
これはおさらい。
情報流出を防ぐために、みんなで作るLambdaのPOST先をSlackだけに**システム的に絞りたい**。

![slackAWSPOSTAPI-1-Page-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/384185/7979e506-f16f-4fca-f0bf-42132fa90a6b.png)

# 2. 失敗ルートを活かして
上の図のsomething new!のところは、既存のものではなかなか実現できなそう。
であれば、自分たちで作れば良い。

言葉にすると、
みんなで作成するLambdaとAPI-GW(UserLambdaとでも呼ぼう)の後ろに、
検疫所の役割を担うLambdaとAPI-GW(P

元記事を表示

AWS Lambda Layers作成から紐付けまでさらっと解説

## はじめに
Pythonを扱う前提の記事です。

## Layers(レイヤー)とは
ガイドによると
>レイヤーは、ライブラリ、カスタムランタイム、またはその他の依存関係を含む ZIP アーカイブです。レイヤーを使用することで、関数のライブラリを使用することができます。

ライブラリのような共通で使用するモジュールをLayerにすることで、デプロイパッケージにライブラリを含める必要がなくなります。
つまり、Lambdaでサードパーティ製のライブラリやモジュールを使用する際に、Layerに格納して各Lambda関数から呼び出して使用するというような使い方ができます。

## 注記
・Lambdaで一度に利用できるLayerは5つまで
・解凍後のデプロイパッケージのサイズ制限 250 MB

## ディレクトリ構成
Lambda実行環境のパスは /opt ディレクトリとなるので、
Layerのディレクトリ構成としては /opt/python/Layer となります。

レイヤー自体のパッケージ構成はこんな感じ。

“`
python
├ layer.py (共通処理などコードも入れら

元記事を表示

AWS AmplifyでPythonのFunctionをCI/CDするとbuildに失敗する問題の対処方法

題名の通り、AWS AmplifyでPythonのFunctionをCI/CDするとbuildに失敗する問題に遭遇しました。

## 結論(対処方法)

ビルド設定のamplify.ymlに以下を追記することでbuildを通すことができました。

“`yml
version: 1
backend:
phases:
build:
commands:
# ここから追記 >>>
– export BASE_PATH=$(pwd)
– yum install -y gcc openssl-devel bzip2-devel libffi-devel python3.8-pip
– cd /opt && wget https://www.python.org/ftp/python/3.8.2/Python-3.8.2.tgz
– cd /opt && tar xzf Python-3.8.2.tgz
– cd /opt/Python-3.8.2 && ./configure

元記事を表示

IAMのイベントを検知して処理する(EventBridge→SNS→Lambda)

少し前に以下の記事を書きました
https://qiita.com/kaikusakari/items/06b47a45de30107a2ab1

単独アカウントでIAMのイベントを取得する場合のケースでしたが、クロスアカウント環境下でIAMのイベントを集約して検知したい場合の手段になります。

前の記事に記載した通り、IAMのイベントは「us-east-1」リージョンにEventBridgeを作らないと取得できません。(他にもConfigを使うなど取得する手段はありますが、EventBridgeがお勧めです)

## 想定環境
・「ap-northeast-1」を主に使っている
・クロスアカウント
・1つのアカウントにログやイベントを集約して監視専用のアカウントとする

## 準備するもの
**イベント送信先**
ログ集約アカウント
・「ap-northeast-1」でLambdaを作り、イベントを検知してチャットアプリに通知する
・「us-east-1」から「ap-northeast-1」のLambdaをCallするためのSNSトピックを作成する
・「us-east-1」で各アカウ

元記事を表示

これでスポットリクエストのキャンセルし忘れとさらばだ!

# 概要

 開発環境にEC2のスポットインスタンスを利用することはよくあると思います。その中でも「**永続的リクエスト**」を使っているとついついインスタンスだけを「終了」し、スポットリクエストをキャンセルし忘れることありませんか?リクエスト有効期間内であれば、自動的に同じタイプのインスタンスがゾンビのごとくのように再作成され、無駄な課金が発生します。
 インスタンスの削除時にスポットリクエストからキャンセルするように運用手順で決めていてもついつい忘れがちなので、自動化する方法を紹介します。

前提条件のまとめ

– スポットインスタンスを使用している
– 永続的リクエストである
– リクエスト有効期限内である

# 構成

EventBridgeを使用することで、インスタンス終了イベント時に指定したLambdaを実行し、スポットリクエストをキャンセルします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/30522/dda5a741-2ba2-e825-3557-160991475

元記事を表示

AWS lambda でgoogle spread sheetを操作したくなったのでやってみた [その1]

## 概要

表題そのままなのですが、google spread sheet って、なんかGAS(Google Apps Script)で操作する。
そんな固定観念があったんですが、今回はAWS lambda (Python)で操作したくなったのでやってみました。

別にGCPだけでも完結しますが、、、`AWS慣れているので使いたかった。それだけです(笑)`

## 構成

構成はシンプルです。

![Untitled (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344266/ab4a725f-616c-31c6-c3ea-62d904963c6b.png)

GCP側で作成した認証情報は、暗号化してAWS Secrets Managerに保持します。
lambdaのコードに認証key直書きとかはやめたほうが吉…

## 準備

### GCP側の認証を作成する
AWSでいうところのIAMのkeyを作成する感じです。

まずは[GCPのコンソール](https://console.cl

元記事を表示

AWS lambdaでPOST+JSONをテストイベント、Webアプリからのイベントに対応する

###やりたい事
lambdaにPost+JSONが来た時に、bodyからデータを取り出し変数に格納したいが、
テストイベントとWebアプリからのイベントで別のコードに分けていたので、同じにしたい

###テストイベント用のコード
まずテストイベントでは以下のようなJsonを使っていた

“`
{
“body”: {“name”:”test”,”score”:0}
}
“`

受け取りの処理は以下のように取得できる

“`
exports.handler = async (event, context) => {
let bodyMessage = event.body;

let name = bodyMessage.name;
let score = bodyMessage.score;
}
“`

しかし、Webアプリケーション側でbodyにJSONを付与した場合はJSON.Parseをしないとデータが取得できず、nameとscoreの変数に格納される値は空欄となってしまっていた

##Webアプリ用のコード

Jsonの形式は同じなの

元記事を表示

【AWSハンズオン】サーバレスアーキテクチャで、有名人識別サービスを作ろう!

# 本記事について
– **会社の同僚向けに、業務外にて実施をした「AWS ハンズオン」の資料を、一般公開したものです。**
– **サーバレスアーキテクチャを用いて、有名人の画像解析 API サービスを、約1時間で作成するという内容になっています。**
– 言語は Python を用いますが、基礎知識が無くても楽しめる構成にしています。
– ハンズオンの実施にあたっては、以下のリソースが必要です。
– インターネットに接続できるPC( Windows, Mac 問わない)
– AWS IAM ユーザーアカウント
– 本資料の作成には細心の注意を払っておりますが、その正確性を担保するものではありません。また、本資料が起因して生じた損害について、作成者は一切の責任を負いません。

# 追記:スライド版を公開
– Speaker Deck にて、**本ハンズオンのスライド版資料を公開**しています。
– スライド版の方が、デザインが整っていて見やすいかと思います。
– 対して、Qiitaの本記事の方には、ソースコードをコピペできるメリットがあります。

元記事を表示

AWS SAMでLambdaとAPI Gatewayをデプロイする

SAMアプリケーションの作成
“`sam init“`
SAMアプリケーションのビルド
“`sam build“`
SAMアプリケーションのパッケージ化
“`sam package –s3-bucket test –output-template-file out.yaml“`
SAMアプリケーションのビルド
“`sam deploy –template-file out.yaml –stack-name test –capabilities CAPABILITY_IAM“`

最後まで読んでいただきありがとうございました。

元記事を表示

AWS Lambda を C# で書いてみる


– [はじめに](#はじめに)
– [開発・実行環境準備](#開発実行環境準備)
– [VisualStudio プラグイン](#VisualStudio-プラグイン)
– [プロジェクト作成](#プロジェクト作成)
– [開発とデプロイ](#開発とデプロイ)
– [コード記述](#コード記述)
– [デプロイ設定](#デプロイ設定)
– [認証情報の準備](#認証情報の準備)
– [デプロイ](#デプロイ)
– [テスト](#テスト)
– [Visual Studio でテスト](#Visual-Studio-でテスト)
– [AWS Console でテスト](#AWS-Console-でテスト)


# はじめに

このドキュメントは AWS Lambda を C# で記述するための手順です。
コードエディットやパブリッシュには Visual Studio を使用します。

# 開発・実

元記事を表示

Chalice で Excel 向けの CP932 CSV ファイルを作成して返す

# はじめに

Webアプリケーションの管理系の仕組みを作っていると「システムのデータをExcelで開けるCSVファイルにまとめてダウンロードできるようにして欲しい」というパターンに経験上結構遭遇する。
Python3系で何も考えずにCSVを作ると UTF-8 の文字エンコーディングになるので、Excel のデフォルトの設定だと文字化けしてしまう。 もちろん、Excelでちゃんと読み込みエンコーディングを指定すれば問題なく開けるのだが、「そんなの分からんから最初から文字化けないようにして」と言われることも多い。その場合、Windows用のエンコーディング (CP932, あるいは Shift_JIS, SJIS) でCSVファイルを作成する必要がある。

今回は Chalice を使ってやっていたのだが、ドキュメントをよく見た結果ドはまりしたのでメモ。

## version など

“`bash
$ pipenv run chalice –version
chalice 1.21.2, python 3.8.2, linux 5.4.0-52-generic
“`

##

元記事を表示

Lambda Layer と CloudFormation / sam-cli で楽ちん X-Ray

# はじめに

こちらの [Lambda Layer と X\-Ray \- Qiita](https://qiita.com/Ricordanza/items/d68d708e274e28b6bfa2) という記事で、X-Ray を Lambda Layer で組み込む方法が紹介されています。複数の lambda をデプロイする場合に、個別に X-Ray を組み込まなくても一発で付け外しができるので、けっこういい感じです。

けっこういい感じなんですが、すこしコマンドを叩くのが手間なので、CloudFormation 化できないかな、と思っていたところ [AWS SAM CLI で Lambda Layers が ビルドできるようになったよ \- Qiita](https://qiita.com/hayao_k/items/f8c7ad5e35e29d590957) という記事を見つけました。

というわけで、2つの記事の内容をガッチャンコしたら、こんなかんじで

  **X-Ray の LambdaLayer を CloudFormation で作れて楽チン!**

という記事です

元記事を表示

AWS Lambda Powertoolsを触ってみた



# はじめに
サーバレスの[イベント](https://serverless.connpass.com/event/190055/)で[紹介](https://speakerdeck.com/_kensh/aws-lambda-powertools)された[AWS Lambda Powertools](https://awslabs.github.io/aws-lambda-powertools-python/)が便利そうだったので触ってみました。
(こちらの[セッション](https://pages.awscloud.com/EMEA-field-OE-AWS-Developer-Ac

元記事を表示

cloud9からlambdaを動かす際の注意点(No module named ~のエラーなど)

#はじめに
AWS関連で、cloud9からlambdaを動かす際に少し躓いたことがあったのでその辺をまとめていきます。lambdaはサーバーレスでプログラムを実行してくれるので非常に便利で、私もスクレイピング等の定期実行のために使いはじめました。
この記事は主に初めてcloud9、lambdaを使う方向けになると思います。
#実践
まず新しくcloud9の環境を作成。名前はexampleにしておきます。
![2020-10-21 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/806955/13bf3056-bb4e-999a-91b8-062019841120.png)
これが終わると下のような画面に移ります。画面右に表示されている漢字の「入」のようなボタンをクリック、さらにCreate a new Lambda function(画像のオレンジ色の部分)をクリックしてlambda-functionを作成できます。
![2020-10-21 (3).png](https://qiita-imag

元記事を表示

StepFunctionsのStateMachineをCDKを使って生成しよう

![aws-step-functions-960×504.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692706/55045fa8-2a4e-83b0-be42-d2b414fb46e8.png)
仕事で開発しているプロダクトのアーキテクチャをわかりやすく制御するため、StepFunctionsを導入しようとして調査しました。
Lambdaを主体としたマイクロサービスという形で作成しているのですが、Lambdaを細分化する方針なので、細分化された機能群をStepFunctionsで統合して機能として動かそうかと。
この記事ははオフィシャルで出ているチュートリアルを実行して概要を理解し、StepFunctionsをCDKで作成してデプロイできるところまで進みます。

## StepFunctionsの概要
[**ドキュメント**](https://aws.amazon.com/jp/step-functions/)を見ると複雑な用語が並んでいますが、今回は目的に鑑みて**StateMachine**に

元記事を表示

OTHERカテゴリの最新記事