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

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

Amazon Step FunctionsのWorkflow StudioでParallel, Map, Choise状態の入出力を見る

# はじめに
 本記事では、Amazon Step FunctionsのWorkflow StudioでParallel, Map, Choise状態を含むステートマシンを作成し、その入出力を見ていきます。Step Functionsでは、Parallelで静的並列処理、Mapで動的並列処理を実現することができます。

 本記事の特徴は以下です。

* Workflow Studioを使ってグラフィカルに作る
* Parallel, Map, Choise状態とLambda関数を使用
* 実践的な処理というよりは、入出力を明確にするテスト的な処理を作る
* LambdaでPythonを使用しますが、簡単すぎるコードしかないため未経験者でも問題ありません

 以下の内容は含まれません。

* ASL(次節で説明)を使って作る方法

# Step Functionsとは?
 サーバレスオーケストレーションサービスと [公式][1] では言われています。分かり易く言い換えると、サーバレスなAWSサービス(主に [AWS Lambda][2] )をつなげて1つのワークフローを作成できるサービス

元記事を表示

CloudFrontのキャッシュを削除するコンソール画面の作成

#はじめに
Cloudfrontのキャッシュ削除は、AWSコンソールから操作しますが、チームで開発時やお客さんに納品後、お客さん側でキャッシュ削除する場合、キャッシュ削除するためだけにIAMユーザーを作成するのは手間だったり不都合があったため、S3に配置したhtmlでEC2を操作できる仕組みを作成しました。
ただし、メンバー以外に操作されないよう、S3にはCloudfront OAI、CloudFrontとApiGatewayにはBasic認証をかけてます。

#構成図
![スクリーンショット 2021-11-03 23.43.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/988747/7befb5e6-1a3c-d94c-0048-988776e47d3a.png)

CloudFrontのキャッシュ削除のコンソール画面用のhtmlをS3に配置して、CloudFrontで配信し、S3からアクセスできないよう制限します。

#完成ページ

