Lambda関連のことを調べてみた2022年12月22日

Lambda関連のことを調べてみた2022年12月22日
目次

業務でGraalVMとKotlinを使ってサーバレス開発やってみたのでちょっとハンズオンしてみる

# 3行で結論
JavaとかKotlinみたいなJVM系言語でLambdaを動かすと激遅。
でも、GraalVMを使えば爆速で動く。
案件としてリリースできそうまで持って行けたのでハンズオン書くよ

# サーバレス開発って何
この記事ではサーバレス開発を以下の様に定義します。

世の中のシステムはネットワーク構築とかサーバ運用とかのインフラが必須ですが、
AWSなどが提供するクラウドインフラのマネジメントサービスをつかうことで
**サーバを使わない**(=**サーバレスにする**)ことでインフラの運用管理のコストを下げたり、 **柔軟なスケーラビリティ**(拡張性)を実現する開発のことを**サーバレス開発**といいます。

– サーバレスに使える代表的な技術
– コード実行:AWS Lambda、GCP CloudFunction等
– データベース:AWS RDS、GCP CloudSQL等

# GraalVMとは

GraalVMは、Java仮想マシン(JVM)上で実行されるプログラム言語を統一的に実行するランタイムの1つで、AOTコンパイラでバイナリ出力が可能。

元記事を表示

[go] [terraform] lambdaのsource_code_hashが毎回更新される

# 前提
goのバージョンとterraformのバージョンは以下
今回の記事の対象は恐らくgo 1.18以降を使っている人
“`shell
go version
go version go1.19.2 darwin/arm64
terraform -v
Terraform v1.3.6
“`

# 今回の問題
terraformで以下のようなコードでlambdaのリソース管理をしていた
“`terraform
resource “aws_lambda_function” “go_function” {
filename = “go_function.zip”
function_name = “go_function”
handler = “main”
source_code_hash = filebase64sha256(“go_function.zip”)
runtime = “go1.x”
}
“`
`go_function.zip` はgithub actionsのworkflow内でbuild

元記事を表示

SREはトイルの削減にどう立ち向かうべきか?

# はじめに

