- 1. 【AWS×Webアプリ】CloudFrontのキャッシュ削除(Terraform)
- 2. ECSタスクをスケジュール管理してコスト削減する方法
- 3. CloudFormationでlambdaのソースコードを更新する方法
- 4. [Lambda]Pythonライブラリをアップロードする
- 5. python-lambda-local を使って AWS Lambda 関数をローカル環境で実行する
- 6. MacでLambdaレイヤーARMアーキを作成
- 7. CDK×Lambda×golang×Dynamoでアプリを作ってみる DynamoDB処理のLambda実装編PUT&DELETE(第五回)
- 8. 【Python】Lambda Layerの作成方法
- 9. 【Lambda】Parameter Storeの値を取得する処理を共通化する
- 10. 【Lambda】Supabaseに接続する
- 11. 【ALB・CloudWatch・Lambda】サーバーダウン等の異常をALBで検知した際にSlackに通知する
- 12. GithubActionsでECRのImageをもとにLambdaをデプロイする方法
- 13. 【Cognito】メール認証、電話認証をせずにユーザー認証させるように頑張ってみたお話
- 14. CDK×Lambda×golang×Dynamoでアプリを作ってみる DynamoDB処理のLambda実装編GET&POST(第四回)
- 15. AWSの利用をZscalerからに制限する
- 16. [過去記事]lambdaからAPI Keyが設定されたAPIを実行する
- 17. [過去記事]AWS lambda Node.jsの追加モジュールを使って他のAPIを実行してみる(requestモジュール使用 現在は非推奨)
- 18. [過去記事]AWS lambda Node.jsの追加モジュールを使用せず他のAPIを実行してみる
- 19. [過去記事]AWS S3のバケットのCSVが更新・登録されたことをきっかけにLambda関数を実行してみよう!
- 20. 【AWS×Webアプリ】CloudFrontのキャッシュ削除(SAM)
【AWS×Webアプリ】CloudFrontのキャッシュ削除(Terraform)
## 目的
・AWS上の静的Webサイトホスティングを有効にしたS3をCloudFrontで公開。
・S3のコンテンツを更新した際に、CloudFrontのキャッシュ削除を行うLambdaを実装。## 前提条件
・Terraformを使用してAWS上にリソースを作成する。
・Pythonを使用してLambdaを実装する。
・作成する内容は以下と同様https://qiita.com/Haruki-N/items/f9e8fb32fd20285b57ad
## TFファイル
“`aws_s3.tf(前回からの追加箇所のみ抜粋)
resource “aws_s3_bucket_notification” “WebBucket_notification” {
bucket = aws_s3_bucket.WebBucket.idlambda_function {
lambda_function_arn = aws_lambda_function.DeleteCache.arn
events = [“s3:ObjectCreat
ECSタスクをスケジュール管理してコスト削減する方法
サービスのデプロイ先をLambdaからECS on Fargateに変更するにあたり、本番環境以外にかかるコストをできるだけ削減しようと、いろいろ試みてきました。
– vCPUとメモリを最小構成(0.25 vCPU, 0.5 GB)にする
– Fargate Spotを使用するECS側の設定で工夫できるのはこれくらいだったのですが、1時間あたりのvCPUとメモリ単位でコストがかかる料金体系ということで、LambdaとEventBridgeで業務時間外だけECSタスクを停止するような仕組みをつくりました。
Lambda関数のコードやEventBridgeのTerraform設定などをそのまま記載するので、コピペしてコスト削減に活用していただければ幸いです。
https://aws.amazon.com/jp/fargate/pricing/
# Lambda関数
EventBridgeとの組み合わせでスケジュール実行できるため、ECSタスクの停止と起動処理の実行環境にはLambdaを選びました。単一責任の原則(Single responsibility principle)
CloudFormationでlambdaのソースコードを更新する方法
# 背景
CloudFormation(以降、cfnと記載)を使用して、lambdaソースコードの更新を行いたい時があると思います。
cfnでは、テンプレートファイルに変更があれば更新してくれますが、lambdaのソースコードをS3にアップロードしている場合、lambdaのS3BuketやS3Keyは変化しないので、テンプレートファイルには変更が起きず、結果的にcfnでの更新ができません。
“`
Resources:
layer:
Type: AWS::Lambda::LayerVersion
Properties:
Description: ‘pacakge deploy test layer’
LayerName: ‘PacakgeDeployTestLambdaLayer’
Content:
S3Bucket: Hoge
S3Key: Layer.zip // Layerの内容を更新してもここの値は一定Lambda:
Type: AWS::Lambda::Fu
[Lambda]Pythonライブラリをアップロードする
## まとめ
“`bash
mkdir hoge
cd hode
pip3 install ライブラリ名 -t .
“`## 経緯
– Slackに記事のURLが投稿された時、その記事の要約をPerplexity APIを使用して投稿したい
– AWS Lambdaに置くか
– pythonのライブラリ必要やん!
– ほな入れよか“`zsh
pip3 install requests /rss_summaryerror: externally-managed-environment
× This environment is externally managed
╰─> To install Python packages system-wide, try brew install
xyz, where xyz is the package you are trying to
install.If you wish to install a Python library that isn’t in Homebr
python-lambda-local を使って AWS Lambda 関数をローカル環境で実行する
# はじめに
Lambdaのプログラムをテストする際、毎回 Lambda 関数を更新して実行するのは面倒ではないですか?
そこで良い方法ないかなと調べていたところ、 **python-lambda-local** というツールを知りました。https://github.com/HDE/python-lambda-local
# 仕様
Python 3.7+
今回試した環境のバージョンは 3.9.6 でした。
“`bash:バージョン
$ python3 –version
Python 3.9.6
“`# インストール
pip でインストールすれば完了です。“`bash:インストール
$ pip install python-lambda-local
“`# オプション
使い方とオプションは以下になります。“`bash:使い方
$ python-lambda-local [-h] [-l LIBRARY_PATH] [-f HANDLER_FUNCTION]
[-t TIMEOUT] [-a ARN_ST
MacでLambdaレイヤーARMアーキを作成
# はじめに
***arm64でLambda関数をデプロイせざるを得ないケースで、Layerを追加したい場合向け。*** imageデプロイを使えばどうとでもなるのだが、それは根本解決にはならない。前に一度やったのだが、やり方を失念してしまったため、備忘として記録する。
Cloud9やEC2を使ってLayerを作成する方法もあるが、***AWSが提供するdocker imageを使えばローカル環境であらゆるLayerを作成できるし、インタラクティブにやりたい***ので、本記事ではその方法について記述する。# 環境
– 言語: python3.12
– OS: macOS Sonoma14.5
– RAM: 64GB
– Docker: 25.0.3# 手順
この[Docs](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/python-layers.html#python-layer-compatibility)で推奨されている通り、Amazon Linuxベースコンテナイメージに基づくDocker環境に依存関係をイン
CDK×Lambda×golang×Dynamoでアプリを作ってみる DynamoDB処理のLambda実装編PUT&DELETE(第五回)
さて、今回は更新と削除のメソッドを作成していきたいと思います!
とは言っても構造体などはgetItemやputItemに似ているので非常に分かりやすかったです。とりあえず全体像は以下の通りになります。
“`
package mainimport (
“encoding/json”
“net/http”“github.com/aws/aws-lambda-go/events”
“github.com/aws/aws-lambda-go/lambda”
“github.com/aws/aws-sdk-go/aws”
“github.com/aws/aws-sdk-go/aws/session”
“github.com/aws/aws-sdk-go/service/dynamodb”
“github.com/aws/aws-sdk-go/service/dynamodb/dynamodbattribute”
)var (
tableName = “MyDynamoDB”
dynamoDb = dynamodb.New(session.Must(sess
【Python】Lambda Layerの作成方法
# Lambda Layerを作成したいがめんどくさい
Lambda LayerはAWS Lambdaに標準で用意されていないライブラリや自分で作成した関数などを取り込む際に利用します。
一見zipファイルを作成してアップロードするだけなんですが、いくつか落とし穴があります
– Amazon Linuxで作成する必要がある(場合がある)
– LambdaはAmazonLinuxで動いている
– macOSなどでインストールしたものがAmazonLinuxで動かない場合があるため
– 求められるディレクトリ構造が実はある
– apiでのzipアップロードはファイルサイズの制限があるなどなどで躓いたのでやり方をまとめておきます
## AmazonLinuxでのpython実行環境の用意
構築方法は別記事にまとめました。ローカル環境(macOSやWindows)でインストールしたライブラリをアップロードすると、動くときもありますが動かないときもあります。仮に動いたとしても、基本的にはAmazonLinuxで作成するほうが良いでしょう。
pythonはLambdaで使用す
【Lambda】Parameter Storeの値を取得する処理を共通化する
## まとめ
処理をmjsファイルに記述してレイヤー登録する
—
例として、supabaseを使用するためのパラメータを登録・取得してみます
lambdaからsupabaseをいじいじする記事は[こちら](https://qiita.com/akitika/items/3ef5aeb279ac5e9fc97d)## 1. ファイルの用意
“`bash
touch getParameters.mjs
“`## 2. 処理をmjsファイルに記述
以下のように記述してみます
“`js:getParameters.mjs
import { SSMClient, GetParameterCommand } from “@aws-sdk/client-ssm”;const client = new SSMClient({ region: “ap-northeast-1” });
export async function getParameter(name) {
const params = {
Name: name,
WithDecrypt
【Lambda】Supabaseに接続する
## まとめ
zip化したnodejsをレイヤーとして使う
## 1. Node.jsランタイムを使用する
当初はpythonを使用するつもりだったのですが、pythonでsupabaseライブラリを使うのが結構面倒だったので、nodeを使用しました
## 2. レイヤーとして使用するnodejsを用意 -> デプロイ
“`bash
# nodejsディレクトリを作成
mkdir nodejs
cd nodejs# supabaseライブラリをインストール
npm init
npm install supabase# zip化
cd ../
zip -r hogehoge.zip nodejs
“`:::note alert
注意1: 作成するディレクトリ名は必ず**nodejs**という名前にすること
注意2: ファイルではなく**nodejsディレクトリ自体をzip化する**こと
:::
zipファイル自体の名前はなんでもOKです
作成したzipをlambdaのレイヤーとしてデプロイしましょうレイヤー登録のわかりやすい手順は[こちら](http
【ALB・CloudWatch・Lambda】サーバーダウン等の異常をALBで検知した際にSlackに通知する
## 自己紹介
はじめまして、はる([@lemonade_37](https://twitter.com/lemonade_37))と申します。
駆け出しエンジニアとして約3ヶ月が経過しました🐣## 概要
サーバーダウンにいち早く気づき、異常の対処や再起動ができるために、
ALBの異常を検知した際に、Slackに通知を送る機能を実装します。
下記の構成でEC2にデプロイされており、ロードバランサー(ALB)で1分毎にHTTPリクエストを送信し、サーバーが起動しているか確認する機能はすでに導入されている前提とします。今回のインフラ構成図のイメージです。
![Qiita記事用.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3471604/4ef7cf57-ad9b-7141-0c5a-298fee473b65.png)### 環境
– Docker
– Ruby 3.2.3
– Rails 7.1.3
– PostgreSQL:::note warn
間違っている箇所や、紹介
GithubActionsでECRのImageをもとにLambdaをデプロイする方法
## 概要
– GithubActionsと ECRのイメージをもとにLambdaをデプロイするCICDを構築したため、記録として残しておく。
– 本記事を通して、下記が実現できるように記載していく
– ローカルでコード編集
– Commitして、GithubへPush
– GithubActionsが実行
– 編集後のコードをLambdaに自動デプロイする
– 最終的な構成として、キャプチャのよう流れとなる![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3531653/416025ea-2643-0084-e630-25d3625f83bd.png)
## 前提
– Githubの操作(CommitやPushなど)経験があること
– AWSのアカウントがあること
– この記事内ではオレゴンリージョンを使用しているため、リージョンコードが `us-west-2`で進めています。なので、東京リージョンなどを使用する際は適宜書き換えてください
– C
【Cognito】メール認証、電話認証をせずにユーザー認証させるように頑張ってみたお話
## 結論
ユーザー登録後(ここ重要)lambdaで強制的に権限を変更する
つまり、登録からログインする前に何かしらでlambdaを起動させる必要がある## サインアップフォーム
“`js:signin.tsx
import React, { useState } from ‘react’;
import { CognitoUserAttribute, CognitoUserPool } from ‘amazon-cognito-identity-js’;
import { poolData } from ‘../../../../lib/cognito’;export const SignUp = () => {
const router = useRouter()
const [state, setState] = useState({
password: ”,
email: ”,
error: ”
});const handleChange = (event) => {
setState({
..
CDK×Lambda×golang×Dynamoでアプリを作ってみる DynamoDB処理のLambda実装編GET&POST(第四回)
さて、今回は以下のようにファイルを記述してAPIGatewayで用意したエンドポイントへアクセスし、DynamoDBのレコードを作成&取得できるようにしていきます。長くなってしまうので今回はGETとPOSTをまずは作成し、次回更新と削除を実装していきたいと思います。
いつも通り詳しい解説をしていきます。
“`lambda/dynamoDBHandler/main.go
package mainimport (
“github.com/aws/aws-lambda-go/events”
“github.com/aws/aws-lambda-go/lambda”
“github.com/aws/aws-sdk-go/aws”
“github.com/aws/aws-sdk-go/aws/session”
“github.com/aws/aws-sdk-go/service/dynamodb”
“github.com/aws/aws-sdk-go/service/dynamodb/dynamodbattribute”
“encoding/json”
“net/http
AWSの利用をZscalerからに制限する
# 概要
AWSのセキュリティを強化する機能としては、MFA(多要素認証)が一般的です。
しかしMFAを利用しても、自宅からアクセスできてしまう問題があります。
また複数のAWSアカウントを管理し、IAMユーザが数百人に達すると、全ユーザの動向を把握するのは難しくなります。
メンバ管理をしている責任者が適切に運用してくれないと、退職したユーザにアクセスされてしまう可能性もあります。アクセスキーにMFAを強制するとロジックの作り込みが必要になりますし、人間がアクセスキーを使用する際には手順が増え、ユーザに説明するのも、自分が利用するのも手間がかかります。
このような問題は、IP制限を設定することで多くが解決できます。アクセスキーが漏洩した場合のリスクも大幅に抑えられます。
会社からのアクセスに限定するには、自社拠点のIPアドレスに制限すれば良いのですが、弊社では全クライアントにZscalerがインストールされているためこの方法が使えません。
本記事では、Zscaler環境下でAWSにIP制限をかける方法、特にその運用の自動化を解説します。
なお、これを読みに来た人はZs
[過去記事]lambdaからAPI Keyが設定されたAPIを実行する
## 前提
今回のlambdaはNode.js 18.xを使います。また関数の作成など細かい方法は下記で記載しているので省略します!
要リンク用意(モジュール無し)
要リンク用意(モジュールあり)
また、API Keyが設定されているAPIは別のlambda関数を用意します。今回は下記の記事で作成したreturnHello関数をそのまま使ってみます!
https://qiita.com/miriwo/items/aee5fbe285a1338daac9
## 今回作るもの
![private__Online_Whiteboard_for_Visual_Collaboration-3-1024×528.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/e24a77c2-cb3e-13e8-947c-f239f412e315.png)
lambda関数2個とAPI Key付きのAPIをAPI Gateway作成します。
### lambda関数1つ目(returnHello関数)
[過去記事]AWS lambda Node.jsの追加モジュールを使って他のAPIを実行してみる(requestモジュール使用 現在は非推奨)
## 今回つくるもの
![private__Online_Whiteboard_for_Visual_Collaboration-2-1024×388.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/c1ae4144-f89e-c20a-4b13-279dddc59d70.png)
今回は前回の内容と似ていて、lambdaを用いてQiitaのユーザー情報APIを実行しレスポンスをconsole.logで出力してみようと思います!ただし!今回APIリクエストを実行する際は既存のhttpsモジュールではなく、requestモジュールを使って見ようと思います!
## 前提
今回の作業は前回と同様にAWSアカウントを持っていることを前提とします。さらにlambda関数作成権限とIAMロール作成権限が必要です。
今回requestモジュールのインストールはローカルのPCを用いて作成します。ローカルPCでnpmコマンドが実行できるようにしておいてください。また、ローカルのNode.jsのバージ
[過去記事]AWS lambda Node.jsの追加モジュールを使用せず他のAPIを実行してみる
## 今回作るもの
![private__Online_Whiteboard_for_Visual_Collaboration-1-1024×429.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/e93efa46-4472-86c2-880a-e3414044a6c9.png)
今回はlambdaを用いてQiitaのユーザー情報APIを実行しレスポンスをconsole.logで出力してみようと思います!
## 前提
今回の作業にはAWSのアカウントを持っていることを前提とします。また、lambda関数作成権限とIAMロール作成権限が必要です。
## 準備
### lambda
まずはブラウザからAWSにログインしコンソールを開き、lambdaのホームまで移動しましょう。
その後、左サイドバーの「関数」をクリックし、開いたページで「関数の作成」をクリックしましょう。![関数_-_Lambda-1024×365.png](https://qiita-image-store.s
[過去記事]AWS S3のバケットのCSVが更新・登録されたことをきっかけにLambda関数を実行してみよう!
## 前提
本記事の内容は以前に記載した下記記事実施直後の状態から実施してゆきます。
https://qiita.com/miriwo/items/7470659f070504e0fafe
## 今回つくるもの
S3の指定したバケットの指定したフォルダにCSVファイルがアップロード、もしくは既存のCSVが更新された時に下記で作成した「Hello for lambda!」を返すLambda関数を実行するようにしてみます!
https://qiita.com/miriwo/items/7470659f070504e0fafe
S3のCSVを登録・更新する作業は手作業で実施しようと思います。
![Cursor_と_private__Online_Whiteboard_for_Visual_Collaboration-1024×402.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/d4b777c0-b8e4-fdb2-420f-13e6a92018ae.png)
## 準備
##
【AWS×Webアプリ】CloudFrontのキャッシュ削除(SAM)
## 目的
・AWS上の静的Webサイトホスティングを有効にしたS3をCloudFrontで公開。
・S3のコンテンツを更新した際に、CloudFrontのキャッシュ削除を行うLambdaを実装。## 前提条件
・SAMを使用してAWS上にリソースを作成する。
・Pythonを使用してLambdaを実装する。## 完成イメージ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3637963/4052117a-cea8-9fa3-e301-6712765433d2.png)## SAMテンプレート
“`template.yaml
AWSTemplateFormatVersion: ‘2010-09-09’
Transform: AWS::Serverless-2016-10-31Resources:
WebBucket:
Type: AWS::S3::Bucket
Properties:
BucketName: !Sub ${AWS::Sta