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

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

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**に

元記事を表示

へっぽこが1週間でwebサービスを開発する #2 ドメインサーチ

![スクリーンショット 2020-10-04 22.31.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634341/8d20d39c-6cb0-27a3-9373-276d6aab5edc.png)

#ドメインサーチ
ドメインサーチは以下の機能を提供するサービスです。
[ドメインサーチ](https://searching.monster/)

* tld検索:対象のtldの提供有無と価格を検索できます。
* キーワード検索:対象ドメインが任意のキーワードでのランキングを検索できます。
* WHOIS検索:対象ドメインのWHOISドメインを検索できます。
* DNSレコード検索:対象ドメインのDNSレコードを検索できます。
* ドメイン年齢:対象ドメインの運用期間を検索できます。

#僕のスペック
・へっぽこエンジニア
・開発歴:3年
・個人開発歴:10ヶ月目(2020.01に今年は個人開発をやる!と決めた。)
・開発言語:python
・今回の開発でようやくvueを使ってみました!!
・ノ

元記事を表示

AWS lambdaを使ってニュースをスクレイピングし、更新分を定期的にLINEに通知してみる【python】

#はじめに
今回が初投稿になります。プログラミングを独学で勉強しはじめて半年強ほどの大学生ですが、学んだことを少しずつアウトプットしてみたいと考え、投稿させていただきます。
コードの書き方等雑であったり汚い点が多々あると思いますので、遠慮なく指摘していただいて構いません。
#目標・手順
タイトルにある通り、AWSのlambdaというツールを使って([Yahooニュースの記事](https://follow.yahoo.co.jp/themes/051839da5a7baa353480 “レアルマドリードに関連するニュース”))を定期的(6時間毎)にスクレイピングして、更新された記事について、[LINEmessagingAPI](https://developers.line.biz/ja/docs/messaging-api/getting-started/)を使って自分のLINEアカウントに通知することを目標とします。開発環境はlambdaとの連携を考慮し、cloud9を使います。

手順についてですが、
①PythonのBeautifulSoupモジュールを用いて[ニュースサイト]

元記事を表示

全Lambdaからコードをzipダウンロードしてきて、zipのままキーワード検索する

# これはなに?
全Lambdaからコードをzipダウンロードしてきて、zipのまま検索しました。

– ① 全Lambdaからコードをダウンロード
– ② zipのまま検索(zipgrep使用)

の2つの手順で行います。

## 利用ケース
リポジトリ管理していない直書Lambdaなどが大量に存在するカオスな検証アカウントで特定キーワードを含むLambdaがないか調査するときに使用。
カオスなアカウントが出来上がらないようにするのがいいとは思うのですが、古の闇に手を突っ込む機会に恵まれました。

# ① 全Lambdaからコードをダウンロード

**nemani/download_all_lambda_functions.sh**
https://gist.github.com/nemani/defdde356b6678352bcd4af69b7fe529

これを使います。

## 前提条件
・wgetが必要
・cliのアウトプットをtextにしておく
・bashつかわないとだめかも
・中でaws clilつかっているのでプロファイルなどは設定しておく

## 使用中
・”

元記事を表示

Lambda コンソールで使う AWS SDK を最新にする

# はじめに
Lambda を使って新しいサービスを使ってみたり、既存のサービスをちょっと試したいときに Lambda コンソールで実装をすることがあると思います。
しかし、Lambda コンソールで提供されている AWS SDK 実行環境は最新とは限らないため、そのままでは新しいサービスを使えないときがあります。ここでは、そのようなときに Lambda レイヤーをつかって Lambda コンソールの AWS SDK を最新にする方法を紹介します。

# 事前準備

作業の途中で Docker を利用するので作業環境には Docker をインストールしておいてください。

# Lambda 関数を用意する
現在と更新後の AWS SDK のバージョンを確認するために Lambda 関数を用意しておきます。

1. Lambda コンソールを開き、”関数の作成” をクリックします。
2. [関数名] に “`my-new-sdk-function“` 、[ランタイム] に “`Node.js 12.x“` と入力し、他はデフォルト設定で “関数の作成” をクリックします。
3.

元記事を表示

AWS Lambdaからツイートする

#はじめに
引き続き、退社情報自動通知機能を作っていきます。
前回の記事で、スマホからAWSに位置情報を送信することができました。
次は、AWS Lambdaを使って、Twitterと接続します。

#通知手段について
前提として、通知先は妻のiPhoneを想定しているので、特殊な設定はしたくありません。
簡単にAWSから第三者のスマホに通知するには以下の方法があげられます。
・LineBot
・TwitterBot
・メール
この中で、一番実装が早そうなTwitterを用いて、通知します。
(もっと簡単な方法があったら教えてください。)

#Twitter APIの利用登録
Botのように、プログラムを用いてツイートするためには、「Twitter API」の利用登録をする必要があります。
利用登録の前に、まだTwitterのアカウント登録をしていない方は、しておいてください。
なお、アカウントにメールアドレスも登録しておかないと、「Twitter API」の使用登録はできません。

下記サイトにアクセスし、TwitterAPIの利用登録を行います。
https://developer

元記事を表示

【AWS lambda】lambdaで各種ライブラリを含めてデプロイする(パスワード付きzipを生成し、s3にアップロードする) @ Python

#やりたいこと
タイトルそのまんまですが、lbxxx.soなどのライブラリを含めてデプロイし、AWS lambda上でパスワード付きのzipを生成し、S3のバケットに格納します。

#立ちふさがる壁
そんな私のやりたいことの前に壁が立ちふさがります。
1. **[zipfile](https://docs.python.org/ja/3/library/zipfile.html)(Pythonで標準で用意されているzipファイルの作成などを行うモジュール)では、パスワード付きzipファイルの暗号化がサポートされていない!**
2. **ローカルのソースコードをzipファイルに固めて、lambdaにデプロイしただけでは、パスワード付きzipを作成することができない!**

いかにして、この壁を乗り越えたのかをここに残したいと思います。

#環境
####ローカル開発環境
+ Win10(ホストOS)
+ Docker
+ Linux 10(DockerコンテナのOS)
+ VS Code
+ Python 3.8.6
+ pip 20.2.3
+ aws-cli 2.0.56

VS C

元記事を表示

GAデータでLambdaからRDSを更新する

##はじめに
概要:GAデータをRDSへ格納してSELECT結果をスプレッドシートへ反映する。

とりあえず考えた以下の3案で最も管理コストが低そうなものをチョイス
◯ APIGatewayでLambdaリクエストによるデータのやり取りを行う
 → エラー通知さえ作れば保守がラクそう。既存のアカウントで運用可。
× GCPアカウントを利用してスプレッドシートAPIをlambdaで使う
 → 持ってないアカウント管理が増えるからやだ。
× S3にデータを配置してputをトリガーにやり取り
 → S3のデータソースを使う必要性はない、IOが多い。

**データの流れ**
スプレッドシート ⇔ GAS ⇔ APIGateway ⇔ Lambda ⇔ RDS

**使うリソース**

– GAS
– GAアドオン
– APIGateway
– Lambda(Node.js)
– RDS(MySQL)
– Systems Managerのパラメータストア
– Key Management Service

##GAアドオンでレポートを取得
GA ⇨ スプレッドシート

1. [Google

元記事を表示

AWS Lambdaでmimetypesを使う際はtypes_mapを確認しよう(Python)

## 前提・環境
AWS Lambda Python環境

## 事象

AWS LambdaのPython環境で`.webp`を`guess_type`しようとしたところ。

“`python:
import mimetypes
print(mimetypes.guess_type(‘.webp’))
# none
“`

noneになってしまった。

“`python:
import mimetypes
print(mimetypes.types_map[‘.webp’])
# none
“`

types_mapにwebpが存在しないので、追加してあげて

“`python:
import mimetypes
mimetypes.add_type(‘image/webp’, ‘.webp’)
print(mimetypes.guess_type(‘.webp’))
# image/webp
“`

解決した。

## まとめ
mimetypesの辞書は環境依存なので、`guess_type`や`guess_extention`できないときは辞書に対象が存在するか確認す

元記事を表示

AWS LambdaをScala(Java 11)とGraalVMで

# はじめに

AWS Lambdaを標準で選択できるJava 11のランタイムで動かすと、コールドスタートの問題等があるので、メモリをかなり積んでスペックを上げないといけないですが、Lamdaは積んだメモリと実行時間でコストが算出されるため、実行時間にあまり差が出ない範囲で、メモリはできるだけ少なめに抑えたいところです。

標準で選択できるJava 11のランタイムではなく、GraalVMのnative imageを使ってカスタムランタイムを作成すると、少ないメモリで動かすことができ、コールドスタート時にも爆速起動が期待できます。

ただ、Scalaのバージョン、Javaのバージョン、GraalVMのバージョンの組み合わせにより、実行バイナリが作成できなかったり、作成できても実行時のエラーが解決できなかったり、AWSのライブラリが上手く使えなかったりと、一筋縄ではいかずに沼に嵌っていった経験をされた人も多いのでは。。

今回は、Scala 2.13.3、Java 11、GraalVM 20.1.0の組み合わせで、S3にアクセスし、引数で指定したバケット内のキーのリストを返すようなAW

元記事を表示

CloudWatchのダッシュボードをSlackに通知する

CloudWatch のダッシュボードって超イケてるですけど、見に行くの面倒くさいですよね。
というわけでSlackに定期的に通知するようにしました。

(公式でもっとイケてる手順があるなら知りたい)

## 全体像

Githubにあげてるので詳しくはそこ参照ください
https://github.com/takyam-git/cloudwatch-dashboard-notify-slack

## できること

こんな感じのをLambda経由でSlack通知できるようになります。

![Slack | develop | タノム 2020-10-13 21-48-51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3865/28ef9a78-6f8d-97cf-f30f-f3b00e184793.png)

## 内容

Lambda5千年ぶりくらいに書いたから、最近のプラクティスに添えてない可能性がすごいでかいですが、ポイントは以下

– CloudWatchの画面からsourceをコピペってく

元記事を表示

AWS LambdaでSlackに添付ファイルとして投稿(Python)

Amazon S3からファイルを取得してSlackに添付ファイルとして投稿するAWS Lambdaを作っていたが、AWS LambdaのPython環境にはrequestsモジュールが入っていなかったので苦戦した。

## 前提・環境
AWS Lambda Python環境

## やりたかった事
1. Amazon S3からファイルを取得する
2. ファイルをSlackの`files.upload` APIで添付ファイルとして投稿する(content typeはmultipart/form-dataを使う)

## できなかったこととその理由
Pythonでのファイルのアップロードは、
https://qiita.com/5zm/items/92cde9e043813e02eb68

https://www.it-swarm-ja.tech/ja/python/python%E3%81%A7%E3%83%AA%E3%82%AF%E3%82%A8%E3%82%B9%E3%83%88%E3%81%A8-multipart-formdata%E3%82%92%E9%80%81%E4%BF

元記事を表示

LambdaでLaravelを動作させようと思ったけど、少しコケたのでメモしとく

私はPHPerなのですが、最近、仕事関係でLambdaの話がちょくちょく出てきたので、ちょっと勉強がてら調査することに。

今更なのですが Lambda でPHPを動かせるようになっていたということに驚いた。

で、調べてみるとどうやらbrefというライブラリを使えば、簡単にLambda上でLaravelも動かせるらしい。
Bref – Serverless PHP made simple

わざわざ Lambda で PHPを使う必要があるのかと思うかもだけど、一緒にお仕事しているチームの構成を考えるとメンテナンスも含めてLaravelが使えるというのはとても助かるのです。

で、さくっと試してみようと思ったところデプロイで躓いちゃったので、メモ残しておきます。

## 環境

– Windows 10 Home
Docker Toolbox

元記事を表示

毎日定時に推し画像が送られてくるLINE Bot を作った

# はじめに
松岡茉優ファン(通称まゆらー)である僕が、
僕だけの僕だけによる僕だけのためのLINE Bot を作った。

ファンになって5年くらいになると、

→ツイッターのタイムラインで松岡茉優さん関連のツイートを探す
→松岡茉優さんの画像や動画を保存する

この作業に昔ほどの楽しみを覚えなくなり、かつ私自身も社会人になったりして、毎日ツイッターサーフィンする時間も無くなってきます。

**全部自動化しちゃおう!!**

ってことでその第一弾として、ツイッターで最近人気の画像・動画付きのツイートを検索、画像URL取得、LINE Bot を使って毎日定時に送信する!!!!

よかったら友達追加してください。

友だち追加

![L.png](https://qiita-image-store.s3.ap-northea

元記事を表示

AWS CloudWatchEventsの時間指定をCDKでラクにする。

CloudWatchEventsってUTCでしか動かないじゃないですか。
いつもそれを忘れて時間指定失敗するので、CDKでJST→UTCに変換することにしたんですよ。

# CDKでCloudWatchEventsを定義する

取り敢えずCloudWatchEventsの定義のとこだけ。
これをよしなにStepFunctionsとかと組み合わせるなり何なりする。

“`Python
# バッチスケジュールをJSTで定義する(cron式で * にする所は空でよい)
props[‘schedule’] = {
‘minute’: 40,
‘hour’: 9,
‘week_day’: ‘MON-FRI’
}

# JSTをUTCに変換する
if props[‘schedule’].get(‘hour’) is not None:
props[‘schedule’][‘hour’] = props[‘schedule’][‘hour’] – 9
if props[‘schedule’][‘hour’] < 0: props['sched

元記事を表示

OTHERカテゴリの最新記事