![スクリーンショット 2021-11-03 23.21

元記事を表示

アプリケーションのログをCloudWatch経由で通知してみた

前回に引き続き社内システムのお話です。

社内システムをAWSのCloudWatchに集約していますが、プロジェクト内でChatWorkを利用しているため、
チャットグループを作成し、通知するということをしてみましたので紹介します。
※ちなみに今回は一部AWSの方にもサポートいただきました

#目次
[1.今回の構成について](#今回の構成について)
[2.AWS Systems Managerのパラメータストアで設定ファイルを準備する](#aws-systems-managerのパラメータストアで設定ファイルを準備する)
[3.AWS Systems ManagerのAmazonCloudWatch-ManageAgentを実行する](#aws-systems-managerのamazoncloudwatch-manageagentを実行する)
[4.Lambda経由でメール及びChatWorkへ通知する](#lambda経由でメール及びchatworkへ通知する)
[5.詰まった点](#詰まった点)
[6.まとめ](#まとめ)
[7.参考URL](#参考url)

## 今回の構成

元記事を表示

Github Actions(IAMロール認証)を使ったLambdaへのデプロイ

#  はじめに
これまでGit ActionsでAWSサービスと連携する場合は、アクセスキーとシークレットキーといったクレデンシャル情報を使っていたが、IAMロール認証で行えるようになったとのこと。

https://dev.classmethod.jp/articles/github-actions-without-permanent-credential/

ということで、IAMロール認証を用いたGithub ActionsのLambda関数デプロイの方法をまとめてみた。

# IAMロールの作成
– 最初に認証に必要なIAMロールの作成を行う。
– 下記のように進めていく。

## IAMポリシーの作成

– IAMポリシーを作成。

“`json
{
“Version”: “2012-10-17”,
“Statement”: [
{
“Effect”: “Allow”,
“Action”: [
“s3:PutObject”,
“ia

元記事を表示

AWS LambdaにPythonサードパーティ製ライブラリを入れる

# はじめに

AWS Lambda はサーバレスでイベント駆動型のコンピューティングサービスであり、非常に手軽に使えるサービスとなっている。Amazon S3 のような AWS の他サービスから Lambda をトリガーすることもでき、使い勝手が良いのだがサードパーティ製ライブラリを扱う際にはひと手間かかってしまう。そこで本記事では、Python のサードパーティ製ライブラリを Lambda で扱うための方法を紹介する。[How to use external libraries in Lambda Function](https://wakeupcoders.medium.com/how-to-use-external-libraries-in-lambda-function-df1cee4a7c3a)、[Managing external libraries in AWS lambda functions](https://dev.to/alim1496/managing-external-libraries-in-aws-lambda-functions-1g0m) を参考にし

元記事を表示

AWS Lambda を使って雨の日を通知する Twitter bot を作る

# つくったもの

もしよければ使ってやってください:bow_tone1:
傘いるで bot(東京)[@kasairu_tokyo](https://twitter.com/kasairu_tokyo)
傘いるで bot(大阪)[@kasairu_osaka](https://twitter.com/kasairu_osaka)

1. 毎朝午前 6 時にお天気情報を取得
1. 雨が降る場合はツイート(降らない日は無言)

元記事を表示

Lambda(SAM)からAWS SQS(LocalStack) へメッセージ送信/受信を行う方法 メモ

* LocalStack上で動くAWS SQSのキューに対してAWS SAM CLIで動くLambdaからメッセージ送受信を行う方法をメモする。

## 構成

![sam-sqs.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/586535/862d727c-e543-8b0d-7c15-193655e62a39.png)

## LocalStack準備

* `docker-compose.yml`

“`yaml
version: “3.8”
networks:
container-link:
name: docker.internal
services:
localstack:
container_name: “${LOCALSTACK_DOCKER_NAME-localstack_main}”
image: localstack/localstack
ports:
– “127.0.0.1:53

元記事を表示

LambdaからRDSへ接続してみる

#ご挨拶
タイトルの通りLambdaからRDSへ接続してみたので記事を書いていきます。
最近業務でLambdaを使用することが増えてきたので勉強になればと思いやってみました。
#やること
LambdaでプライベートサブネットにあるRDS MySQLに向けてSQLを実行して実行結果を確認します。
今回RDSの作成はCloudFormationを使用しています。
事前にプライベートサブネットを二つ作成しています。
以下の手順で進んでいきます。

1. Lambda関数の作成
2. IAMロールの編集
3. RDSの作成
4. LambdaをRDSに接続できるように設定
5. テスト実行

###構成図
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/612471/080a41ab-852d-2f12-2066-cf1b11abea77.png)

#参考にしたサイト
[チュートリアル: Amazon VPC の Amazon RDS にアクセスする Lambda 関数の設定](https://

元記事を表示

pythonのlambda関数についてまとめてみた

今回のお題

今回は、pythonのlambda関数について取り上げます。

例によって自分用のメモです。

目次

– lambda関数概要
– 基本的な使い方
– 引数の渡し方のパターン

lambda関数概要

まずは、lambda関数とはそもそも何ぞやという話から始めます。

一旦は能書きから入りますが、イメージが湧かなければ一度飛ばした後に次項の具体例をみた上で戻ってきていただいても構いません。

ざっくりと言うと、lambda関数とは名前をつけずに定義できる関数のことを言います。

JavaScriptの無名関数に近いですね。

欠点としては、名前がつかないので複数回使いまわせない、それからpythonの場合は1行でしか書けずif文なども使えない、などがあります。

しかし一度別の箇所で定義したものを呼び出して、と言う手間を省けるので一度しか使わない関数を扱う場合にはコードがスッキリしますし、とりわけ関数の戻り値を別の関数の引数として使いたい場合には大変重宝します。

では、基本的な使い方を見ていきましょう。

基本的な使い方

“`python
# 公式
l

元記事を表示

Step Functionsを使ってStorage Transfer Serviceの転送ジョブを管理する

# 概要
https://qiita.com/okadarhi/items/5ff734c6472b83d51597 の続き。
AWS側で転送元のデータを作成するが、作成処理が完全に完了してから転送ジョブを実行して欲しいという要望があり、スケジュール実行ではなく、AWS側から手動で転送ジョブを実行する方法を検討した。
転送ジョブを実行するAPIがあるのだが、それは実行しかしてくれず、転送ジョブの成否は別のAPIで確認する必要があった。
実行するAPI: https://cloud.google.com/storage-transfer/docs/reference/rest/v1/transferJobs/run
確認するAPI: https://cloud.google.com/storage-transfer/docs/reference/rest/v1/transferOperations/get
なので、転送ジョブの実行と確認を管理するジョブを作成しようと思い、Step Functionsを採用することにした。
その時行った検証作業を備忘録としてまとめる。

# 手順
## L

元記事を表示

【AWS Lambda】 Lambdaで初めて環境変数を使ってみたのでその紹介とSAMでの使い方

#1. はじめに
 私はlambdaを使用する際、環境毎にlambdaを作成しテスト環境ではこの関数、本番環境ではこの関数を使う、ってことをよくやっていました。そうなってくると、本番環境ではこのDBを参照、テスト環境ではこのDBを参照といったことをやりたくなってきます。私は aws-sam-cli を用いてlambdaの管理を行っているのですが、環境毎にコードの中身を書き換えることがうまくできていませんでした。
 しかし! 今回紹介する環境変数というlmandaの機能を使用してみたところ抱えていた問題が解決したため、せっかくなんで紹介します。

#2. lambda環境変数とは
 環境変数とは何でしょうか。[公式ドキュメント](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/configuration-envvars.html)には以下のように記述されています。

>環境変数を使用すると、コードを更新せずに関数の動作を調整できます。環境変数は、関数のバージョン固有の設定に保存される文字列のペアです。Lambda ランタイムは、環境変

元記事を表示

Lambdaオーソライザで任意のエラーレスポンスを返却する

Lambdaオーソライザで認証結果に応じて
任意のステータスコードやエラーメッセージを返却する方法です。

## 返却可能なステータスコード
ステータスコード 200, 401, 403, 500 を返却することが可能です。

ステータスコードですが通常のLambdaのように直接ステータスコードを
返却することは出来ません。以下の方法でステータスコードを制御します。
・Allow IAMポリシーを返却 → 200 OK レスポンスが返却される。
・Deny IAMポリシーを返却 → 403 Forbidden レスポンスが返却される。
・’unauthorized’トークンを返却 → 401 Unauthorized レスポンスが返却される。
・上記以外のトークンを返却 → 500 Invalid token レスポンスが返却される。

## エラーメッセージのカスタマイズ

403レスポンス返却時は、contextを利用することで対応が可能。
DenyのIAMポリシーの中で設定したcontextオブジェクトの情報は、
ゲートウェイレスポンスにてアクセスすることが可能です。

(例)

元記事を表示

Terraform + SAM で苦労した話

## はじめに

以下のブログを参考に SAM を Terraform に組み込んでみたところ、

色々苦労することになったので備忘録を残します

https://blog.youyo.io/posts/terraform-aws-sam/

## 実行環境

– Terraform: 1.0.6
– Terraform providers:
– aws: 3.58.0
– local: 2.1.0
– null: 3.1.0
– SAM: 1.24.1

## 背景

AWS Lambda のデプロイに昔は apex を使っていましたが、メンテナンスされなくなってしまいました

https://github.com/apex/apex

昔は他に便利なツールもなかったため、
Docker コンテナで依存ライブラリをインストールしてから圧縮するスクリプトを自前で組みました

それを Terraform から呼んで関数毎にビルド・デプロイする方法です

自前実装で長く運用してきたものの、
やはり Lambda 周りが無駄に複雑になってしまっているため、
公式の Lambda

元記事を表示

LocalStack とSAM CLIを用いたローカルLambda +DynamoDB API 作成方法メモ

* LocalStackとSAM CLIを用いたローカルLambda + DynamoDB APIの作成方法についてメモする。
* POSTメソッドでリクエストボディに指定した値をDynamoDBテーブル検索して返却する。

## 構成

![sam+dynamo.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/586535/5c881d46-febb-81c6-196c-36d81970d5d9.png)

## LocalStack 準備

* [こちら](https://qiita.com/KWS_0901/items/f9579d9c360cf42dc97d)の手順でDocker LocalStack環境を準備しておく。

## Dynamo DB 準備

* テーブル(`sample-table`)作成

“`shell
aws dynamodb create-table –table-name sample-table –attribute-definitions Attr

元記事を表示

AWS Lambda+Seleniumでスクレイピングする話

# 導入

業務の一環で実行しているスクレイピング。
python + seleniumでツールを作って定時に社内サーバーから自動実行していた。

ある日、設定していた社内サーバーが計画停止。
とりあえずは自分の環境で手動実行してデータは取得したけれど・・・

「技術として汎用性もあるし、これを機にAWS Lambdaへ移動や!」

ということでやってみたのが今回のお話。

# 前提

* 実行環境:AWS Lambda
* 設定環境1:Windows10
* 設定環境2:debian10(権限設定用リモート環境・WSL2とかでもいけるかも)
* 言語:python3.7
* 追加パッケージ:selenium

# コード

AWS Lambdaに配置したソースコードがこちら。

サンプルとしてYahooのプロ野球の順位表から、セ・リーグの順位を抜き出してみた。

https://baseball.yahoo.co.jp/npb/standings/

“` lambda_function.py
from selenium import webdriver
from sele

元記事を表示

Lambda (SAM CLI) + MySQL(docker-compose)を利用した REST API作成方法メモ

* ローカル環境でLambda(SAM) + MySQL(docker-compose)を利用したAPIを作成する方法についてメモする。

## AWS SAM(Serverless Application Model)

* サーバーレスアプリのデプロイに特化したCloudFormationの拡張機能。
* YAMLもしくはJSONでリソース定義する。

### SAM CLI

* SAMを利用した開発サポートツール
* サーバーレスアプリのひな形作成、ビルド、AWSへのデプロイができる。
* 開発者のローカル環境でLambdaをDockerコンテナ起動できる。

## 構成

![sam.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/586535/28ba6b48-16b7-3127-3657-9604cc31e631.png)

## 準備

* SAM CLIインストール

“`shell
brew tap aws/tap
brew install aws-sam-cli

元記事を表示

CloudWatchのアラートをSNS経由でLambdaを実行し、Slack通知

#はじめに
今回はメモ書き程度になります。
題名の通り、構築していきます。

`Webhook URL`をKMSで暗号化する場合は、下記の記事通りにできます。
[【AWS】CloudWatchアラーム通知をLambdaでSlack投稿する](https://www.geekfeed.co.jp/geekblog/aws_cloudwatch_to_slack/)

ただ、KMSはお金がかかりますし、それほどセキュリティー対策が必要なければ、Lambdaの環境変数に、`Webhook URL`を設定します。

その場合のコードのみ参考記事とは異なりますので、コードを記載しておきます。
また、参考記事の①KMSを作成、②IAMを作成は不要です。

#コード
環境変数
`slackChannel`:`slackのチャンネル名`
`hookUrl `:`Webhook URL`

“`python
import boto3
import json
import logging
import os

from base64 import b64decode
from urllib.reques

元記事を表示

【AWS】ElasticTranscoderで動画変換する仕組みを構築する

## はじめに
今回、弊社運動通信社で開発しているスポーツブルアプリの中のスーパープレイ動画機能の裏側について少しご紹介させていただきます。
スーパープレイ動画機能とは様々な競技のスーパープレイの部分を切り取った縦型の動画集をスワイプしながらザッピング感覚で閲覧できるものです。

↓動画は以下のように縦型フルスクリーンで閲覧できます。
![tatefuluのコピー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144550/a8d702b9-f20b-328a-ce02-4bf45c08d7bd.png)

ザッピング感覚で閲覧できるようにする上で通信環境の考慮が必要となってきます。
通信環境によって読み込み時間が長いと体験が損なわれてしまうため、通信環境に応じた複数ビットレートの動画を用意し、その点を解決しました。
具体的にはAWSのElasticTranscoderを使ってその仕組みを構築してみましたので、事例としてご紹介したいと思います。

## 構成イメージ
ざっくりした構成と処理の流れはこ

元記事を表示

APIGatewayとStepFunctionを使い、EC2の起動から停止時間までを自在に操る

#はじめに
「EC2を起動し、特定の時間経過後、EC2を停止する」仕組みをAPIGatewayとStepFunctionを使い、実現します。

#完成図
`https://xxxxx.execute-api.ap-northeast-1.amazonaws.com/prod/start-limit?instance_id=i-hogehoge&time=10`をリクエストすると、インスタンスIDが`i-hogehoge`のEC2を起動し、`10`秒後に停止する挙動になります。

**挙動の詳細について説明しますと、**
起動するインスタンス`instance_id`で指定し、と起動してから停止するまでの時間を`time`で指定しています。

APIGatewayからこれらの2つの値をStepFunctionに渡し、StepFunction内で、Lambdaに`instance_id`、とWaitに`time`を渡して実行する挙動になります。
S3へのレプリケーションをトリガーにLambdaのコード更新・新規バージョン発行を実行する

## 以下の記事を参照して頂ければと思います

https://note.com/shift_tech/n/nbe12fc8d8df7

**※ Qiitaの記事は全て個人的な記載であり、所属する組織団体とは無関係です**

## 補足
ソースコード全体は以下です。

https://github.com/yuta-katayama-23/lambda-update-function-code

元記事を表示

OTHERカテゴリの最新記事