- 1. EC2の起動直後のCloudWatchアラームを抑止する
- 2. Lambda Layersで快適に開発する方法
- 3. AWS Lambdaで独自にログを出力したい(標準のログを出したくない)
- 4. Lambda+Rustのデプロイメントをコンテナイメージと.zipファイルアーカイブの両方で試す
- 5. 【webhook】Slackの高度なワークフローが便利なことに気づいた
- 6. AWS LambdaでサクッとAPIを叩きたい
- 7. S3操作をするLambda関数(Python-image)をSAM CLIを使ってデプロイする手順をまとめてみる
- 8. AWS Lambda + API Gateway でサーバサイドレンダリング
- 9. Lambda
- 10. 【個人開発】CtoCのコードレビューサービス Kanon Code
- 11. AWS Lambda関数のローカル動作確認をDocker内Dockerで実行する
- 12. 【AWS】MediaConvertを用いてHLS VOD配信
- 13. S3内のZIPファイルをAPI経由でダウンロードする方法
- 14. IAMユーザ作成を自動化する
- 15. LambdaとSNSでTypetalkに通知する仕組みを作る
- 16. AmplifyでREST APIを構築したときに立ちはだかった4枚の壁(と小壁)
- 17. LambdaのIPアドレスを固定化する
- 18. Lambdaで値を返す方法まとめ
- 19. AWS日記30 (AWS Lambda – DLQ)
- 20. AWSのRDSのPostgreSQLでAWS Lambdaを呼ぶ
EC2の起動直後のCloudWatchアラームを抑止する
起動直後のCloudWatchアラームの通知を抑止したいという要望があったので、AWSサービスを組み合わせて実現してみました。
#構成
EventBridge + Lambdaで実現します。
EC2起動直後の一定時間を待つために、起動時にはStep FunctionsからLambdaを呼び出します。EventBridgeやStep Functionsは応用の幅が広いので、その一例としても役立ちそうです。
# Lambdaコード
まずはLambdaコードから見ていきます。“`python
import boto3target = {
“test-instance” : [‘test-alarm’]
}def lambda_handler(event, context):
client = boto3.client(‘cloudwatch’)
if event[“Action”] == ‘enable’:
response = client.enable_alarm_actions(
Lambda Layersで快適に開発する方法
みなさん、Lambda Layers使ってますか?
共通で利用するロジックをライブラリにできる、ということで登場時は大変盛り上がりました。
(それまでは関数ごとにライブラリ部分にシンボリックリンク貼って利用してた)ただ開発を重ねるにつれて、「これ、色々不便じゃ、、、?」と思うことが湧き上がってきました。
# 根本原因:ローカルで/optを参照するの辛い
Layersのデプロイ先は/optになるので、ローカルでもそれに対応する方策を色々と取る必要があります。
### docker使って/optにLayersをマウントする
可能です。可能ですが、テストやビルド時にわざわざdockerに入るのめんどくさい、、
加えて、IDEにdockerを認識させるのが環境によりますが、面倒くさかったり、有料じゃないとできなかったりします。
IDEが「/optなんてないよ」と認識してくれない状態での開発は無理ゲー### シンボリックリンクを使う
こちらも可能です。可能ですが、プロジェクトが複数に跨がってくるとその管理がまた面倒になってきます。
ローカルのグローバル領域荒らしたくないんじゃ、
AWS Lambdaで独自にログを出力したい(標準のログを出したくない)
#問題
Lambda標準のログを抑止してCloudWatchLogsのコストを節約したい。けど、特定の場合にはログを出力したいといった問題を解決します。#Lambdaコード
早速ですが、このような関数を用意してlambda_handler内で使用します。
必要な権限(IAMポリシー)は後で解説します。標準のログを出さないようにするのも、IAMポリシーの定義で行います。“`python
import boto3
import time
import datetimelogs_client = boto3.client(‘logs’)
lgn = ‘/aws/lambda/PutLog’def lambda_handler(event, context):
put_log(‘test’)
put_log(‘テスト’)def put_log(message):
# ロググループがない場合作成
res = logs_client.describe_log_groups(
logGroupNamePrefix=lgn
Lambda+Rustのデプロイメントをコンテナイメージと.zipファイルアーカイブの両方で試す
##はじめに
表題の通りです。
SAM CLIからカスタムランタイムを使ってLambdaをデプロイの設定情報を作っていたのですが、ImageとZipどちらがいいのかわからずどちらも試しました。
今後どちらも選択的に使えるようにまとめておきます。##Zip
####構成“`bash
lambda_rust
├──.aws-sam
├──samconfig.yaml
├──stock_data
| ├──Cargo.lock
| ├──Cargo.toml
| ├──Makefile
| └──src/main.rs
└──template.yaml
“`
##設定
“`toml:template.toml
AWSTemplateFormatVersion: ‘2010-09-09’
Transform: AWS::Serverless-2016-10-31
Description: >
Sample rust application for LambdaResources:
HelloRustFunction:
【webhook】Slackの高度なワークフローが便利なことに気づいた
Slackワークフローの「高度な設定」として、webhookがあります。
![コメント.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666457/10c9bc56-b9b8-a308-af2d-283b97f9d7d3.png)ワークフロー自体はけっこう組織内でもみんな気軽に使ってたのですが、
webhookのボタンは押したことがありませんでした。ワークフロー登場時には記事もなかった気がするし。https://qiita.com/yuji_saito/items/5dc2b079d4e43bd381d8
ですが、↑こちらの記事を拝見して、「エッ、もしかしてすごい便利…!?」と思ったので、使ってみることにしました。
# 実際に使ってみた
今回は、自組織で使っているClickUpというタスク管理ツールでタスクを作成すると、Slackに通知がされるという仕組みを構築します。
ClickUpのAutomationという機能と、Slackワークフローを組み合わせて作ります。ClickUpには
AWS LambdaでサクッとAPIを叩きたい
#AWS マネジメントコンソール上でLambdaを実装して、APIを叩きたい
サクッとWEBAPIをLambdaで叩きたい人向けです。
AWSのコンソール上のコードエディターのみで作業を完結させたいときに。##こんな人向け
・WEBAPIを実行したい
・AWSマネジメントコンソールのみで作業を完結させたい
・headerに認証キーを付けたい
・認証キーは環境変数に入れておきたい
・返り値はステータスコードだけ取れればよい##環境情報
AWS Lambda– ランタイム:Python3.9
##ソースコード(PUT API)
Lambda 標準の同包モジュールのみでの実装するため、
AWS Lambda コードエディター上に下記を張り付けるだけです。“`python
import os
import json
import urllib.requestdef lambda_handler(event, context):
#PUT API
url_str = “https://APIURL/”
headers = {“
S3操作をするLambda関数(Python-image)をSAM CLIを使ってデプロイする手順をまとめてみる
##はじめに
Lambda関数を作成するにあたり、必要な手順をざっくりまとめました。
以下も試しました。– 1つのアプリケーションで複数の関数の定義
– S3の操作周りをLambdaで行う
– SAM CLIのローカルテストを試す##開発者のIAMユーザ作成
開発とデプロイで使用します。
![スクリーンショット 2021-09-04 3.33.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/380300/35a521dc-8ae5-66ad-5764-947364e38860.png)
![スクリーンショット 2021-09-04 3.38.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/380300/399a653b-7a69-e8ea-447f-0ce564bf8239.png)
あとは、デフォルトのまま作成し、アクセスキー、シークレットアクセスキーを保存#####必要な場合アクセス権を追加
ユー
AWS Lambda + API Gateway でサーバサイドレンダリング
# AWS Lambda でサーバサイドレンダリング 基礎編
パラメータ無しで `GET リクエスト`されたときに、動的に生成されたHTMLを返す仕組みを `AWS Lambda` + `API Gateway` で実装します。
`GET`の`クエリパラメータ`や`パスパラメータ`、`POST` などのパラメータ付きリクエストは、応用編で紹介します。
# Lambda レイヤー準備
AWS Lambda の Node.js ランタイムで npm モジュールを利用するため、レイヤーを作成します。[ドキュメント-Lambda レイヤーの作成と共有](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/configuration-layers.html)
**※以下は AWS CloudShell で作業します。**
[ドキュメント-CLI aws lambda publish-layer-version](https://docs.aws.amazon.com/cli/latest/reference/lambda/publ
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