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

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

初心者がAWS Lambda + Python + LINE BotでWikipediaのタイトルをランダム送信

![iOS の画像 (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1786591/b12745f0-2aa1-8183-d66d-02fd13e659e3.png)
本記事は「[いのべこ 夏休みアドベントカレンダー 2021](https://qiita.com/jugemsan/items/6c8b7324b9390a557774)」の13日目の記事です。記事の掲載内容は私自身の見解であり、所属する組織を代表するものではありません(お約束)。

# はじめに
入社から1年半が経ったが、研修修了後から全くプログラミングを触らなくなってしまった。
さすがに危機感を感じた私はここで行動に移さなければという使命感から今回このような記事を書くことにした。

## プロフィール
* 社会人1年目
* プログラミング経験ほぼなし(研修でやったことはほぼ忘れた)
* 経営学士
* サッカーやってました(幼稚園~大学)
* 最近とろろが好きになってきた

## 技術経験
入社からアプリ開発はほぼなく、データベー

元記事を表示

[Java] AWS Lambda + API gateway + S3でjsonファイルをいじるだけ(1)

# やりたいこと
自分のS3バケット上にjsonファイルを作ったり、中身を書き換えたりできるapiをlambdaとapi gatewayつかって作る予定です!!言語はjava11です!!!
**といっても今回はlambda動かすところまで。**

s3とかapi gateway周りは次回(あるといいな)

# 環境
– windows 10
– java11
– gradle
– intelij idea community

# リージョンについて
僕の場合、lmabda、api gatewayはオハイオ(us-east-2)で作成しました。
場所は多分どこでもよいと思いますが、**両方とも揃えないと連携できない**気がします。
S3はリージョン指定できないので気にする必要ないです。

![Inkedスクリーンショット 2021-08-12 104325_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240124/84bea0f3-49cd-e8dd-59fd-6c8c86a452af.jpeg

元記事を表示

他で管理されているDynamoDBへの更新をAmplifyアプリでサブスクライブする

# 概要
他で(例えば他のAmplifyプロジェクトで)作成したDynamoDBのテーブルへのデータ挿入や変更などを、Amplifyアプリで検知してリアルタイムで利用する仕組みを構築するメモ。

同じAmplifyプロジェクト内で`@model`で作成したテーブルであればsubscriptionを定義してアプリから呼び出すだけで簡単にリアルタイムでデータを取得できるが、Amplifyプロジェクトの外で作成されたテーブルのデータ更新を検知することはできない(2021/08/11現在)。

なので、対象のDynamoDBテーブルのStreamをLambdaで受け取って、Lambdaに実装中のAmplifyプロジェクトのmutationを呼び出させて、そのmutationをsubscribeすることでAmplifyアプリで変更を受け取る、ということをする。

![Untitled Diagram (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138322/cf9ffe06-9bed-13eb-cc83

元記事を表示

AWS ChatbotでSlackからLambda関数(Go)を呼び出す 

## はじめに
CICDの一環でGoのLambdaをSlackから呼び出す仕組みを構築したのでその備忘録を残す。
(Goは初見だったので少しGoを触った所も書き残した。)

## Goを使ってみる
### install
https://golang.org/doc/install からDowloadしてくる。
`go version`でGoのバージョンが表示されればOK。

“`
C:\Users\user>go version
go version go1.16.7 windows/amd64
“`

### hello world
[はじめてのGo](https://github.com/yuta-katayama-23/Go/commit/a24dbd81df6ebc32e0bb739b9b50a54f7c91e136)

“`golang:hello
package main

import “fmt”

func main() {
fmt.Println(“Hello, World!”)
}
“`

実行結果は以下のようになる。
CIでGoを動かすのに使った

元記事を表示

DjangoをLambdaで動かそうと思ったけどやっぱり向かないと思った話

# はじめに
DjangoでWebアプリを作成した際に、サーバーを借りると高くつくので、何とかLambdaに乗っけて実行課金にできないかと試した記録です。
結論から言うと上手くいかなかったのですが、何か役立つかもしれないので書き残しておきます。

# DjangoをLambdaで動かすまでの手順
以下のサイトを参考に実施しました。相違点としては、以下のサイトではMySQLにて動かしていますが、私はSQLiteにて試しています。(ただし、うまくいきませんでした。)

https://qiita.com/umihico/items/4534e1f84e8de5a62db5

# 問題点

### Werkzeugが最新バージョンだと動かない
Python用のWSGIユーティリティライブラリであるWerkzeugを、最新バージョンにしていると動かないです。
requirements.txtにて、バージョンを指定してあげる必要があります。

“`plaintext:requirements.txt
Django
Werkzeug==1.0.1
“`

### Pythonが最新バージョンだ

元記事を表示

AWS Step Functions 調査メモ

## はじめに

AWS Step Functions の調査メモ。深堀りはせず概要を把握することが目標です。

## Step Functions で Lambda 実行

Step FunctionsでCloudWatch logsにログを書き込むLambdaを実行します。

以下はログを書き込むLambda(Python3.8)です。
Lambda実行時に受け取ったJSONデータをログに記録します。
また、return で受け取ったJSONデータを返しています。

“`python:test001
import json

def lambda_handler(event, context):
print(“test desu {0}”.format(event) )
return (event)
“`

– 必要なIAMロールは、CluodWatch Logs の以下3つ
– CreateLogGroup
– CreateLogStream
– PutLogEvents

作成したStepFunctionsのjsonコードです。

元記事を表示

AWSのLambdaを使ってS3間のファイルコピーを試してみた。

## はじめに
普段何かお試しで作りたい時は、主にGCPにVMインスタンスを立てて、そこで色々といじってみる事が多かったため、本格的に色々なクラウドサービスを試したことはなく、AWSもほとんど使ったことがなかった。
周りではクラウドと言えば **”AWS”** の選択肢が多い気がするので、基本的なサービスくらいは多少はいじれた方が良いかと思い、今回は触りながら、調べながら学んだことをメモとして残しておく。

## 前提
そもそもから勘違いをしていた部分なのだが、まずAWSアカウントを作成した場合、各リージョンにそれぞれデフォルトでVPCができるのだが、このVPCの中に色々なサービスを作成(追加)していく様なものかと想像していた。
しかし、実際には以下の様なイメージで、VPCに属させるサービスの方が少ないのではないかと思っている。
![Qiita-no049_img01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654767/220242cc-125f-8858-b642-b27434439f0b.

元記事を表示

AWS Toolkitの使用例(AWS Lambdaのリモート実行)

# AWS が提供するAWS Toolkitを使い AWS Lambda Python を実行してみる
– この記事でやることは、
– VSCodeを使いAWS Lambda の hello-lamdaをローカルから実行する(ローカルからリモート実行)
– VSCode上でソース編集してAWSクラウドにアップロードする(Lambda関数をデプロイする)
– `sam local invoke` 等の sam コマンドは利用しない
– 簡単なLambda作って、EC2インスタンス再起動する、CloudWatchLogsからlambda実行、みたいなインフラスクリプト相当を手軽に実行するくらいの用途です
– API Gateway等で実行するLambdaは`serverless framework`や`sam`や`cdk`を使う方が良いです
– 間違って別のLambdaを編集してしまうこともあったり、消してしまうこともあるので開発用です。ソースはGit等で管理しておきましょう。
– JetBrainsのPyCharmやWebSotrmでLamdba関数作成で利用した

元記事を表示

Golang + Lambdaでサーバレス開発時にWarning「Support for “package.include” and “package.exclude” will be removed with next major release.」が出た時の対応

# 背景

Golang + Lambdaでサーバレス開発中に`sls invoke -f 関数名`を実行すると、以下のWarningが発生しました。

“`
Serverless: Deprecation warnings:

Support for “package.include” and “package.exclude” will be removed with next major release. Please use “package.patterns” instead
More Info: https://www.serverless.com/framework/docs/deprecations/#NEW_PACKAGE_PATTERNS
“`

# 対処法
`serverless.yml`を以下のように書き直せばOKです。

“`serverless.yml
package:
exclude:
– ./**
include:
– ./bin/**
“`

“`serverless.yml
package:
patterns:

元記事を表示

TerraformでRDSのパスワードローテーションのコードを作成する

# はじめに
検索してもあまり良い記事を見つけることができなかったため、自分で色々試して成功したことを記載します。

## VPC、サブネット、RDS
VPC、サブネット、RDSは検索すればたくさん出てくるので、既に作成済みを前提として記載します。
VPCのCIDRは**”10.0.0.0/16″**としております。
今回RDSは**Aurora PostgreSQL**を使用し、**プライベートサブネット**に配置します。
RDSのセキュリティグループは**PostgreSQLのポート(5432)に同VPC内(10.0.0.0/16)からのアクセスのみ許可**しております。

## パスワードローテーションの仕組み
AWS Secrets Managerに認証情報を保持し、Lambdaを使って定期的にパスワードを更新します。
https://docs.aws.amazon.com/ja_jp/secretsmanager/latest/userguide/enable-rotation-rds.html

コンソールだと上記ドキュメント記載通りにすれば簡単に設定可能なのですが、これを

元記事を表示

徹底解説!Java8特性

皆さん、こんにちは!

最近、仕事を探しています。java エンジンニアとして面接をうける際に、よくjava8の特性の問題を質問されました。
だから、本記事はjava8の特性を中心としてまとめてご解説いたします。

### 一、ラムダ式
この前のjavaバージョンでリストをソートするために、下記のように実装すべきである。

“`java
List myList= Arrays.asList(“tom”, “jack”, “smith”, “allen”);
Collections.sort(myList, new Comparator() {
@Override
public int compare(String a, String b) {
return b.compareTo(a);
}
});
“`
だが、java8の特性(lambda式)を用いたら、下記のlambda式で簡単に実装できる。

“`java
Collections.sort(names, (a, b) -> b.compareTo(a));
“`

上記のlam

元記事を表示

ServerlessFrameworkを利用したLambdaでデバッグを実施する。

###記事作成に当たって
最近、Serverless Frameworkを利用してLambdaにNode.jsをデプロイしている。Serverless Frameworkはテンプレートも充実してるし、CI/CDの面でも優れているのでなかなか便利。だけど、デバッグのやり方がわからなくて困っていた。どうにか、簡単にデバッグをできないかなぁと思って、試行錯誤する中でデバッグ環境ができあがったので、記事にして共有します。

###構築時の環境情報
端末:Mac
エディタ:VsCode
node:v14.17.4(versionが古いと)
npm:7.20.5

###パッケージの環境構築

“`:packageのインストール
~/develop/study/serverless $ serverless create -t aws-nodejs-typescript -n debug_lambda -p debug_lambda
Serverless: Generating boilerplate…
Serverless: Generating boilerplate in “/User

元記事を表示

Lamda上のmatplotlibで日本語対応する

  Lambda上でmatplotlibを使ってグラフを作成したいとき、Lambdaには日本語フォントが含まれていないため日本語が豆腐になってしまいます。この記事では、日本語対応するための方法について説明します。

## 前提
matplotlibは別途利用できるようにレイヤーなどで用意する必要があります。

## やり方

1. Lambdaレイヤーに日本語フォント用のレイヤーを登録
2. Lambda関数に日本語フォント用のレイヤーを追加
3. matplotlibでフォント読み込み

## 1.Lambdaレイヤーに日本語フォント用のレイヤーを作成

 日本語フォントなら基本的に何でもOKと思いますが、今回は[IPAexゴシック](https://moji.or.jp/ipafont/ipaex00401/)(ipaexg.ttf)をダウンロードして使いました。
 ダウンロードしたttfファイルを適宜ディレクトリ(例えばfontsなど)に入れてzip圧縮します。
 Lambdaのレイヤーページから「レイヤーの作成」にて作成画面に移動し、アップロードにて先程圧縮したzipファイ

元記事を表示

Serverless Frameworkを使ったLambda開発

以前に[AWS SAMを使ったLambda開発](https://qiita.com/nakahara-d/items/1b861ea61dbbffaf90b8)をしてみましたが、今回はAWS SAMと比較しつつ、Serverless Frameworkを使ったLambda開発を試してみます!

# Serverless Frameworkとは

[Serverless Framework](https://www.serverless.com/)はAWS、Azure、GCPなどマルチクラウドに対応したサーバーレスアプリケーション開発フレームワークです。

オープンソース版とPro版があり、Pro版ではCI/CDやモニタリングの機能が使えますが、今回はオープンソース版を試してみます。

# 準備

## Serverless Frameworkのインストール

Serverless Frameworkをインストールします。
スタンドアロンバイナリとnpmでインストールできるようですが、今回はnpmでインストール。
後述するプラグインでもnpmを使ったりするので、Node.jsの環境は用

元記事を表示

SAMの”実行”ロールに必要なIAMポリシー

# 背景
Github ActionsからSAMを実行するためにIAMを作成しようと思ったが、
最小限のポリシーにするうえで、情報がググってもなかなか出てこなかったので記事化。
(LambdaへのIAMロール付与の記事ばかりが出てくる。。。。)

# 最小限ポリシー

公式の記事があった。
(”Permission” でググるのが正解だったかも。)
https://docs.aws.amazon.com/ja_jp/serverless-application-model/latest/developerguide/sam-permissions.html

そちらに運用上+αして以下に。

* `AutoPublishAlias` に必要だったもの
* “lambda:ListVersionsByFunction”
* “lambda:PublishVersion”
* “lambda:UpdateAlias”
* Layerの更新に必要だったもの
* “lambda:PublishLayerVersion”

“`
{
“Version”:

元記事を表示

GitLFS用のLambdaの.NETCoreをアップデートする

# S3 の GitLFS サーバ の Lambda関数 の .NETcore をアップデートする

## 経緯

AWS の Lambda にて .NETcore2.1 のサポートが 2021/09/20 で終了するとの通知が来たので、
[以前構築したGitLFSサーバのLambda関数](https://qiita.com/c0ba1t_coke/items/94ed3a62ab34078a1f92)をアップデートすることに

– CloudFormationの変更セットを使って、Lambda関数だけアップデートできるか検証する

## 手順

### ファイル準備

新しいyamlファイルと鍵Zipファイルをアップする

“`yaml
SigningLambda:
Type: AWS::Lambda::Function
Properties:
Code:
S3Bucket: !Sub ‘gitlfs-test’
S3Key: Estranged.Lfs.Hosting.Lambda.zip

元記事を表示

直近7日間のAWS利用料金をグラフ化してS3に保存する

# アーキテクチャ
以下のアーキテクチャでAWS利用料金をグラフ化してSlack通知させてみます。

![arch.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59081/91a0fb55-56a5-397c-129e-5436f4712364.png)

# Lambdaを使ってAWSの料金を取得する
AWSの利用料金はCostExplorerの [get_cost_and_usage()](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ce.html#CostExplorer.Client.get_cost_and_usage) を叩くことで取得することができます。グラフ化するにはpandasとmatplotlibを使います。このときにpandasとmatplotlibはLambdaのレイヤーとして追加します。
ソースコード内の**ファイルアップロード先であるS3バケット名は適宜変更してください

元記事を表示

【AWS】Lambda+SQSでサイロ + プールモデルを実現するためのディスパッチャ構成検討

## きっかけ
– 弊社が過去に開発し、現在も引き続き運用、追加開発をしているクライアントのSaaSがあり、:man_tone1: “特定のユーザが大量にリクエストしたときに他ユーザのリクエスト実行まで時間がかかるので、解消したい”とのリクエストをもらったから。

## 現状分析
– リクエスト受信部分はREST APIで構成、他ユーザのリクエストに処理時間は依存しない
– 実処理部分はリクエスト受信部分と非同期で処理を行っており、実処理が順次実行のため、この部分がボトルネック
– 以下サイトで分類されている分離パターンでは現状は、1. サイロモデル

https://aws.amazon.com/jp/builders-flash/202105/tenant-isolation/

– 特定処理、特定ユーザだけ分離できればいいので、3.サイロ + プールモデルを目指したい

## 検証で目指す構成
– リクエストを受けるSQS→各リクエストを割り当てるDispatcher用Lambda→特定ユーザ用SQS,汎用ユーザ用SQSとそれぞれ実処理Lambdaをつなげる(本記事では実処理L

元記事を表示

Lambda + DenoでClean Architectureを使ってみる〜構成編〜

前回、LambdaでDenoを動かしてみたところ、思ったよりも悪くなく、正式導入を検討する余地があったため、巷で人気(?)のクリーンアーキテクチャで構成してみました。

独自アーキテクチャでの導入も検討しましたが、せっかくなので…

## 成果物

https://github.com/yamachita0109/lambda_deno_clean_architecture

## クリーンアーキテクチャ

![68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f3239333336382f66396633646565302d386561382d386363392d326639622d

元記事を表示

【AWS】S3を利用した Git LFS サーバを作成する【cli版】

# S3をLFSサーバにしてCodeCommitでGitLFSを使えるようにする

## 目標

– gitlfsの基本を学ぶ

– [Amazon S3 に Git LFS サーバを超簡単に立てる](https://qiita.com/kanemu/items/d66bfd174a011d8dffdf)のcli版を作る

## 環境

– AWSアカウント所有済み
– IAMを自由に操れる権限を持っている

## 手順

### AWS-CLI の設定

– codecommit の権限があるIAMユーザのクレデンシャルを登録する

“`
$ aws configure
“`

– 認証情報ヘルパーを設定する

“`
$ git config –global credential.helper ‘!aws codecommit credential-helper $@’
$ git config –global credential.UseHttpPath true

$ cat .gitconfig

[credential]
helper = !

元記事を表示

OTHERカテゴリの最新記事