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

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

AWSで遊ばない時間はNATゲートウェイを削除したい

# 背景
[AWSではじめるインフラ構築入門](https://www.seshop.com/product/detail/23455)を読んでAWSの再入門に励んでいるのですが、
NATゲートウェイのコストは馬鹿になりません。1円2円を求めてポイ活をしている私にとっては耐え難いレベルです。

使っている時間に課金されてしまうのは仕方ないとして、使っていない時間はNATゲートウェイを削除しておきたいものです。
ところがNATゲートウェイはルートテーブルなどの周辺機能にも影響を及ぼしており、手動で削除/起動するのは結構手間です。

そこで**AWS Lambda**を使ってNATゲートウェイの削除/起動を自動化してみます。

# 要件
要件は以下の通りです。
– NATゲートウェイの削除/起動や周辺機能の設定変更を自動化したい。
– 特定の時刻や曜日に自動起動するのではなく、オンデマンドで実行したい。手動でボタンをポチッとするイメージ。

# 前提
Lambda関数のランタイムは「Python 3.9」を選んでいますが、バージョンは大きな問題ではないでしょう。
CloudFormatio

元記事を表示

AWS Lambdaからteamsへ送信してみる

# 背景
* 新プロジェクトに夜間のバッチ処理の開始の時に、teamsチャネルへ送信する
* バッチ処理失敗の時も送信する

# 調査

* [HTML を使用してカードを書式設定する](https://docs.microsoft.com/ja-jp/microsoftteams/platform/task-modules-and-cards/cards/cards-format?tabs=adaptive-md%2Cconnector-html#format-cards-with-html)
* [メッセージを作成して送信する](https://docs.microsoft.com/ja-jp/microsoftteams/platform/webhooks-and-connectors/how-to/connectors-using?tabs=cURL)

# webhookを作成
* 参照: [送信 Webhook を作成する](https://docs.microsoft.com/ja-jp/microsoftteams/platform/webhooks-and-conn

元記事を表示

Serverless frameworkでGoをデプロイしたらPath errorが発生する

# はじめに

この記事は2022年8月にまとめていた「細かいつまずいたことをメモしておく(8月編)をそれぞれ投稿した内容になります
解決方法が最新でない可能性もありますのでご了承ください

# 問題

https://blog.mmmcorp.co.jp/blog/2020/06/07/aws-lambda-with-golang-gin/

https://zenn.dev/sti320a/articles/f60aa3ef305075

この記事をみて設定をしていたがいざデプロイすると以下のエラーが発生

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/810513/982f825a-772f-921b-3286-d61806242e96.png)

# 解決方法

“`Makefile
build:
go mod download
env CGO_ENABLED=0 GOARCH=amd64 GOOS=linux go build -ldflags=”-s -w” -o bi

元記事を表示

なるべく手間をかけず(Amplifyも使わず)にサーバーレスでCognitoユーザーがAWSマネジメントコンソールへログインできるようにする

# 経緯
タイトルの通りで、私の関わっているサービスで最近わりと切実に実現する必要があったのですが、ググってみてもそのものズバリの情報がなかなか見当たらず、調査にけっこう時間がかかってしまったので他の方々や後の自分が迷いなく実現できるように書き残しておきます。

もっと良いやり方があるよという方は教えてください。

# 前提条件
– ユーザーにAWSマネジメントコンソールを使わせたい
– ユーザーはCLIでなく、ブラウザ(ログイン画面)でログインさせたい
– 事情があってAWS SSOに連携するIdPを使えない、使わない
– ログイン画面のためだけにウェブアプリを作りたくない
– サーバーの運用はなるべくしたくない
– IAMユーザーは発行したくない(セキュリティリスクの問題です。IAMユーザーを発行しても良いという場合はそれで解決です。この後を読む必要はありません。お疲れ様でした!)
– 運用チームがCognitoユーザープールでメンテナンスできる程度のユーザー規模(うちの場合は予想2桁程度なので余裕)

Cognito ログイン画面 などでググるとAmplifyが良くヒットするので

元記事を表示

Nuxt.js(3) で作ったアプリをAWS Lambda 1つで公開する

# 備忘録

“`nuxt.config.ts
export default defineNuxtConfig({
nitro: {
preset: “aws-lambda”,
serveStatic: true,
},
})
“`

Lambda Functions URLを使用する
APIGateWayでもできるらしいのだが、自分の場合上手くいかなかった。
※.output/public/_nuxt配下のアセットの公開がAPI GateWayの場合UrlにStageの値が入る為、上手く折り合いをつけれなかった
解消出来たらよりいいのになと思っています。

https://github.com/nuxt/framework/issues/3586

“`serverless.yml
service: nitro-sample

provider:
name: aws
runtime: nodejs16.x
region: ap-northeast-1

package:
patterns:
– “!**”

元記事を表示

serverless frameworkで作成したAPIでLambdaに送信した値を取得。

# はじめに
Lambdaの引数から値を受信する方法を記載していく。
# メイン
dynamoDBになんやかんやするときに、使えるので書いてみた。
## パスから取得する
serverless frameworkでGETメソッドのAPIを作成するソースが以下になる。
API作成時のパスは、「https://{APIのId}.execute-api.{Resion}.amazonaws.com/dev/get/{id}」 のようになり、{id}の部分に渡したい値を書く。

“`functions.yml
function:
get:
handler: get.get
events:
– http:
path: get/{id}
method: get
# 統合サービスをLambdaにする
integration: lambda
“`
取得方法は、
“`get.py
def get(event, context):
# pathに{}で指定した値が入っている。
path = event[“pat

元記事を表示

Node.js v12 を使用している Lambda をリストアップ

aws-cli で Node.js v12 を使用している Lambda をリストアップする方法です。
AWS SSO を使用している場合の方法になります。

# AWS CLI の準備
aws cli のインストール手順は省略。
aws sso のスタート画面を開く。
対象のアカウントの Command line or programmatic access から “`Option 1: Set AWS environment variables“` をコピー
ターミナルでペーストしてそのまま実行。

“`
>export AWS_ACCESS_KEY_ID=”ACCESSKEYID”
export AWS_SECRET_ACCESS_KEY=”SECRETACCESSKEY”
export AWS_SESSION_TOKEN=”SESSIONTOKEN”
“`

# コマンドの実行
以下のコマンドを実行。
リージョン、Node.js のバージョンは適宜変更して実行。
“`
aws lambda list-functions –function-version ALL

元記事を表示

SNSとLambdaを用いたマイクロサービスのアーキテクチャ

# 目的
SNSとLambdaを用いたマイクロサービスの環境を構築したときのメモです。
今回のアーキテクチャがハマるケースは少ないかもしれませんが、もし誰かの役に立てばと思い残します。

# 経緯
– デバイス(IoT)から呼び出されるクラウドサービスを構築した
– デバイスのバージョンごとに機能の互換性を担保する必要がある
– 互換性のロジックをLambda関数のコードに全部入れるとメンテナンスが大変
– MQTTトピックは既に決定している
– IoTルールは気軽に修正できない

# 構成
– IoT Core
– SNS
– Lambda
## 構成図
![Untitled-3.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2515577/423e3257-52d0-cd65-115e-7c762a3e9e32.png)

# 特徴
簡単に表現すると Fan-out + Message Broker です。
– 1つのSNSトピックに対して複数のLambda関数がサブスクライブ
– サ

元記事を表示

aws-vaultを使ってAWS SAMのデプロイを行ってみる

# はじめに
AWSのSAMを使うとlambda関数の開発がかなり楽になることを知りました。
本記事ではそんなsamのインストールからデモアプリのデプロイまでをまとめてみました。

# AWS SAMとは
SAMとは(Serverless Application Model)の略です。AWSのサーバーレスサービス、Lambdaの関数をローカルで開発する際に非常に便利なサービスとなっています。

## SAMを用いるメリット
SAMを用いてLambda関数を開発すると以下のような利点があります。
– ローカルのエディタを用いてLambda関数のコーディングが可能
– ローカル上でLambda関数に似た実行環境を用意できるためテストが簡単
– pythonのパッケージを用いる場合zipファイルなどにまとめレイヤー分けをする必要がなくなる

# 使ってみる
## 準備
### 前提
本記事はarm系cpuの搭載されたmacOSでまとめています。
“`terminal
$ sw_vers
ProductName: macOS
ProductVersion: 12.5
$ uname -m
a

元記事を表示

Lambda – RDS Proxy(TLSあり) – Auroraの構成でRDS(Aurora)に接続する

## はじめに
Lambda→RDS Proxy→RDSの接続をやってみたのでその備忘録を残す。

全体の構成イメージは以下。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372684/41017c28-5f6c-795c-97ec-b64ba0a46393.png)

※料金について、Auroraはインスタンスの起動時間で料金が発生するので特に注意。Auroraではなく、MySQLとかにすれば無料枠があるのでそちらの方がいいかもしれない。

## Auoraのインスタンスを作成
以下の箇所以外はデフォルトのまま設定。

| 設定項目 | 画像 |
|:-:|:-:|
| テンプレート | ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372684/f92c1631-3a07-bcca-02c3-b82922eb7e3f.png) |
| インスタンスの設定 | ![image.pn

元記事を表示

AWS Lambda + API Gatewayでエラーになったら確認すること

Lambda + APIGatewayでREST APIを構築し、いろんなエラーに遭遇しました。
確認すべき箇所をメモしておきます。

## 403 {“message”:”Forbidden”}

### → **リクエストURLは正しいでしょうか**
API Gatewayはpath+ステージ名を付けたりします。
このステージ名が抜けてるとForbiddenになりますので、確認してみてください。

構成
“`
https://{APIのID}.execute-api.{リージョン}.amazonaws.com/{ステージ名}/{リソース名}
“`


“`
https://api-id.execute-api.us-east-2.amazonaws.com/default/pets?id=4&type=dog
“`
### → **リソースポリシーが間違っていないでしょうか**
リソースポリシーが真っ白だとエラーになります。
左メニ

元記事を表示

AWS LambdaのPythonアップデート手順について

# はじめに
LambdaにおけるPython3.6のサポート終了についてAWSから通知があり、
Python3.6からPython3.9にアップデートする必要がありました。
アップデート作業の備忘として、AWSコンソールでの操作手順をまとめてみました。

# アップデート対象の確認

AWSコンソールにログインし、Lambdaの関数一覧画面に遷移します。
「ランタイム」欄に使用している言語のバージョンが表示されています。
今回はPython3.6を使用している「cwlog_S3export」を例に記載します。
![Lambda_update1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2740559/d5f4167f-1fb7-d6a5-bebc-0eb5badec70f.png)

# アップデート作業

関数名を押下し、関数の詳細画面を表示します。
デフォルトで「コード」タブが表示されており、最下部にスクロールすると「ランタイム設定」欄が表示されます。
「ランタイム設定」欄の「編集」を押下し、

元記事を表示

Lambdaのレイヤーの参照方法

Layerに配置したファイルは `/opt`で参照可能。
試しに表示してみる。

Google fontから[Noto Sans Japanese](https://fonts.google.com/noto/use#how-are-noto-fonts-organized)をダウンロードし、`.font.zip`にしてLayerにアップロード。
Lambda側でLayer参照の設定をしてから以下を実行

“`js
const fs = require(‘fs’);

exports.handler = function(event, context){
fs.readdir(‘/opt/’, function(err, files){
console.log(files);
context.done(null, err);
});
}
“`

Cloud Watchに以下のように出力される
“`
[ ‘.font’ ]
“`

さらに`.font`ディレクトリの中身を表示してみる
“`js
const fs = requir

元記事を表示

Amazon SQSのローカル実行環境ElasticMQの構築

Amazon SQSと互換があるElasticMQをインストールし、ローカルにあるLambdaのソースコードと連携するローカル実行環境を構築します

softwaremill/elasticmq

https://github.com/softwaremill/elasticmq

# ElasticMQのインストール

ElasticMQのインストール方法には複数ありますが、今回はDockerを使います。
特に、Docker環境としては、QNAPのNASにインストールします。理由は単にQNAP NASを利用しているから。

QNAPには、Docker環境として、ContainerStationがあります。
ElasticMQのDockerファイルは、リポジトリに対して、elasticmqの入力で検索にひっかかります。

https://hub.docker.com/r/softwaremill/elasticmq-native/

Dockerに馴染みのある方は、以下がわかりやすいかと思います。

 “`docker run -p 9324:9324 -p 9325:9325 so

元記事を表示

【Lambda】list_objectsでひっかかったこと

# やりたいこと
* list_objectsで指定S3バケット上のキー一覧を取得
* あるキーが存在するならファイルにデータを追記
* あるキーが存在しない場合ファイルを新規作成
* ランタイムはPython3.9

# ①LambdaからS3バケットにアクセスできない
“`Python:Error
[ERROR] ClientError: An error occurred (AccessDenied) when calling the ListObjects operation: Access Denied
Traceback (most recent call last):
“`
**解決策:LambdaにS3のアクセス権限を付与**
1.Lambda関数を管理しているIAMロールの概要ページにアクセス
![01_アクセス権限.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2728375/cb40ccb5-e8e1-4144-0a47-b72e257f4c22.png)
2.

元記事を表示

LineMessageAPI+ngrok+Lambdaで送られてきたメッセージをそのまま返すBotを作ってみました

[前回](https://qiita.com/uekichi3/items/bb9cb7d35653ee873982)は、AWSで公開されているgolangのLambdaコンテナイメージの事を書きましたが、
今回はこれを拡張してLineBotを作ってみました。

## 前提条件
[ngrok](https://ngrok.com/)に登録済みで且つ、インストール済み
[LINE Developers](https://developers.line.biz/ja/)に登録済みでチャネルも登録済み

## パッケージの構成
前回の構成で、コードを拡張しようと思ったのですが、
初回main.goをbuildしようとしたらgopkg.in/yaml.v3に関するエラーが出たので今回はPythonで試す事にしました。
“`
├── docker
│   └── lambda-python-test
│   └── Dockerfile
├── docker-compose.yml
├── lambda
│   ├── app.py
│   └── .env
└── requireme

元記事を表示

webhookを叩くだけのシンプルなLambdaを5つの言語で作ってみて実行速度を測る

我が社にて、cloud watchのalertを拾って、LambdaからIFTTTのwebhookに繋げてパトライトを光らせよう、っていうプチプロジェクトが走ろうとしております。

![スクリーンショット 2022-08-13 13.20.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308709/96ae713e-868f-6a59-91ff-2bfbd6bbf46c.png)

だいたいこちらの記事のような内容です。
https://kimama.cloud/2020/01/06/alarm2patlite/

ただ、今回はこのへんの事情は関係なく・・・

![スクリーンショット 2022-08-13 13.22.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308709/33dc51b1-853e-9f45-be5d-ef884f48dadc.png)

↑ここだけの記事です。Lambdaのみ。

##

元記事を表示

AWS Lambda+seleniumでLineにpush通知やってみた

# この記事で言いたいこと
– web 画面のpull型確認がめんどいのでLine通知にした
– ハマったポイント

# きっかけ
– 子供が習い事をしていて、土日に練習会がある。

– 練習場所が、毎週可変
– 場所は昔ながらの掲示版でのみ知らされる。
– あれ、今週末はどこだっけ? →わざわざ掲示版を見に行く
 ↑これが面倒 →プッシュ型の通知にしたかった。
– 掲示版(sample)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/445755/f4b694f4-c56b-eadb-7f3d-99df54830ebd.png)

# ひらめき
seleniumで掲示版での投稿内容を読み取って、
lamdaからプッシュ通知すればできるのでは?

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/445755/122e37a1-08ad-3db0-a0b8-83c0b93ad0be.png)

元記事を表示

[AWS.4] Lambda関数のテスト

# 1. 概要
API Gateway に対応した Lambda関数をテストするには、API Gateway の管理画面から対象APIを選んで「テスト」画面を開き、テスト用の入力パラメータを指定して当該関数を呼び出す必要があります。
また、VisualStudio のテストプロジェクトから Lambda関数を呼び出して動作をテストすることも可能です。

本記事では、次の二つのテスト方法について記述します。
1. API Gateway の API 呼び出しテスト
1. VisualStudio テストプロジェクトからの呼び出しテスト

# 2. API Gateway の API 呼び出しテスト
API Gateway管理画面から、作成した API(EchoSample-API)を選択します。
その後、ツリー項目の「ANY」をクリックすると、リクエスト〜レスポンス の流れを示すフロー図が表示されます。
![スクリーンショット 2022-08-03 22.08.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.co

元記事を表示

【lambda】他の配列を参考にリストを並べ替える

## はじめに

**Pythonで他の配列を参考にリストを並べ替える**方法について解説します。

※プログラミング関係の内容を他にも投稿していますので、よろしければ[こちら](https://qiita.com/oki_kosuke/items/34b1071224953776c211#%E6%8A%95%E7%A8%BF%E4%B8%80%E8%A6%A7)の一覧から他の投稿も見て頂けますと幸いです。

## 実現したいこと
input_list = [‘ten’, ‘nine’, ‘three’]
このようなリストが与えられた際に数として並べ替えたい。つまり、数字の3,9,10の順に従って、[‘three’, ‘nine’, ‘ten’]と出力したい。

## listの並び替えの復習
リストは以下のように並べ替え可能です。

“`python
name_list = [“Charle”, “Mike”, “Bob”, “Alice”]
sorted(name_list)
“`

“`:出力
[‘Alice’, ‘Bob’, ‘Charle’, ‘Mike’]
“`

元記事を表示

OTHERカテゴリの最新記事