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

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

メール便忘れ防止ボタンをAWS IoT ボタンで作ってみた

#若手ならではのメール便担当
僕の会社では若手の仕事として「メール便」というものがあります。
会社からの送付・受取を毎週9時・11時・15時に行うというもので、これがまた結構責任重大。
__ヤッベェェェ忘れてた郵送物を送り損ねた!__なんてことがあったら普通に先輩に迷惑が掛かります。

僕自身も数回メール便を忘れた実績があり、リマインダーをつけてもアラームを消してそのまま忘れることも(ひどい)。
どうにかメール便忘れを防ぐ仕組みを作りたいと思い、AWS IoTボタンを使って実装してみました。


こいつです

#完成デモ
##メール便処理したらボタンを押す
送付したい郵便物をためておくメール便ボックスみたいなものがあり、そこに設置します。
メール便担当はちゃんとメール便を処理したよ!というときにボタンをポチーと押す、という

元記事を表示

CDK で API Gateway Mock 統合と Lambda Authorizer を作る

CDK(TypeScript) で API Gateway(REST API) の Mock 統合と、Lambda Authorizer を作ってみました。

ソースコード全体はこちらです。
https://github.com/kazfuku/apigateway-java-lambda-authorizer/blob/master/lib/apigateway-java-lambda-authorizer-stack.ts

## Mock 統合
Mock 統合はこの部分です。

