- 1. 【AWS Lambda】 Lambdaで初めて環境変数を使ってみたのでその紹介とSAMでの使い方
- 2. Lambdaオーソライザで任意のエラーレスポンスを返却する
- 3. Terraform + SAM で苦労した話
- 4. LocalStack とSAM CLIを用いたローカルLambda +DynamoDB API 作成方法メモ
- 5. AWS Lambda+Seleniumでスクレイピングする話
- 6. Lambda (SAM CLI) + MySQL(docker-compose)を利用した REST API作成方法メモ
- 7. CloudWatchのアラートをSNS経由でLambdaを実行し、Slack通知
- 8. 【AWS】ElasticTranscoderで動画変換する仕組みを構築する
- 9. APIGatewayとStepFunctionを使い、EC2の起動から停止時間までを自在に操る
- 10. S3へのレプリケーションをトリガーにLambdaのコード更新・新規バージョン発行を実行する
- 11. around_actionで引数ありのメソッドをlambdaで指定する
- 12. LocalStackを使ってローカル環境でS3を立ち上げ、Lambdaでファイルをアップロードしてみた
- 13. 大量にあるLambda Functionsのトリガーとの紐付き一覧を出力する
- 14. AWS LambdaにJava11のプログラムをデプロイし、パラメータストアから値を取得するメモ
- 15. Lambda が保留中のままタイムアウトするエラーの原因
- 16. API Gateway + Lambda でリダイレクトする方法(Go言語)
- 17. 日経平均のチャート画像を毎日Twitter投稿するLambda関数(Rust)を作る
- 18. 【AWS Lambda】Slackに通知を送信する
- 19. AWS SAM+Lambda+Go+WSLではじめるサーバーレスアプリケーション開発
- 20. AWS SAMでLambdaに設定したS3イベントトリガがコンソールに表示されない問題の対応
【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 osfrom 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
around_actionで引数ありのメソッドをlambdaで指定する
## 概要
`around_action`に引数を持つメソッドを指定する際に無限に詰まったので同じ状況で困っている人のために残しておく。(最終的に上司に助けていただいて解決した。)
指定方法だけ知りたい人は`解決`までジャンプしてもらえれば書いてある。
## 状況
なぜ詰まったかというと、まずrailsでAction Controllerのフィルターを使用する際に引数を持つメソッドを指定する場合、ブロックを渡す必要がある。下記のようにしないとエラーが出てしまう。
“`rb
class HogeController < ApplicationController # 引数なしの場合 before_action :fuga # 引数ありの場合 before_action -> { fuga(x, y) }
end
“``before_action`と`after_action`を使用する場合は上記の記述で問題ないけど、`around_action`を使用する場合は1つ問題が発生する。
Railsガイドを読むと下記のように記述がある。
>「around系」
LocalStackを使ってローカル環境でS3を立ち上げ、Lambdaでファイルをアップロードしてみた
# この記事について
AWSのサービスをローカルで実行できるLocalStackについて紹介したいと思います。今回、AWS CLIの練習も兼ねてLocalStackを使用し、ローカルでAWS LambdaとS3を立ち上げ、Lambda関数を使用し、S3に日時.txtファイルをアップロードしてみました。
# 記事の対象者
– LocalStackに興味のある方
– AWS・AWS CLIに触れてみたい方# LocalStackとは
開発環境において無料で**AWSのアカウント登録なし**でAWSのサービスを擬似的に使用できるモックフレームワークでpipやdockerを用いて簡単に環境構築が可能。
ローカルにAWS環境を作ってくれて、料金などを気にすることなくテストや動作確認が可能である。https://localstack.cloud/
LocalStackは無料版と有料版がある。[^abe] 有料版は無料版に加え、高度なサービスをサポート。以下にLocalStackのサービスを示す。[^abc](2021年10月時点)
| 無料 | 有料
大量にあるLambda Functionsのトリガーとの紐付き一覧を出力する
Lambdaって便利でついつい量産しちゃいますよね。
負債は負債として、量産してしまったLambda関数を整理する際に、どのトリガーから起動する設定になっているかを出したくなった際のエントリーになります。トリガーを見れば、どのLambda関数がもう不要なのかの当てが付くかなと思い。
## 環境
“`bash
$ sw_vers
ProductName: macOS
ProductVersion: 11.5.2
BuildVersion: 20G95
$ uname -mrsv
Darwin 20.6.0 Darwin Kernel Version 20.6.0: Wed Jun 23 00:26:27 PDT 2021; root:xnu-7195.141.2~5/RELEASE_ARM64_T8101 arm64
“`## aws-vaultのセットアップ
本エントリーでは認証情報を直接ローカルに保存する`aws configure`ではなく、`aws-vault`を利用します。“`bash
$ brew install aws-vault
$ aws-vault
AWS LambdaにJava11のプログラムをデプロイし、パラメータストアから値を取得するメモ
### パラメータストアに適当なキーを保存
– キー名:testkey
– 値:test-value![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530708/eaad3e6f-0cfe-83bd-d7f5-66f767ed4d28.png)
### ラムダ上に関数をデプロイして実行
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530708/0af6dfb2-917e-5c14-836c-92e720fb198a.png)### 実行結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530708/e6835c85-5c1d-bc31-fc9e-e05e8a704040.png)### ソース作成からデプロイまで
– sam initでテンプレートを作成(AWS Quick Start
Lambda が保留中のままタイムアウトするエラーの原因
# はじめに
Lamba のエラー通知を受信したので X-Ray で確認すると、Lambda の状態が「保留中」となったまま実行時間を過ぎてタイムアウトしまいエラーになっていることがありました。その原因がわかったため、ここに記録しておきます。
# 原因
このエラーは、[VPC](https://aws.amazon.com/jp/vpc/) 内のプライベートサブネットに接続する必要がある Lambda に起こるようです。
Lambda が VPC 内のリソースに接続するとき、サブネットごとにネットワークインターフェイス([ENI](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/using-eni.html))が作成されます。これによって Lambda は各 VPC 内のリソースに通信できるようになります。
この Lambda が長期間アクティブでない場合、Lambda はネットワークインターフェイスを回収し、アイドル状態になります。アイドル状態の Lambda を再度アクティブにするには、その Lambda
API Gateway + Lambda でリダイレクトする方法(Go言語)
# 目的
API Gateway + Lambda でリダイレクトさせたいときの Go 言語のコードを紹介します。# リダイレクトさせる Go 言語のコード
APIGatewayProxyResponse は、リクエストに対して API Gateway によって返されるレスポンスを構成します。よって、APIGatewayProxyResponse にリダイレクト(3xx)のステータスコードとリダイレクト先 URL をセットしてあげれば、クライアントにリダイレクトさせることが可能です。
“`golang
package mainimport (
“net/http”“github.com/aws/aws-lambda-go/events”
“github.com/aws/aws-lambda-go/lambda”
)func handler(request events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) {
return events.APIGatewayProxy
日経平均のチャート画像を毎日Twitter投稿するLambda関数(Rust)を作る
##はじめに
スクレイピングした日経平均のチャート画像を毎日Twitter投稿するLambda関数をRustで作成しました。##成果物
– GitHub:https://github.com/c3drive/my_stock_data
– 成果物:https://twitter.com/idx_info##環境など
– 実行環境:AWS Lambda (カスタムランタイム) + Amazon EventBridge + AWS S3
– 開発言語:Rust
– 開発環境:macOS + VSCode + AWS SAM + (Docker)
– 株価チャート取得先:[StockCharts.com](https://stockcharts.com/)
– Twitter投稿:[TwitterAPI](https://developer.twitter.com/)
– 構成図作成: Python + [diagrams](https://diagrams.mingrammer.com/) + graphviz##概要
やっていることは以下です。– Amazon Eve
【AWS Lambda】Slackに通知を送信する
今回はCloudFormationでLambdaを触ってみるということで、Slackに通知を送信するLambda関数を構築していきたいと思います。
調べてみたところ、Lambdaを構築する場合はCloudFormationの `AWS::Serverless` というマクロ機能を利用するみたいです。
[AWS::Serverless変換](https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/transform-aws-serverless.html)マクロを利用すると「AWS SAM 構文」なるものでLambdaを定義できるようになり、 `aws cloudformation package` コマンド実行時に、通常のCloudFormationテンプレートに展開されます。
マクロ機能を利用するには、テンプレート内で下記のように宣言します。
“`template.yml
Transform: AWS::Serverless-2016-10-31
“`# SlackのWebhook U
AWS SAM+Lambda+Go+WSLではじめるサーバーレスアプリケーション開発
# 目的
AWS SAM を使って Go 言語でサーバーレスアプリケーションを開発するための、環境構築の手順をまとめます。個人的な備忘録を兼ねているため、必須ではない細かな設定なども記載しています。Lambda でサーバーレスアプリケーションの開発をはじめようと思っている方の参考になれば幸いです。
# 当記事に含まれる内容
当記事に含まれる内容は下記の通りです。ソフトウェアのインストールなどは既にわかりやすい記事があるので、そのリンクを貼っています。
– Hello World アプリケーションについて
– WSL2 の設定
– Docker の設定
– AWS CLI の設定
– Session Manager プラグインの設定
– SAM と Go のインストール
– Ubuntu の環境変数設定の自動化
– VSCode の設定
– SAM プロジェクトの新規作成
– SAM プロジェクトのデプロイ
– AWS コンソールから各サービスを確認# Hello World アプリケーションについて
Hello World アプリケーションは、SAM プロジェクトを新規作
AWS SAMでLambdaに設定したS3イベントトリガがコンソールに表示されない問題の対応
AWS SAMでLambdaにS3イベントトリガを設定したところ
動作は想定どおり行われるが、AWSコンソールのイベントトリガには
何も表示されない事象が発生しました。これは既知の問題のようで
https://github.com/aws/serverless-application-model/issues/300
で議論されていました。上記にも記載されていますが対応方法のサンプルです。
最初の定義。以下ではAWSコンソールにイベントトリガが表示されない。
“`yaml
MyFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: MyFunction/
Runtime: python3.8
Handler: app.handler
FunctionName: !Sub
– “${prefix}MyFunction”
– { prefix: !FindInMap [“EnvMap”, !Ref Env,