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

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

Lambda

import boto3
import os
import datetime

“””
This portion will obtain the Environment variables from AWS Lambda.
“””

GROUP_NAME = os.environ[‘GROUP_NAME’]
DESTINATION_BUCKET = os.environ[‘DESTINATION_BUCKET’]
PREFIX = os.environ[‘PREFIX’]
NDAYS = os.environ[‘NDAYS’]
nDays = int(NDAYS)

“””
This portion will receive the nDays value (the date/day of the log you want
want to export) and calculate the start and end date of logs you want to
export to S3. Today = 0; yesterday = 1; so on and so forth

元記事を表示

【個人開発】CtoCのコードレビューサービス Kanon Code

# CtoCのコードレビューサービス Kanon Codeをリリースしました
![note_03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/302326/44fad773-3b61-2504-24a4-362593d3a472.png)

本サイト
[Kanon Code](https://kanon-code.com)

## どんなサービス?
レビューして欲しい人がコードを投稿し、自由にレビューしてもらえるサービスです。
ユーザー登録でレビュイーにもレビュワーにもなれます。

また、レビューは販売することも可能で、販売システムは[note](https://note.com)を参考にしています。
もちろん無料でのレビューも可能です。

## 技術スタック
– Next.js
– Lambda(node.js)
– DynamoDB
– vercel
– SAM
– Material UI
– styled-component

## 実際の画面
![スクリーンショット 2021-09-05 10

元記事を表示

AWS Lambda関数のローカル動作確認をDocker内Dockerで実行する

##はじめに
やりたいことはタイトルの通りですが、以下の通りです。

– ローカルでLambda関数の動作確認ができる
– VS Code Remote Containerで開発環境の構築を完結させる(ローカル環境を汚さない)
– もし可能ならデプロイも簡単に

この要件マッチするツールとして、AWS Cloud9が一番手軽だと思われます。
VS Codeにこだわりがなく、Cloud9の料金に問題がなければCloud 9をお勧めします。

##環境
– 開発端末:macOS
– 開発IDE:VS CodeのRemote Containers

##前提
– AWS IAMアカウント作成済み
– Docker, Git, VS Code (Remote Container)は開発端末にインストール済み

##補足
Lambdaのローカル実行には、AWS SAM CLIが提供されていますが、こちらのローカル実行にはコンテナ環境が使われます。
つまりコンテナからコンテナを呼べないといけません。以下の構成を目指します。

| コンテナ | 概要 | インストール |
| —-

元記事を表示

【AWS】MediaConvertを用いてHLS VOD配信

# はじめに
今回はWEBアプリ作成にあたり動画をアップロードし、閲覧できる機能を実装したいため
**MediaConvert**を使用して**HLS(HTTP Live Streaming)**で配信する環境をAWSで構築しました!

[HLS VOD配信](https://aws-mediaservices-jp.workshop.aws/handson5.html)
AWSのハンズオンをほとんどを採用しているんですが笑
今回実装にあたりつまずいた点(ハンズオンで指示してるのに・・・)
や、少しカスタマイズした点があるのでその手順をアウトプットします。

カスタマイズしたのは処理した動画の出力先をバケットのトップではなく
動画がアップロードされた階層に出力するという点です。
**Lambda**へアップロードするファイルの記述を変更してます^^

またハンズオンの画面は古いものがあり迷った点がありました(^ー^;
今回は最新の画面で対応してます!!

# なぜHLSなのか
私も最初は大きすぎる動画ファイルを一定のサイズにするものかという認識でしたが、
それでは充分ではありませんでし

元記事を表示

S3内のZIPファイルをAPI経由でダウンロードする方法

## はじめに
ZIPファイルをAPI経由でダウンロードする方法について、意外とやり方が分からず手こずったため、メモとして残しておく。

## 事前準備
・S3にバケットを作成し、直下に任意のZIPファイルを格納しておく。
・ローカルPCにPython3系のインストール(ダウンロードファイルをデコードするために使用)

## 流れ

**1.ダウンロード用のAPIの準備**
  1-1).Lambdaの作成
  1-2).API Gatewayの作成

**2.ダウンロード後の変換**

## 1.ダウンロード用のAPIの準備

### 1-1).Lambdaの作成(Node.js 14.x)

“`js:index.js
var AWS = require(‘aws-sdk’)
var s3 = new AWS.S3()

exports.handler = async (event) => {

var params = {
Bucket: “バケット名”,
Key: “ZIPファイル名”
};

c

元記事を表示

IAMユーザ作成を自動化する

#はじめに
LambdaからCloudFormationを起動するというのをやってみました。
ただ、この記事の内容は実務で使用しているわけではなく、実用的でもないと思っています。

#実現したいこと
![rapture_20210903201831.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535463/51907e63-dac0-fba1-a5f3-6b92559fcda4.png)
上図のように、S3バケットにIAMユーザ名を記入したファイルをアップロードすると、それをトリガーにLambdaが実行され、CloudFormationを起動します。最終的にはIAMポリシーがアタッチされたIAMユーザが作成されます。

#作業手順
##1. CFnテンプレートの作成
まずはCloudFormationのテンプレートとなるyamlファイルを作成します。
IAMポリシーはPowerUserAccessをアタッチすることにしました。

“`ruby:create-iam-user.yml
AWSTempl

元記事を表示

LambdaとSNSでTypetalkに通知する仕組みを作る

8月上旬に WAF Managed rule への変更が SNS トピック( aws-managed-waf-rule-notifications )に対して通知される機能がリリースされた。
今回は、 Lambda を使って Typetalk にそれを通知する仕組みを作ってみる。

#使用するサービス
##Amazon SNS
アプリケーション間のメッセージ、HTTP、Eメール、スマホのプッシュ通知を行うことができる。
ユーザーアクションをトリガーにできる。
今回は aws-managed-waf-rule-notifications という SNS トピックを使用し、 Lambda 関数に通知する。

##AWS Lambda
サーバレスでプラグラムを実行できるサービス。
今回は SNS からの通知を受け Typetalk api を叩く。

##Typetalk bot
Type talk 上のボット、 Typetalk api を叩くことで動かすことができる。

#システム構成
![Untitled.png](https://qiita-image-store.s3.ap-nor

元記事を表示

AmplifyでREST APIを構築したときに立ちはだかった4枚の壁(と小壁)

知っている方からすれば「どうしてそんなこと?」と思うようなことも、知らない時にはつまづいてしまうもの。現在地とゴールが違えば、また通る道が異なれば、ぶつかる壁も違うでしょう。
私の前に立ちはだかった壁のお話がどなたかのお役に立てば幸いです。何枚もの壁の先にゴールはありました。
「心臓を捧げよ」

# やろうとしたこと
まずは私の現在地とゴールです。
他の開発環境でREST APIを開発したことはあります。NoSQLもMongoDBを少々。今回はAmplifyを使って、REST APIを作ってみようと思います。
Amplify + RESTとすると、必然的に「Amplify + API Gateway + Lambda + DynamoDB」の組み合わせになることが分かりました。Lambdaは少し使ったことがありましたが、他は初めてです。

どんなものを作ろうか?
「トランプのカード52枚から何枚かのカードを選ぶ」というフロントがあり、そこで選んだカードの状態を「選ばれてない→選ばれた」に変えるAPIを作ってみようと思います。 :spades: :heart: :clubs: :diam

元記事を表示

LambdaのIPアドレスを固定化する

## はじめに

LambdaとAPIサーバを組み合わせたサービスを開発する際、Lambdaのアクセス制御をしたいケースがあるかと思います。
その際、IPアドレスでアクセス制御を行うことが多いと思うのですが、LambdaのIPアドレスは基本的には固定化されていません。
さらに、Lambdaが使うIPアドレス範囲も結構広く、ちょくちょく変わるため、IPアドレスを固定化しないと制御が難しい。

上記について、LambdaのIPアドレスを固定化させる方法を紹介します。

## 前提
VPC,Lambdaが作成されていること。
LambdaがVPCに紐づいていること。

## 手順
1. インターネットゲートウェイの作成
1. パブリックサブネットの作成
1. インターネットゲートウェイの割り当て
1. プライベートサブネットの作成
1. NATゲートウェイの作成
1. プライベートサブネットとNATゲートウェイを紐づける

最終的な構成としては、下記のようになります。
![LambdaToEC2.png](https://qiita-image-store.s3.ap-northeas

元記事を表示

Lambdaで値を返す方法まとめ

# 結論

handlerをasyncにして普通にreturnで99.9%くらいOK

## async + return

最も普通な方法です.

“`js
exports.handler = async (event) => {
const response = {
statusCode: 200,
body: JSON.stringify(‘Hello from Lambda!’),
};
return response;
};
“`

### async + returnでsetTimeoutする

“`js
exports.handler = async (event) => {
const response = {
statusCode: 200,
body: JSON.stringify(‘Hello from Lambda!’),
};

setTimeout(() => {
console.log(“1000ms後”);

元記事を表示

AWS日記30 (AWS Lambda – DLQ)

# はじめに
AWS Lambda 関数のデッドレターキューを試します。

非同期呼び出しが失敗した際に、メールを送信するように設定します。

今回は CloudFormation を利用して構築しました。
使用したテンプレートは[Github](https://github.com/tanaka-takurou/cloud-formation-templates/tree/master/dlq_for_lambda)に。

# AWS SAM テンプレート作成

AWS SAM テンプレートで Lambda, SNS の設定をします。

[参考資料]
[AWS SAM テンプレートを作成する](https://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/tutorial-lambda-sam-template.html)

### Lambda関数とデッドレターキューの設定は以下の部分
“`yaml
Type: AWS::Serverless::Function
Properties:
F

元記事を表示

AWSのRDSのPostgreSQLでAWS Lambdaを呼ぶ

# 目的
PostgreSQLからAWS Lambdaが呼び出せるのでやってみます。
やり方は本家の[ドキュメント](https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/PostgreSQL-Lambda.html#PostgreSQL-Lambda-invoke)の通りです。

# コード

## AWS Lambda
“`ruby:hander.rb
require ‘json’

def index(event:, context:)
{
statusCode: 200,
body: {
message: ‘Go Serverless v1.0! Your function executed successfully!’,
input: event
}.to_json
}
end
“`

## IAM
### IAM Policy
“`bash
aws iam create-policy –policy-name rds-lambda-policy

元記事を表示

AWS CodeCommitでPRマージ時にLambda実行

## はじめに
DevOps(CICD)の一環でCode CommitのPRがマージされた時にBuild・Deployを実行させるような仕組みを構築したのでその備忘録を残す

## 仕組み
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372684/e1371743-42b5-acb0-c85e-f48853554ab9.png)

## Cloud Watch EventsのEventオブジェクトの中身
例えば、devブランチからmainブランチへのPRのマージを行うと以下のようなEventオブジェクトがLambda関数に渡る

“`json
{
“version”: “0”,
“id”: “c0931ce3-ee9f-d9f5-205c-a0ab8e3c0f9f”,
“detail-type”: “CodeCommit Pull Request State Change”,
“source”: “aws.codecommit”,
“account”: “xxx

元記事を表示

AWS lambdaを時間指定で1回だけ実行する方法

# はじめに
私はaws初心者です。lambdaで困ったことがあったからメモとして残します。

# やりたいこと
lambda functionを時間指定で1回だけ実行したい

想定しているケース
・ あるイベントがまとまったページを監視して、新しいイベントが登録されたらイベントが開催される1日前にLINEで通知する。

この場合だと、
Lambda①:スクレイピング→Lambda②の時間予約(新しいイベントの1日前)
(イベント情報も渡す)
Lambda②:関数①から受け取った情報をLINEに送信

# どうしたか
使ったもの:Lambda、EventBridge

> 補足
EventBridgeは**定期実行**とかをしてくれるらしい。この定期実行の規則をルールと呼ぶ。

“`python:Lambda①
import boto3

client = boto3.client(‘events’)

event_name = “ルールの名前”
description = “ルールの説明”
event_time = “cron(* * * * ? *)” #実行したい時間を満たす

元記事を表示

【Python / Gmail API / AWS Lambda】Gmailの未読メッセージを監視してSlackに通知する

![Untitled Diagram(22).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688854/3a75999b-9547-83c5-e83f-9c4e8405cc6b.png)

## 背景

普段の業務において、どのコミュニケーションツールを使っているかは人それぞれだと思います。

私の場合、基本的はSlackがメインではあるのですが、そうは言ってもやはり一部においてGoogleのGmailなどに頼らざるを得ない事などがあります。(他社の人たちとのやりとり時などは特にそう)

ただ、頻度としてはそこまで高くはないため、必然的にSlackと比べてチェックの回数が少なくなり、レスポンスが大幅に遅れてしまうなんて事もしばしば…。

そこで、Googleが公開しているGmail APIを使って定期的に未読メッセージを取得し、Slackへ通知する事ができればその問題も解消できるかなと考えました。

## 完成イメージ

![スクリーンショット 2021-08-28 20.47.13_censor

元記事を表示

IAMユーザやLambdaからS3バケットにアクセスする方法

## はじめに
自分や他人のAWSアカウントが所有するS3バケットに対して、IAMユーザーやLambdaへのアクセス権限の付け方に少しハマったため、やり方を整理してメモとして残す。

## 今回整理した内容

1.**アカウントA**のS3バケットに、**アカウントA**で作成したIAMユーザがアクセスする方法(AWSコンソールを用いて)

2.**アカウントB**のS3バケットに、**アカウントA**で作成したIAMユーザがアクセスする方法(AWSコンソールを用いて)

3.**アカウントB**のS3バケットに、**アカウントA**のS3バケットにあるファイルを、Lambdaを実行してコピーする方法

4.**アカウントA**のS3バケットに、**アカウントA**で作成したIAMユーザがアクセスする方法(ローカルPCからAWS CLIを用いて)

※ここで言うアカウントは、AWSアカウントを指している。

## 1.**アカウントA**のS3バケットに、**アカウントA**で作成したIAMユーザがアクセスする方法(AWSコンソールから)

### ■事前準備

**アカウントAのS

元記事を表示

S3にオブジェクトをアップロードして引数をlambdaに送りたいとき

今まではS3をトリガーにLambdaを発火させていたのですが、これだと追加の変数を設定することができず、どうすればいいか悩んでいたときに、InvokeInputに渡せばいいことを知りました。

## 参考

https://qiita.com/yukpiz/items/269277a97053237a6980

## go server側

S3にアップロードしたあとに、invokeして変数を渡すようにしました。

“`main.go
package main

import (
“encoding/json”
“fmt”

“github.com/aws/aws-sdk-go/aws”
“github.com/aws/aws-sdk-go/aws/session”
“github.com/aws/aws-sdk-go/service/lambda”
)

// これはLambda関数の完了で返すための構造体定義
type Response struct {
Message string `json:”message”`
Ok bool `json:”ok

元記事を表示

【AWS SAM】デプロイとローカル確認用のコンテナイメージを一つのDockerfileで使い分ける

# 初めに

LambdaアプリケーションをSAMで開発するにあたりコンテナでデプロイを初めて取り扱うにあたり色々試行していたのですが、
せっかくコンテナで環境をそのまま持ってけるんだからローカル環境も同じコンテナで処理したい!
でもDockerfileの多重管理はしたくない!となっていい方法がないかと模索していたところ
割と良さげな方法がありましたので備忘録がてらまとめます。

AWSのサポートに問い合わせてみたら記事執筆時点(2021/08/27)では
まだ公式のドキュメントが追いついてなく記載がなく追記予定らしいです。

こんなことしなくてももっと簡単にできるよっていうのがあったらご教示いただければと思います。

# 何がしたかったか

今回はAWS公式で提供されているpython3.8のイメージをベースとします。

大元のDockerfileはドキュメントに記載の通り以下で
`ENTRYPOINT [“/lambda-entrypoint.sh”]` が実装されており、これに対して
`CMD` で引数を渡すような作りをすることで対象のスクリプトを実行できます。
https://

元記事を表示

【Lambda】AWSのLambdaの設定項目について調べてみた。

#はじめに
先日、業務でAWSのLambdaというサービスを使うことになり、
それについて色々調べてみました。

今回は、備忘としてLambda関数の設定項目に関する説明を記述していこうかなと思います。

##Lambdaとは

Lambdaとはどういったサービスなのか。
AWSの公式ページには以下のように記載されていました。

>AWS Lambda はサーバーレスコンピューティングサービスで、サーバーのプロビジョニングや管理、ワークロード対応のクラスタースケーリングロジックの作成、イベント統合の維持、ランタイムの管理を行わずにコードを実行できます

わざわざサーバを構築せずとも。色々なことを実行できますよー的な感じですね。

Lambda上に実行したい処理(プログラム)を定義することにより、
指定したタイミングで実行することができます。

Lambdaを利用して様々なことができる訳ですが、
どんなことが出来るかは各自で調べていただけると幸いです。。

##Lambdaの設定

本題のLambdaで設定できる内容について記載していこうと思います。
なお、本記事では関数の設定項目につい

元記事を表示

Lambda関数内で、別AWSアカウントのLambda関数を呼び出す

**AWSアカウントA**内のLambda関数から**、AWSアカウントB**内にあるLambda関数を呼び出す方法の備忘録です。

もともとのゴールは、アカウントA内のAmazon **Lexボット**から、アカウントB内のLambda関数を直接呼び出すことでした。

しかし現状無理そうなので、アカウントA内の(プロキシ)Lambda関数を経由して、間接的にアカウントBの(本命)Lambda関数を呼び出すことにしました。

##概要

Lexボットがある、**呼び出し側**のAWSアカウントを**アカウントA(ID:999999999999)**、**呼び出される**本命Lambda関数がある側のAWSアカウントを**アカウントB(ID:000000000000)**とします。

アカウントA内に作成するプロキシLambda関数が、アカウントB内の本命Lambda関数を呼び出すには、アカウントBの側で**アカウントAのアクセスを許可**する必要があります。

セットアップ全体の流れは次のとおり。

1. アカウントB内に、本命Lambdaの実行権限を持つIAM Roleを作成

元記事を表示

OTHERカテゴリの最新記事