“`TypeScript
const mockIntegration = new apigateway.MockIntegration({
requestTemplates: {
‘application/json’: ‘{“statusCode”: 200}’
},
integrationResponses: [
{
statusCode: ‘200’,
responseTemplates: {
‘application/json’:

元記事を表示

Java Lambda で API Gateway の Lambda Authorizer を実装する

API Gateway(Rest API) の Lambda Authorizer では、Lambda のレスポンスに [指定の JSON を返す](https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/api-gateway-lambda-authorizer-output.html) 必要があります。

Lambda Authorizer って何?って方は [こちら](https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/apigateway-use-lambda-authorizer.html) を。

Node.js だと、こんな感じで、そのまま JSON を返せます。便利ですね。

“`JavaScript
exports.handler = async (event) => {
console.log(JSON.stringify(event, null, 4));
return {
“princi

元記事を表示

Go×Qiita API×LambdaでTwitter Bot作った

# はじめに
Goを勉強しているのですが、自分から情報を探しにいくと当たり前ですが自分が欲しい情報しか得られません。全体的な知識を広げていくには様々な記事を読んだりする必要があると思うのですが、なかなか腰が重い。
ということで、QiitaのGoタグがついた記事をツイートしてくれるTwitter Botを作成しました!

[@BotQiita](https://twitter.com/BotQiita)
↑フォローしてね。

# アーキテクチャ
文章で説明してもわかるくらいの構成なのですが、アーキテクチャ図作ってみました。
![architecture.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/631794/f1a9c70e-9e61-fcb4-a3d8-228d77793753.png)

– Qiita APIでGoタグがついた記事を取得
– Twitter APIで認証&ツイート
– lambdaはGoで書かれており、cloudwatchで1時間毎に定期実行

といった感じになってます。

#

元記事を表示

AWSについての学習と簡単な構築とその手順(S3にドキュメントをアップロードしたらSlackに通知が送られる簡単なシステム)

こんにちは。
社会人になってから
「普通の生活をするのって難しいな」
と感じることが多くなりました。こまっちゃんです。

約半年ぶりの投稿になります。さて、くだらない近況報告はさておき
今回もウェブテクデー(会社で用意してくれたお勉強の時間)で学習を行いました。

AWSのオンライン研修を受講したのですが、やっぱり触ったことがないといまいちピンとこないので、S3とLambda、Slackを使用して簡単なシステムを構築したので共有します。

ちなみにですが既に同じ構成で投稿している方がいたので、今回はAWSがどれだけ簡単に構築作業ができるのかを分かってもらえればと思います。エンジニアの新人さん向けでもあると思います。

まずは今回使う3つのサービスの紹介からしていきます。

#1.S3ってなに?
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/600095/b0728461-b4c5-67fb-8e46-ae5d51ce4304.png)

S3とは、AWSの中のサービスの1つで、「Simp

元記事を表示

AWS Lambdaでselenium×chromeを動かす時の AWS Lambda Layers のつくり方

# この記事では
AWS Lambdaから、selenium×chromeでブラウザ操作したい時に、
Layer の作り方でハマったので投稿します。

# やりたいこと
AWS Lambdaでselenium×chromeを動かしたい。

# 環境
windows 10 Pro
python 3.7
chromdriver 2.37
headless-chromium 64.0.3282.167

# 記載しないこと
-AWS lambda の関数作成、呼出方法
-selenium webdriverによるブラウザ操作ができるpythonプログラムの作り方。

# つまづいたところ
1.AWS Lambda Layersを作る単位
2.AWS Lambda Layersへの搭載方法と呼び出し方

##1.AWS Lambda Layersを作る単位
まず、AWS Lambda Layers とはlamda から共通的に使える共通関数のようなものです。
下記のようにLambda本体から参照される形で呼び出すことができます。
機能の1部を切り出すことで、lambda本体の

元記事を表示

CloudWatchEvents (EventBridge) + StepFunctionsを使ったCron処理で同時起動を防ぐ方法

コンテナ化やサーバレス化が進み、従来実装していた方法が通用しない場面が出てきています。
その代表的なものの一つがバッチ処理です。
従来はバッチ処理を行うサーバが存在し、crontabコマンドで設定などを行っていました。
しかしコンテナ化、サーバレス化の影響でバッチサーバというものは存在しなくなります。

AWS上でサーバレスなバッチ処理システムを構築するための方法の一つにCloudWatchEvents(最近、EventBridgeになりました。以下CWEと略します)を利用する方法があります。
しかし、このCWEにはイベントが多重に発生するという仕様があります。なお、Kubernetsの `CronJob` やGCPの `Cloud Scheduler` でも同様の仕様になっています。
バッチに同実行耐性や冪等性を持たせておけば問題ないのですが、長時間バッチや特殊処理を行うバッチ、作られたのが古くて手を入れづらいバッチなどはなかなか簡単にはいきません。

## 概要

今回は、CWE + StepFuntionsを使ったバッチ処理で同時実行を防止する方法を考えました。
バッチ処理自体は

元記事を表示

AWS Cloud9でオウム返しLINE Botを作る

## はじめに

AWS Cloud9 上で`SAM Local`を使い、オウム返しするLINE Botを作るメモ

## 構成図

こんなの作ります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274270/fcf8b256-e677-df6d-abae-fa8b53835c8e.png)

## 手順の概要

– [LINE Developers] プロバイダー作成
– [LINE Developers] 作成したプロバイダーにチャネルを設定
– [LINE Developers] 作成したチャネルで2つの情報を取得
– チャネルアクセストークン
– チャネルシークレット
– [AWS] Cloud9環境を用意する(東京リージョン: ap-northeast-1)
– [AWS-Cloud9] Lambdaを作成する
– Function name
– Application name
– [AWS] Lambdaスクリプト更新
– [AWS

元記事を表示

AWS Systems Manager、Lambdaを使ってS3のファイルをEC2(Windows)内にダウンロード(同期)してみた。

#概要図
Lambda ⇒ Systems Manager ⇒ EC2 ⇒(同期コマンド)⇒ S3

▼参考(にさせていただきました!)
https://dev.classmethod.jp/articles/lambda-s3-ec2-windows-sync/

#作業ステップ
▼前提
・S3にバケットを作成し、ファイルをアップロード済み
###①IAMロールを作成(EC2用)
AmazonEC2RoleforSSM
※上記権限は範囲が広いため、別のポリシーへの移行が推奨されていますので、
 仕事で使用する場合は下記ページをご確認いただければと思います。
 https://dev.classmethod.jp/articles/check-amazonec2roleforssm-policy/
###②EC2インスタンス作成(windowsサーバ ※ami-038c59e921e8b9c7d 使いました)
ロールに”①”をアタッチ
⇒SystemsManagerでEC2のオペレーションができるようになる
※SSMエージェントはデフォルトでインストールされていました。
###③IA

元記事を表示

Chalice を使って AWS Lambda 上に Flask/Bottle のようにWebアプリケーションを構築する

# はじめに

小規模なWebアプリケーションを作成する場合、Pythonでは [Flask](https://flask.palletsprojects.com/en/1.1.x/) や [Bottle](https://bottlepy.org/docs/dev/) を利用できる。
これらのフレームワークは「どのURLに対して」「どのプログラムを動かす」といった対応を Python のデコレータで対応させることで実現できる。
例えば、以下の Flask アプリケーションでは `/` にHTTPアクセスした時に `Hello, World!` を返すWebサーバーを実装しており、ルーティング・レスポンス応答が非常に分かりやすい。

“`python:Flaskの公式ページから引用
# https://flask.palletsprojects.com/en/1.1.x/quickstart/
from flask import Flask
app = Flask(__name__)

@app.route(‘/’)
def hello_world():
return ‘He

元記事を表示

Ruby×Sinatraで作ったSlackBotをAWS Lambdaで動かしてみる

## 本記事で目差す構成

![Untitled Diagram(1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688854/15835a3a-f744-3f00-b6ee-d465bd9a64fc.png)

① Slackで特定のアクションを実行する。(※今回はスラッシュコマンド)
② API Gatewayを介してLambdaを起動。
③ Lambdaに配置した関数を実行し情報を返す。

![slackbot(2).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688854/f1600dad-aaa5-b64f-a0dd-e24bcfb2e0ca.gif)

↑動作イメージとしてはこんな感じ。
今回はとある地域の現在気温を返してくれるSlackBotを動かしてみる。

## 対象読者

– 簡単なSlackBotを作ってみたい人
– AWSのLambdaに触れてみたい人

### Lambdaとは?

> A

元記事を表示

AWS CDKを使ってlambda layerをデプロイしてみた

# はじめに
自己研鑽の一環でAWS CDKを使っているのですが、lambda layerをデプロイするようなサンプルがあまりないように感じたので、自分で試行錯誤しながらやってみました。

# 開発環境
– aws-cdk:1.58.0
– cdk使用言語:typescript

# 前提として
cdkを使えるような環境のセットアップが出来ている前提で記載していきます。
私は以下の記事を参考にさせていただきました。
https://dev.classmethod.jp/articles/aws-cdk-101-typescript/

# ディレクトリ構成
本記事のディレクトリ構成は以下のようになっています。

“`
├─backend
│ └─ src
│ ├─function
│ │ └─sample
│ └─layer
│   └─SharedLayer
│     └─nodejs
│       └─node_modules
└─cdk-stack
  ├─bin
  ├─lib
  └─test

元記事を表示

C#のLambdaプロジェクトを作成してVisual Studio for Macでデバッグ実行する

# はじめに

MacでC#のLambdaプロジェクトを作成し、Visual Studio for Macでテストプロジェクトをデバッグ実行した記録です。

### できたこと

* C#のLambdaプロジェクトを作成
* AWS Lambdaへのデプロイ
* AWS Lambdaでのテスト
* Visual Studio for Macでソリューション化
* テストプロジェクトのデバッグ実行

AWS Lambda上で動くプログラムをアタッチしてデバッグしたわけではありません。
テストプロジェクトをローカルPC上でデバッグ実行しました。

# 準備

### アクセスキー ID とシークレットアクセスキーを設定

PCからAWSにアクセスできるようにアクセスキー ID とシークレットアクセスキーを設定します。

* AWS CLIのインストール
インストール手順は以下のURLを参照してください。
参考:https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-chap-install.html

* 設定
以下のURLを参

元記事を表示

Lambdaから引数を指定して AWS Batch起動方法

## 概要

[前回](https://qiita.com/dmikita/items/af33d64f4d6aef556439)作成したAWS BatchをLambdaから実行するようにします。

## 準備

AWS Batchは[前回](https://qiita.com/dmikita/items/af33d64f4d6aef556439)のものをそのまま使います。AWS BatchのジョブさえできていればいいのでCodeCommitなどはこのためだけに準備しなくても大丈夫です。

### Lambdaの準備

* Lambdaを作成します。今回はpythonで実装していますがほかの言語でも可能です。
* JOB_NAME はジョブ定義の名称
* JOB_DEFINITION はジョブ定義のジョブ定義ARN
* JOB_QUEUE はジョブキューのキューARN
* `XXXXXXXXXX` の部分はAWSのアカウントIDを設定します。
* `command` の部分に引数をリスト形式で
* `environment`

元記事を表示

Amazon API GatewayでmTLSを試してみた。 (2/2)

# はじめに

当記事は[こちら](https://qiita.com/horit0123/private/8eb45bfcef6b848971a4)の続きとして作成しています。Amazon API GatewayがmTLSによる認証をサポートしたため前回の記事では、APIの構成、カスタムドメインの構成、鍵の生成、CA証明書の生成、そしてクライアント証明書の生成、API GatewayのmTLS構成について手順を紹介しました。当記事ではもう少し細部について書きたいと思います。

1.Amazon API GatewayでmTLS構成した際のLambda Authorizerや統合したLambda関数の実装
2. デフォルトのエンドポイントの無効化(**重要**)
3. mTLS設定と絡めたセキュリティ設定

# サマリ
– 証明書の失効対応は自身で必要。Lambda Authorizerや統合されたLambdaで可能
– 予防・記録・検知と対応をセットでAPI Gatewayの運用をご検討ください

# 解説

## 1. Lambda Authorizerならびに、統合され

元記事を表示

Lambda上でmysqlclientを動かす

## 概要

LambdaにてPythonを使用時、MySQLクライアントとして`mysqlclient`を使うもの(SQLAlchemy等)を利用する場合、いろいろ準備が必要。

* `mysqlclient` は `1.4.6` を使う
* AmazonLinux2から `libmysqlclient.so.18` を拾ってくる
* `libmysqlclient.so.18` をLambdaへ上げた際に、Lambda上でライブラリ用パスへ配置する

## `mysqlclient` は `1.4.6` を使う

“`
pip install mysqlclient===1.4.6
“`

細かい原理は不明だが `2.0.1` を使おうとすると、’_mysql’がないと怒られる。。

## `libmysqlclient.so.18`を拾ってくる

AmazonLinux2用の`libmysqlclient.so.18`が必要になるのでビルドする。

#### コンテナ起動

“`
docker run -it amazonlinux:2 bash
“`

#### コン

元記事を表示

【Python】Malformed Lambda proxy response が出た時の対応

## 結論
レスポンスボディをJSON形式の文字列にしましょう。

OK

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

NG

“`
response = {‘message’: ‘hello’}
return {
‘statusCode’: 200,
‘body’: response
}
“`

## 環境
* Python3.8

## 背景
インスタンスを起こすLambda関数をAPIゲートウェイから呼んでみるかー、となり作るも以下のエラーに苦しみました。
Lambdaでのテストは成功してAPIゲートウェイでのテストに失敗したという状況です。

“`
# レスポンス本文
{
“message”: “Internal server error”
}

# レスポンスヘッダー
{“x-amzn-ErrorType”:”InternalServerErrorException”}

# ロ

元記事を表示

Amazon API GatewayでmTLSを試してみた。(1/2)

# はじめに
特に金融系のAPI等、より強固な認証を求められるIoTデバイス等からの認証を行う際にはクライアント証明書による認証を求められることがあるかと思います。当記事では、Amazon API Gateway(執筆時点ではRegionalおよび、HTTP API限定)によるmTLS(Mutual TLS authentication)について構成を試したので記載したいと思います。
当機能に関するドキュメントとして[こちら](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-mutual-tls.html)を参考にして構築しました。

なお、当記事は2020年3月にGAした**HTTP API**をベースに記載しており、従来からあるREST APIについては検証・記載しておりません。

(この記事30分くらいの検証と2時間くらいの執筆かな~と持っていたら、苦労したことに書きましたが、自分の構成管理ミスで思ったより手間取りました。そして証明書のチェーン(中間CA)も作ろうと思ってまだ作れてなかった

元記事を表示

DiscordのWebhooksをurllib経由でたたいて簡単自動発言ボット作成

# 概要

AWS Lambda の Python 3.7 ランタイムを使ってDiscordのWebhook URL を叩くと 403 でうまいこと叩けずに困った。

原因を調べたらどうやらUAをチェックしているらしく、UAが urllib だとNG。( 試しに使った curl はOK )

Discordのライブラリを入れればいいんだろうけど、Lambdaという都合上、ほか依存ライブラリ追加したくない。

UAをcurlに偽装することでうまいこと叩けた。よかったよかった。

# 反省

– うまくいくパターンとだめなパターンの差分はHTTPヘッダをみよ。
– APIがコケる場合にはちゃんとステータス値とレスポンスボディとマニュアルをみよ。

# 参照

[Python3のスクリプトでjsonをPOSTする – Qiita](https://qiita.com/neko_the_shadow/items/324976c7b54623e82b26)

# 詳細

## What is Webhooks

Discordにおいて、なにかあったら自動で特定のチャンネルにメッセージを送りたい

元記事を表示

AWS Systems Managerを用いてEC2上のコマンドを動かしてみた

こんにちは。streampackのfadoです。厳しい暑さが続いておりますがみなさん、いかがお過ごしでしょうか。まだまだ油断は禁物ですのでうがいと手洗いを忘れないようにしましょう。さて、今回は表題にも書きました通り、`AWS Systems Manager`を利用し、`AWS Lambda`及び`Amazon API Gateway`と連携したシステムで`Amazon EC2`インスタンス上でコマンドを実行させる方法を簡単に説明していきたいと思います。

#注意事項
* Linuxコマンド及び`AWS Lambda`,`Amazon API Gateway`,`AWS Systems Manager`の知見がある方を対象にしています。
* `AWS Lambda`はPython3で記載しています。
* ffmpegのRTMP送信先は`AWS Elemental MediaLive` -> `AWS Elemental MediaPackage`にしていますがスコープ外ですのでセットアップ等は割愛させていただきます。

#リソース
* Amazon EC2 (以下 EC2)
* AWS

元記事を表示

OTHERカテゴリの最新記事