- 1. コピペでできるCloudWatch LogsからSlackに通知するコード
- 2. AWS Lambda を時刻起動する
- 3. Pulumiでチュートリアルを実施する。(APIGateway×Lambda)
- 4. AWS lambda nodeをローカルでdocker開発して、イメージデプロイする
- 5. AWS Lambdaに Funtion URLsを設定する
- 6. コンテナイメージから作るLambdaをSAMでデプロイ
- 7. FastAPI with Lambda + API Gatewayでサーバレスアプリケーションの作成
- 8. Amazon S3 → Amazon SQS → AWS Lambda を連携する
- 9. C#でラムダ式を書く
- 10. 保存したデータの分析
- 11. なるべく手間をかけずにサーバーレスでCognitoユーザーがAWSマネジメントコンソールへログインできるようにする(ログイン画面も自作しないパターン)
- 12. CloudFront導入とCognitoで認証した話
- 13. AWSで遊ばない時間はNATゲートウェイを削除したい
- 14. AWS Lambdaからteamsへ送信してみる
- 15. Serverless frameworkでGoをデプロイしたらPath errorが発生する
- 16. なるべく手間をかけず(Amplifyも使わず)にサーバーレスでCognitoユーザーがAWSマネジメントコンソールへログインできるようにする
- 17. Nuxt.js(3) で作ったアプリをAWS Lambda 1つで公開する
- 18. serverless frameworkで作成したAPIでLambdaに送信した値を取得。
- 19. Node.js v12 を使用している Lambda をリストアップ
- 20. SNSとLambdaを用いたマイクロサービスのアーキテクチャ
コピペでできるCloudWatch LogsからSlackに通知するコード
Node.jsだと、レイヤーを導入するのが面倒なので、今回はPythonで。
1. 環境変数`WEBHOOK_URL`にSlackから生成したWebhook URLを設定してください。
2. トリガーのソースはCloudWatch Logsで、ロググループを指定しておきます。従来のSlack Appを使わないIncoming Webhookはレガシーな方法のようです。1Webhook/チャンネルになったんですね。
https://qiita.com/kshibata101/items/0e13c420080a993c5d16
なので、今回はSlack Appを使うことを前提にしたコードです。
CloudWatch LogsのPayloadを全て出力するようになってます。“`python
#!/usr/bin/python3.9
import urllib3
import json
import base64
import gzip
import oshttp = urllib3.PoolManager()
def lambda_handler(event, con
AWS Lambda を時刻起動する
EventBridgeの時刻起動ルールを作成して、指定時刻にAWS Lambdaを起動する方法を解説します。
## Lambda関数のアクセス権限を設定する
EventBridgeからLambda関数を起動できるよう、アクセス権限を設定します。
– [設定]から[アクセス権限]を選択します。
![image](https://user-images.githubusercontent.com/38905609/187126403-5a8ef77e-653d-4513-9d22-b136be7c2a3d.png)
– [アクセス権限を追加]を選択します。
![image](https://user-images.githubusercontent.com/38905609/187126658-ebfdeaea-677f-4eca-af19-14645c9b3346.png)
– ポリシーステートメントを指定します。
1. [AWS]のサービスを選択
1. サービスに[EventBridge]を選択
1. ステートメントIDは任意のIDを指定
1. プリンシパルは初期表示値
Pulumiでチュートリアルを実施する。(APIGateway×Lambda)
### はじめに
AWSのプロビジョニングツールとして有名なPulumi。最近話題になってきているので、チュートリアルを実施します!!### Pulumiとは
AWSやGCP、Azure等をデプロイするIaCツール。TerafformやCloudFormationが有名ですが、IaCツールとしてPulumiも有名です!!
![スクリーンショット 2022-08-28 21.00.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599049/2481e794-92be-f06e-b8a8-79ed00119463.png)### 前提条件
AWS profileを事前に設定しておいてください。### プロジェクトのセットアップ
“`shell:ディレクトリ構成
~/develop/purlumi/pulumi-lambda$ tree -I node_modules
.
├── Pulumi.dev.yaml
├── Pulumi.yaml
├── index.js
├── pack
AWS lambda nodeをローカルでdocker開発して、イメージデプロイする
https://aws.amazon.com/jp/builders-flash/202103/new-lambda-container-development/?awsf.filter-name=*all
AWS lambdaの開発にSAMを使用していましたが、ローカルでdocker開発して、そのままデプロイできるようになったらしいので手順の確認。
dockerのイメージ生成→AWSのECRリポジトリにPUSH→AWS Lambda にECRからデプロイ。
https://qiita.com/rei-ta/items/e86546130d157561ba8e
Dockerfile
docker-compose.yml
package.json
app.jsDockerfile
“`
FROM public.ecr.aws/lambda/nodejs:16
COPY app.js package*.json ./
RUN npm install
CMD [ “app.lambdaHandler” ]
“`ecrイメージでのdockerを作成。public.ec
AWS Lambdaに Funtion URLsを設定する
AppSyncから、cloudsearchを叩きたかったので、Lambdaに Funtion URLsを設定して、httpリゾルバで取得する形に。Lambdaリゾルバよりテストなどがしやすそうだったので。
ローカルでcloudsearchのLambda作成する形は以下。
https://qiita.com/rei-ta/items/e86546130d157561ba8e![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83911/2a6a1f95-3dc8-90a9-1745-5e6fa111b27f.png)
configurationから、Function URL (Lambda Function作成後の設定も可能)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83911/927cf5d2-ca9c-5536-2f11-ea9c0a4c45f9.png)
アクセス制御の
コンテナイメージから作るLambdaをSAMでデプロイ
# はじめに
以前、Microsoft365の監査ログを取得するLambdaをコンテナで作りました。
https://qiita.com/a_b_/items/84d6ae3cf8a21b8b332c
これを以下のページを参考に、Cloud9上でAWS SAM CLIでのデプロイにチャレンジしてみました。
https://aws.amazon.com/jp/builders-flash/202107/new-lambda-container-development-4/?awsf.filter-name=*all
# 所感
– AWS SAM CLIを用いると、デプロイまでの手間が減る
– 特に、ECRの作成や管理を考えなくてよいのが大変助かる
– 上記ページでは作っていますが、現時点では不要のようです
– (Cloud9上の)AWS Toolkitのウィザードでも試しましたが、launch.json を使ったデバッグ実行がうまくいかなかった
– AWS SAM CLIのナビゲーションで十分便利なので、GUIのウィザードを使わなくてもよいかも
FastAPI with Lambda + API Gatewayでサーバレスアプリケーションの作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556658/6ec16fbf-ad49-b975-cf6a-642ab0476747.png)
## はじめに
株式会社マイスター・ギルド新規事業部のヒツジーです。
弊社新規事業部では、新規サービスの立ち上げを目指して
日々、アイディアの検証やプロトタイプの作成などを行っています!技術の進歩は目覚ましいので、置いてかれないように新しい技術のキャッチアップにもいそしんでいます!
本記事では、FastAPI with Lambda + API Gatewayでサーバレスアプリケーションを作成する方法をご紹介します。
サーバレスアプリケーションには
– サーバーの管理が不要
– 使った分だけの支払いで済む
– 柔軟なスケーラビリティといったメリットがあり、新規サービスのプロトタイプ作成に向いていると思います。
本記事の手順通りに手を動かすと、さくっとREST APIを作れるようになりますよ!
## やりたいこと
FastAPIで作成
Amazon S3 → Amazon SQS → AWS Lambda を連携する
# はじめに
S3のイベントをSQSキューに入れて、Lambdaに渡すまでの操作をまとめました。
![Screen Shot 2022-08-25 at 22.06.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1809963/d23f455f-42ab-5fd7-4bf8-13b7129ad88a.png)# やること
– Lambda関数の作成 → SQS権限設定
– SQSキューの作成 → Lambdaトリガー設定
– S3バケットの作成 → イベント通知設定# 1. Lambda関数の作成
まずはLambda関数を作成します。
関数名:test-202208(任意のもの)
ランタイム:Python3.9その他はデフォルト設定のまま「関数の作成」
![Screen Shot 2022-08-25 at 20.29.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1809963/0d5abe
C#でラムダ式を書く
# 1. はじめに
* C#でラムダ式を書く方法を1から整理する。
* まずはラムダ式を使用しない書き方から初めて、最終的にラムダ式に書き換えるまでを行う。
* ラムダ式をいきなり覚えようとすると難しが、過去の遍歴を見ると理解しやすいと思う。# 2. ラムダ式を使用しない場合
サンプルとして配列にある文字に対して、指定の長さのものだけを抽出する。“`c#
// メイン処理
var values = new string[] { “1”, “22”, “333”, “4444”, “55555” };
var result = GetValue(values, 4);
Console.WriteLine(string.Join(“,”, result));// メソッド
private string[] GetValue(string[] values, int len)
{
var result = new List();
foreach (var val in values)
{
if (val.Length >=
保存したデータの分析
# データ分析との連携
S3内のオブジェクトやオブジェクトの中身に対し、**データ分析**を行う機能がある。
**S3 Select**と**Amazon Athena**は、CSVやJSONのような構造化されたテキスト形式のデータに対して、SQLのSELECT文を実行する**クエリ機能**。
**Amazon Redshift Specutrum**も同じ機能だが、大量のデータを処理できる。
# データ分析サービス
Amazon S3には、ログやIoT機器から収集したデータなど、後に分析したいデータも含まれるので、データ分析サービスとの連携が用意されている。
S3 SelectとAmazon Athenaは、S3バケットに格納したデータに対して分析するサービス。一方で、Amazon Redshift Spectrumは、S3バケット以外に置いたデータも分析できる。
## S3 Select
S3 Selectは、S3の機能で保存されている1ファイルのデータに対して、SQLを使って、集計や検索ができる機能。
CSVファイルやJSONの他、ログに使われるApache Parquetフォー
なるべく手間をかけずにサーバーレスでCognitoユーザーがAWSマネジメントコンソールへログインできるようにする(ログイン画面も自作しないパターン)
# 経緯
[前回の記事](https://qiita.com/yusuke-takagi/items/9e914c43cc4b80055fb7)でCognitoユーザーがAWSマネジメントコンソールにログインできるようにしましたが、ログイン画面さえも自作しないでできることが分かったので書き残しておきます。具体的にはCognitoユーザープールのホストされたUIを使います。
ホストされたUIでは不満がありログイン画面のデザインや動きを自作したい場合は[前回の記事](https://qiita.com/yusuke-takagi/items/9e914c43cc4b80055fb7)のパターンやウェブアプリを自作すると良いでしょう。# 前提条件
– ユーザーにAWSマネジメントコンソールを使わせたい
– ユーザーはCLIでなく、ブラウザ(ログイン画面)でログインさせたい
– 事情があってAWS SSOに連携するIdPを使えない、使わない
– ログイン画面のためだけにウェブアプリを作りたくない
– サーバーの運用はなるべくしたくない
– IAMユーザーは発行したくない
– 運用チーム
CloudFront導入とCognitoで認証した話
株式会社クラシコム テクノロジーグループの冨田です。
北欧、暮らしの道具店とクラシコムのコーポレートサイトにCloudFrontを導入しました。以前から画像についてはCloudFrontやimgixを利用し配信していました。今回はサイト自体を配信するようにしました。
# 背景
2022年8月に東証グロース市場へ上場しました。
– メディアへの露出が増えたため、突発的なアクセスがきても耐えられるようにしたい。
– 既に導入していた[CloudFront Security Savings Bundle](https://docs.aws.amazon.com/ja_jp/AmazonCloudFront/latest/DeveloperGuide/savings-bundle.html)でコストを抑えたい。という動機からCloudFrontを導入しました。
# やったこと
## Cognitoによる認証
クラシコムの検証環境(ステージング環境)はALBでCognitoによる認証をかけており、社員のみアクセス可能にしていました。今回ALBの前段にCloudFrontを導入し
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マネジメントコンソールへログインできるようにする
# 追記
この記事を書いた後、さらにログイン画面(HTMLをS3でホスティング)の自作も不要なことが分かったため、以下の記事を書きました。
CognitoでホストされたUIが許容できる場合はさらに簡単に実現できます。
https://qiita.com/yusuke-takagi/items/37a51b453673b77bda23# 経緯
タイトルの通りで、私の関わっているサービスで最近わりと切実に実現する必要があったのですが、ググってみてもそのものズバリの情報がなかなか見当たらず、調査にけっこう時間がかかってしまったので他の方々や後の自分が迷いなく実現できるように書き残しておきます。もっと良いやり方があるよという方は教えてください。
# 前提条件
– ユーザーにAWSマネジメントコンソールを使わせたい
– ユーザーはCLIでなく、ブラウザ(ログイン画面)でログインさせたい
– 事情があってAWS SSOに連携するIdPを使えない、使わない
– ログイン画面のためだけにウェブアプリを作りたくない
– サーバーの運用はなるべくしたくない
– IAMユーザーは発行したくない(
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-sampleprovider:
name: aws
runtime: nodejs16.x
region: ap-northeast-1package:
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関数がサブスクライブ
– サ