Googleが提唱するSREプラクティスの一つにトイルの削減 [^toil] があります。*トイル (toil)* という言葉は日本語であまりなじみがありませんが、「苦労する・こつこつ働く」といった意味合いがあります。
SREにおけるトイルの定義は、原典とも言える書籍 [*SRE サイトリライアビリティエンジニアリング*](https://www.oreilly.co.jp/books/9784873117911/) 内で次のように定義されています。

> トイルとは、プロダクションサービスを動作させることに関係する作業で、手作業で繰り返し行われ、自動化することが可能であり、戦術的で長期的な価値を持たず、作業量がサービスの成長に比例するといった傾向を持つものです。

本記事では、システム運用におけるトイルの定義を再確認し、トイルを削減する上での実践的なノウハウの一例を紹介します。

# トイルの定義

*SRE サイトリライアビリティエンジニアリング* では、次の分類に1つ以上当てはまるような業務はトイルとなる性質が高いと紹介されています。

|分類|説明|具体例|
|

元記事を表示

Amazon EventBridgeを使ってEC2の状態変更(Stop)を検知しLambdaで自動起動を実行する。

## はじめに

[アイレット株式会社 22新卒 Advent Calendar 2022](URL “https://qiita.com/advent-calendar/2022/iret-22”)に投稿される22日目の記事になります。

https://qiita.com/advent-calendar/2022/iret-22

本記事は、Amazon EventBridge、Lambdaを使用しEC2の状態変更(Stop)を検知しLambdaで自動起動を実行するまでのハンズオンをまとめたものになります。
上記サービスに加え、IAMの概要を**簡単**に説明していきながら進めていきます。
また、AWS SOA試験ラボの対策にもなると思いますので、最後まで読んでいただけたら幸いです。

## 1. EC2インスタンスの起動
![スクリーンショット_2022-12-13_22_15_50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953955/21008ab9-9d36-d001-806a-d1

元記事を表示

AWS Lambda を ECR のコンテナイメージで動かすとき、:latest を指定して良いのか悪いのか

以下の状況のときに、Lambda 関数はいい感じに更新できるのかどうか不安になったので試してみたログ。

– CodeBuild で Lambda 用コンテナイメージをビルドして ECR に push する
– このとき ECR のコンテナイメージにはタグを付けず、 `latest` を更新し続ける
– ECR のコンテナイメージを Lambda で動かす

## 動かすサンプルアプリ
“` Dockerfile:Dockerfile
FROM public.ecr.aws/lambda/python:3.9

COPY main.py ${LAMBDA_TASK_ROOT}

CMD [“main.handler”]
“`

“` main.py
def handler(event, context):
return “foo”
“`

実行したら `foo` と返ってくるだけの Lambda 関数

## 事前準備
– `lambda-test` という名前の Lambda 関数を作っておく
– `lambda-test` という名前の ECR リポジトリを

元記事を表示

【AWS】Lambda関数でEC2の情報を取得する、ということ

# 初めに

閲覧いただきありがとうございます。

突然ですが、私は最近クラウド未経験からAWSシステム担当のエンジニアに転職を果たしました!

そんな私ですが、コスト削減として社内の研修環境の不要なEC2削除をするために
EC2の情報を取得するLambda関数を作成するお仕事をする機会がありました。
そこで、かなり沼った&あまりクリティカルな記事がネットになかったので備忘も兼ねて記事にしたいと思います。

最終的には結構複雑なことをするLambda関数を作成したいのですが、
段階的に、まずは**EC2の情報を単純に引っ張ってくるだけのLambda関数を作りたい**と思ったので
今回のゴールとしてはそれを実施し問題なく取得した情報を確認できることとしたいと思います。

ちなみに私のレベルは以下程度で、かなり初学者的な詰まり方をしているので、
その前提で温かく読んでいただければと思います。。
・AWS実務経験ほぼなし
・SAAは2022年10月取得済み
・VPCやLambdaの機能は机上で学習しているが、具体的な挙動をきちんと理解できていない

# 実施すること

やること自体は非常に

元記事を表示

【初心者向け】整形されていないログなどを活用できるようにするための簡単なログ検索基盤を作成してみる

こんにちは。こちらは[AWS for Games Advent Calendar 2022](https://qiita.com/advent-calendar/2022/aws-for-games) 21日目の記事です。

# はじめに
クライアントで開発中に出力されるログや様々な情報は一時的には使われますが、調査や分析などされる目的で出力されていないのでゲームサーバーなどで出力されるログに比べて活用されている機会はまだ少ないと思います。そのため、ログを出力していてもフォーマットが定まっていなことが多いと思います。もし活用するとなっても元のログを整形や加工を行なってデータベースに投入する必要があります。また、これらのログの管理はクライアントエンジニアが行なっていることが多く、分析や可視化をするまでのデータパイプラインなどの作成に慣れていない方が多いと思います。そこで今回は` 開発中にクライアントなどで出力される整形されていないログを検索できる`ようにしたいと思います。

# 今回作るもの
入力用S3に投入されたデータをLambdaで加工、整形し、出力用S3に出力し、最終的にAthe

元記事を表示

全員集合!必ず定刻に始まるオンラインミーティングサービス by TencentCloudビデオ通話SDK

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/77444/35212bcf-130f-dd6b-f8b6-861fe9f10f84.png)
TencentCloudビデオ通話SDKを使ってオンライン会議サービスをつくってみました。

# 解決したいこと
オンラインミーティングやオンライン飲み会って、時間どおりに人が集まらなくてなかなかスタートできない時ってありますよね?
定刻に始まらない理由は色々とあると思いますが、ミーティングのURLを探している間に時間が過ぎちゃった、とか、いつものことだらかどうせまだ始まらないだろう…とか、あっ・ミーティング忘れてた!というのもありがちだと思います。

## 解決方法
これを解決するために、TencentCloudを使用した「必ず定刻に始まるオンラインミーティングサービス」を作ってみました。
– ミーティングの開始時間になったら、端末にPushコール&ウェークアップ着信
強制的に呼び出しがかかるので、もう電話に出るしかありません。着信に応答する

元記事を表示

CDKのAPIGateway+Lambda構成をOpenAPIの定義から作成する

本記事は[NECソリューションイノベータAdventCalendar 2022](https://qiita.com/advent-calendar/2022/nec_solution_innovators)の12/19の記事です。

## どんな内容か

CDKにてAPIGateway+Lambdaの構成を作る際に、[RestApi](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_apigateway.RestApi.html)ではなくOpenAPI定義からAPIGatewayを作ることができる[SpecRestApi](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_apigateway.SpecRestApi.html)を使ってみたという内容になります。

今回のソースコードは[こちら](https://github.com/ststake/cdk-openapi-apigateway-lambda)においています。

## OpenA

元記事を表示

Lambda PowerToolsとCW Logs Insightsがいいぞ!

## はじめに

この記事は、[ミロゴス Advent Calendar 2022](https://qiita.com/advent-calendar/2022/milogos) 20日目の記事です。

Lambda のログを CloudWatch Logs で見ている。けれども、調査時にログの検索がし辛いと感じたり、そのログからとある値を集計したい要件があったりするかと思います。
このような場合に対して CW Logs には CW Logs Insights が 用意されています。

本記事では CW Logs Insights を使ったログ検索のクエリの一例を記載します。
また、CW Logs に 構造化ログの形で出力できるPython のライブラリ、aws-lambda-powertools を使うことで CW Logs Insights がどう便利になるのかを紹介します。

対象者としては下記のような方を対象としています。

– Lambda を使ってるが CW Logs の検索に辛さを感じている。
– CW Logs のログから抽出し集計をするスクリプトを作っている。

#

元記事を表示

lambdaにfontを適用する方法

フォントファイルと以下の設定ファイルをfontsフォルダに入れてzip

“`



/var/task/fonts/
/opt/fonts
/tmp/fonts-cache/


“`

これをlambda layerに登録したあと、使いたい関数にも追加してあげる。

最後にLambdaの環境変数に以下を追加
FONTCONFIG_PATH /opt/fonts

参考は以下。
https://medium.com/creditorwatch/aws-lambda-fonts-libfontconfig-5e837281a4ce

元記事を表示

リゾルバーがLambdaのAppSync(Query編)

# 概要
この記事では、リゾルバーにLambdaを設定したAppSyncのQueryパターンを紹介します。

# 前提
– DynamoDBにテーブルが用意されていること
– AppSyncのスキーマを作成済みであること

# Lambda
まず、AppSyncに紐づけるLambdaを作成します。
ここでは、DynamoDBのデータを取得するコードを使用します。

※ 本来、DynamoDBのデータを取得するだけであれば、マッピングテンプレートで完結します。
  詳しくは、[こちら](https://qiita.com/inoue-mn/items/e8134356c216ed4015d3)を参照ください。

“`python
import boto3
from boto3.dynamodb.conditions import Key, Attr

def lambda_handler(event, context):
id = event[‘id’]

dynamodb = boto3.resource(‘dynamodb’)
table = dyn

元記事を表示

AWSであれこれ試す

# AWSであれこれ試すための参考にしたこと

## URLからメモリに読み込む

https://qiita.com/Kanahiro/items/dd585599f36a77540439

https://atmarkit.itmedia.co.jp/ait/articles/1910/15/news018.html

## URLからメモリに読み込みS3に直接書き込む

いろいろ参考にした。CLI環境でリソースを読み込んで実施。
“`python
url_path = r’https://www.data.jma.go.jp/obd/stats/data/mdrr/snc_rct/alltable/snc00_rct.csv’
response = urllib.request.urlopen(url_path)
data = response.read()

s3 = boto3.resource(‘s3’)
bucket_name = ‘test-bucket’
object_key = ‘putdir/put.csv’

元記事を表示

Slackに「あとで読む」と書いたらリマインドしてくれるbotを作った

![image-20221218094732659.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201348/9343550b-a571-1e35-9b66-bf0bd025a875.png)

# 背景

私は仲間内だけのSlackワークスペースや自分のtimesに「あとでよむ」という言葉と一緒に記事のURLを貼るような使い方をすることがときどきあります。

![image-20221218085949273.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201348/671167d7-24b6-dd7f-2a89-6fb6ea76dda4.png)

「あとでよむ」といいつつもしばらくしたら忘れかねないのでリマインドしてくれるやつがほしいなーと思っていて、Slack botの勉強を兼ねて作ってみました。

# 作ったもの

「あとでよむ」などの特定のワードが入ったメッセージがあると起動します

(:eyes:

元記事を表示

API Gateway+Lambdaでパラメータを受け取ろうとしたがeventがnullだった話

## 概要
API GatewayからLambdaにパラメータを渡す方法を記載

## 困ったこと
Lambdaの方でクエリパラメータを使いたくて色々調べていて「event」から取れるよ!という記事が沢山あったがそもそもeventが空の状態になってしまっていて、積んでしまっていた。。。

## 解決方法
原因はAPI Gatewayの設定にあって、
メソッドを選択して
![スクリーンショット 2022-12-18 9.04.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83409/8c1f9464-7591-bb2b-aaf3-3745290a6a28.png)
右の画面にある「**統合リクエスト**」を選択すると
![スクリーンショット 2022-12-18 9.04.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83409/dc38c934-139c-14bb-001e-37e642f98e10.png)

元記事を表示

S3オブジェクトをトリガーにした zip展開するLambda構築ハンズオン

## はじめに
##### 先日他のアカウントから、自分の保有しているS3に対してzipファイルが送られてくる事案がありました。
##### どうせなら受け取った際に『zipを展開出来ないか?』とのことだったので、展開するためのLambdaを構築したので記事として残します。
————

## 構成図
![](https://cloud5.jp/wp-content/uploads/2022/12/スクリーンショット-2022-12-18-9.50.27-640×205.png)

————

## ハンズオン
### 構築の流れ
#### 1.S3作成
#### 2.Lambda作成
#### 3.EventBridge作成
##### 上記の順番で構築を行なっていきます。

##### 最終的には、今回作成したS3にzipファイルを保存すると、EventBridgeで検知して、展開Lambdaでzipファイルの展開を行います。
![](https://cloud5.jp/wp-content/uploads/2022/12/スクリーンショット-2022

元記事を表示

AWS Application Composerを使ってサーバーレスアプリを作ってみた

この記事は、[AWS LambdaとServerless Advent Calendar 2022](https://qiita.com/advent-calendar/2022/lambda) アドベントカレンダーの19日目の記事です。

## はじめに

皆さん、こんにちは。AWSのソリューションアーキテクトの福井です。今年もAWS re:Inventで数多くの新しいサービスとサービスのアップデートが発表されました。本記事では、今回新たに発表された [AWS Application Composer (Preview)](https://aws.amazon.com/jp/application-composer/)を使ってサーバーレスアプリケーションを構築してみましたので、紹介させて頂きます。

## AWS Application Composerとは

[AWS Application Composer](https://aws.amazon.com/jp/application-composer/) は、ビジュアルなエディターを使って様々なAWSのサービスを組み合わせて、サ

元記事を表示

リゾルバーがLambdaのAppSync(Mutation編)

# 概要
この記事では、リゾルバーにLambdaを設定したAppSyncのMutationパターンを紹介します。

# 前提
– DynamoDBにテーブルが用意されていること
– AppSyncのスキーマを作成済みであること

# Lambda
まず、AppSyncに紐づけるLambdaを作成します。
ここでは、DynamoDBのデータを更新するコードを使用します。

※ 本来、DynamoDBのデータを更新するだけであれば、マッピングテンプレートで完結します。
  詳しくは、[こちら](https://qiita.com/inoue-mn/private/6532c55c715f8024a2b4)を参照ください。

“`python
import boto3
from boto3.dynamodb.conditions import Key, Attr

def lambda_handler(event, context):
id = event[‘input’][‘id’]
favorite = event[‘input’][‘favorite’]

元記事を表示

AWSサーバーレス単体テスト実践ができた

## はじめに

[株式会社ACCESS Advent Calendar 2022](https://qiita.com/advent-calendar/2022/access) 17日目の記事です。

入社してから、基本的にはAWSでサーバーレス(APIGateway + Lambda)でのサーバー開発をしてきました。
最近AWS Lambdaとサーバーレス関連のテスト方法を調べていました。ようやく個人的に安心できる単体テスト・結合テストが実践できたと思っています。この辺りをまとめた記事になります。

## 背景

AWS Lambdaのhandlerのテストで、AWSサービス(例えばDynamoDB)との連携部分をモックして単体テストを実装していました。モックすることでhandlerの多くの部分はテストできていると思えていたのですが、モックした部分のコードがテストできていなくて大丈夫かなと思うようになりました。

テストが足りていなくて不安ならテストを追加すればいいので、参考資料のようなテストを書こうと思いましたが、

1. そもそも内容がわからなかった
2. コード例を見つけられ

元記事を表示

AWS SAM CLIを使わずにLambda+Ruby2.7でNokogiriなどのGemを使う方法

## 概要
Lambda+Rubyでgem(Nokogiri)を使おうと思ったところ
“`
cannot load such file — nokogiri/nokogiri
“`
というエラーになってしまい、使えなかったので使えるようにした話

## 前段
調べると、割と`AWS SAM CLI`を使った方法が出てきて手順自体は簡単なのですが何してるかわからん…というふうになってしまったので、今回はそちらを使わない方法にしたいと思います。

## 準備するもの
– Lambdaのソースファイル
– Docker環境

## 手順
### Lambdaで動かすソースコードの準備
自分の使っているコードが有る場合は

https://qiita.com/itaya/items/dbe628b7b8d896eb6c8f#%E6%97%A2%E5%AD%98%E3%81%AE%E9%96%A2%E6%95%B0%E3%81%AE%E3%82%A8%E3%82%AF%E3%82%B9%E3%83%9D%E3%83%BC%E3%83%88

この記事を参考にエクスポートしてもらうと良い

元記事を表示

OTHERカテゴリの最新記事