- 1. Lamda式の理解
- 2. BedrockとPollyを使ってシャドーイングアプリを作ってみた
- 3. AWS SAMを用いてRemixアプリケーションをLambdaへデプロイする
- 4. Lambdaの実行中に、追加データを送ってみる
- 5. AWS Lambda にPythonウェブサーバーを立てる最小のDockerfileを書いた
- 6. Terraformを使ったLambda関数のコンテナイメージ構築
- 7. AWS NAT ゲートウェイ を理解した上で起動&停止 Lambda を用意する
- 8. AWS Lambda Layersを自動更新するGitHub Actions
- 9. AWS Step Functionsでランダムアルファベットに基づくLambda関数の実行
- 10. DockerイメージをLambda関数のデプロイパッケージとして使用する
- 11. 不要なリソースの稼働時間、コストを削減する方法
- 12. 未来を先取り!サーバーレスコンピューティングを徹底解説
- 13. AWS Lambdaを定期的に実行するためにEventBridgeを設定する [Terraformを使用]
- 14. AWS LambdaにGo言語のスクリプトをDockerイメージでデプロイする [Terraformを使用]
- 15. AWS LambdaにGo言語のスクリプトをzipファイル形式でデプロイする [Terraformを使用]
- 16. EC2 上で docker コンテナを使用した Lambda 関数の開発
- 17. ソリューションアーキテクトに求められる視点(14/14) API の使用を制御および制限する方法
- 18. 複数名のGoogleカレンダー予定をAWS Lambdaで取得する
- 19. Lambdaで使ってるNode.jsを18.xにアップデートした話 a.k.a 技術的負債の解消
- 20. Java 関数型インタフェースの理解
Lamda式の理解
# 関数型インターフェスとLambda
Javaでは変数として関数(処理の実装)を受け取るための変数が用意されています。
関数型インタフェースの用途を理解することでLambda式も理解できるかと思います。|変数型|サンプル|
|—-|—-|
|String|”abcdefg”|
|Integer|123456|
|関数型インタフェース|x+yの結果を返す関数|関数型インタフェースについてはjava.util.functionパッケージ内で準備されています。
関数型インタフェースの概要についていくつか説明します。|関数型インタフェース|メソッド|概要|
|—|—|—|
|Function\|R apply(T t)|入力値Tを受け取り、結果Rを返却|
|Predicate\|boolena test(T t)|入力値Tを受け取り、評価結果booleanを返却|
|Consumer\|void accept(T t)|入力値Tを受け取る|
|Supplier\|T get()|結果Tを返却| ## Function\
の
BedrockとPollyを使ってシャドーイングアプリを作ってみた
## はじめに
本記事では、BedrockとPollyを軸にシャドーイングアプリを作成した際の備忘録です。
個人で使用することを想定したアプリであるため、セキュリティ面はあまり考慮していませんのでご了承ください。## アプリの概要
1. Bedrock先生にシャドーイング用の英文テキストを生成してもらう
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1371880/392855d6-2b04-b13f-eaab-5e3bcc5e0394.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1371880/9b8a7fe0-9aa5-c323-2a6a-8173d1725d8e.png)2. 生成してもらった英文テキストをPolly先生が音声データに変換してもらう
![image.png](https://qiita-image-store.s3.ap-northeast-1.a
AWS SAMを用いてRemixアプリケーションをLambdaへデプロイする
## はじめに
[aws-lambda-web-adapter](https://github.com/awslabs/aws-lambda-web-adapter)を使って、とても簡単にRemixで作られたアプリケーションをLambdaにデプロイできたのでその手順をまとめました。
完成品はこちらのリポジトリにあります。
https://github.com/monjara/remix-sam-lambda-example
## 必要なもの
– SAM CLI
– Node.js
– Docker## 階層構造
以下のような階層でプロジェクトを作成します。
“`sh
.
├── remix-app/ # Remixのアプリケーション
│ ├── (Remixのファイル群)
│ ├── Dockerfile # buildしたアプリケーションを実行するためのDockerfile
│ └── run.sh # remix-serveを実行するスクリプト
└── template.yaml # SAMのテンプレートファイル
“`## Remixプロジェクト
Lambdaの実行中に、追加データを送ってみる
# この記事について
よくあるLambdaは次の図のような動きをします。
リクエストを投げるとLambdaの処理が始まって、処理が完了すると結果が返ります。![buffered-response.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233180/ce7aad3b-8911-f739-6139-bda8439d2cf5.png)
この記事では、次の図のようなことをする方法を紹介します。
実行中のLambdaに対して、追加のデータを送信します。![buffered-response-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233180/7604e9ef-75fe-5792-39e2-b319983f68c5.png)
# 利用する環境
Lambdaの実装言語: TypeScript
ランタイム: Node.js 18.x# 何が嬉しいのか
双方向通信をするだけならAPI Gatewa
AWS Lambda にPythonウェブサーバーを立てる最小のDockerfileを書いた
関数URLにアクセスすれば
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118083/3231bf48-ede2-f3f8-7dca-8fb3780a2abb.png)これが動くなら言語、フレームワーク問わずどんなウェブサーバーも動かせそうですね
“`Dockerfile
FROM public.ecr.aws/lambda/python:3.12
COPY –from=public.ecr.aws/awsguru/aws-lambda-adapter:0.8.3 /lambda-adapter /opt/extensions/lambda-adapter
ENV PORT=8080
RUN printf “\n\
import os, http.server, socketserver\n\
class MyHandler(http.server.SimpleHTTPRequestHandler):\n\
def do_GET(self):\n\
se
Terraformを使ったLambda関数のコンテナイメージ構築
# はじめに
AWS Lambdaは、サーバーレスでイベント駆動型のコンピューティングサービスです。従来のLambda関数ではzipファイルでコードをアップロードしていましたが、コンテナイメージを使用することで、より柔軟で強力な開発・デプロイが可能になります。
本記事では、Infrastructure as CodeツールであるTerraformを用いて、Lambda関数として実行するコンテナイメージを構築し、AWS環境へデプロイする手順を解説します。制作したレポジトリはこちらです。
https://github.com/sugiyama404/practice_lambda_docker
参考にしたサイト
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/python-image.html#python-image-instructions
# 目的
Lambda関数をコンテナイメージで実行することにより、柔軟性とパフォーマンスを向上させることを目指します。
# インフラ構成
![aws.png](https:/
AWS NAT ゲートウェイ を理解した上で起動&停止 Lambda を用意する
# 実現したいこと
既存のAWSのバックエンドシステムにおいて、コスト削減のため開発環境とステージング環境のNATゲートウェイ(NAT Gateway)を夜間と休日の間は停止させるべく、NATゲートウェイを起動・停止させるLambdaを作成します。# 待て、まだコードを書こうとするな
「NATゲートウェイ 自動 停止」とかで検索すると少ないながらもいくつか記事が出てきますが、理解せずにそれをまるまるコピペして実行させるだけではうまくいかないことが多いですし、望まないNAT削除をしてしまう可能性があります。
NATゲートウェイ、ルートテーブル、Elastic IPなどが自分の開発しているシステムではどのように設定されていて、どのリソースを操作すれば良いかをちゃんと理解する必要がありました。こちらは開発していたシステムの構成図を、NATゲートウェイ周りだけを抽出して描いたものです。
手描きでごめんなさい。(手で描いた方が頭に残ると思って。)
これを基にNATゲートウェイ周りを説明します。![IMG_0214.jpg](https://qiita-image-store.s3.a
AWS Lambda Layersを自動更新するGitHub Actions
# はじめに
あの若干面倒なAWS LambdaのLayersをGithubActionsで自動更新するプロセスを組みましたので参考にしていただければ!!(備忘録も兼ねて)
また、本記事内ではアクセスキーとシークレットキーを使った認証ではなく、OIDC認証で実施していますので以下の記事を参考にしていただければ問題ないかと思います。
https://qiita.com/frei_aqua/items/c284a1249dac84c881cb
# 前提
– Python
– Pipenv環境
– Lambda関数を作成済み
– Layersも紐づけ済み(設定オプション的に紐づけもコマンドで行けそうか?要検証)# 本体
お急ぎの方もいるかと思いますので先にymlを貼っておきます。
“`yaml
name: Layer Updateon:
push:
branches:
– main
paths:
– “Pipfile”env:
REGION_NAME: your-region
FUNCTION_NAME: 対象のf
AWS Step Functionsでランダムアルファベットに基づくLambda関数の実行
AWS Step Functionsは、分散システムの調整や状態管理を簡単にするための強力なツールです。今回は、Step Functionsを使って、ランダムなアルファベットを生成し、その結果に基づいて異なるLambda関数を実行する方法をご紹介します。このプロセスを通じて、StepFunction の基礎の基礎を学びます。
具体的には、まずランダムなアルファベット「A」、「B」、「C」を生成するLambda関数を呼び出し、その結果に基づいて「A_Process」、「B_Process」、「C_Process」のいずれかのプロセスを実行します。それぞれのプロセスは別々のLambda関数で処理され、最終的に結果を出力するLambda関数が呼び出されます。この一連の流れをStep Functionsでどのように実装するかを詳しく解説します。
### Step Function の構成
完成時の Step Function の構成は以下の通りです。
![stepfunctions_graph (2).png](https://qiita-image-store.s3.ap-northea
DockerイメージをLambda関数のデプロイパッケージとして使用する
# 手順
## Dockerfileの作成
“`Dockerfile:Dockerfile
# 使用するベースイメージを指定
FROM public.ecr.aws/lambda/python:3.12# 必要なパッケージをインストール
COPY requirements.txt ./
RUN pip install -r requirements.txt# Lambda関数のコードをコピー
COPY app.py ./# Lambda関数のハンドラを指定
CMD [“app.lambda_handler”]
“`## Lambda関数のコードを作成
“`app.py
def lambda_handler(event, context):
return {
‘statusCode’: 200,
‘body’: ‘Hello from Docker Lambda!’
}
“`## 必要なパッケージを記載したrequirements.txtの作成
“`requirements.txt
# 例:reques
不要なリソースの稼働時間、コストを削減する方法
## はじめに
今回は、**不要なリソースの稼働時間、コストを削減する方法**について、整理しました。今回ご紹介する内容を活用すると、毎回、必要な時ににインスタンスを起動したり、停止したりする手間が減るので、アプリケーション開発に集中する事が出来ると思います。## **想定されるケース**
**開発チームとテストチームは、営業日の営業時間中に作業しますが、本番環境は 24 時間、365日稼働しています。最小限の運用労力でコストを削減するために何をすべきでしょうか?**## **ソリューション**
最小限の運用労力でコストを削減するために、開発およびテスト環境のリソースを営業時間外に停止し、営業時間中に再起動することが効果的です。これにより、不要なリソースの稼働時間を削減し、コストを削減できます。営業日の夕方に実行される Amazon EventBridge ルール`StopInstancesRule`を作成します。タグに基づいてインスタンスを停止する AWS Lambda 関数`StopInstancesFunction`を呼び出すようにルールを設定します。営業日の午前中
未来を先取り!サーバーレスコンピューティングを徹底解説
# はじめに
サーバーレス大好きなエンジニアです!
今日は、最近急上昇中の「サーバーレスコンピューティング」について紹介します!
サーバーレスの実態や使われている事例も含めて書いていきたいと思います!# 対象読者
– サーバーレスコンピューティングに興味がある方
– 最新の技術トレンドを追いかけたい方
– クラウド技術に関心のある方
– 新しいアーキテクチャの設計を学びたい方# 目次
1. サーバーレスコンピューティングとは
2. サーバーレス技術の進化とトレンド
3. サーバーレスのメリットとデメリット
4. サーバーレスアーキテクチャの設計方法
5. 実際のケーススタディと成功事例
6. サーバーレスを使用する際のベストプラクティス
7. 今後のサーバーレスの展望# 1. サーバーレスコンピューティングとは
サーバーレスコンピューティングという言葉を初めて聞いたとき、多くの人は「サーバーが無くなるの?」と驚くかもしれません。でも、実際には「サーバー」そのものがいつもそこにあるのです。サーバーレスコンピューティングとは、クラウドプロバイダーによってサーバー管理が完
AWS Lambdaを定期的に実行するためにEventBridgeを設定する [Terraformを使用]
## 要約
最終的なソースコード全体は以下のリンクからご確認いただけます。https://github.com/mochi-yu/qiita-material/tree/main/lambda-with-event-bridge-by-terraform
## 関連記事
Go言語で記述したスクリプトを、**AWSのLambdaにTerraformを用いてデプロイする**機会があり、その過程の試行錯誤を整理して一連の記事にまとめました。この記事はそのうちの3本目として、GoのスクリプトをAWS EventBridgeから定期実行する構成をデプロイしてみたいと思います。
– [zipファイルを用いてGo言語の処理をAWS Lambdaにデプロイする](https://qiita.com/mochi_2225/items/1b645f87148899f1bc09)
– [Dockerイメージを用いてGo言語の処理をAWS Lambdaにデプロイする](https://qiita.com/mochi_2225/items/000ee604b3a274b6b62d)
– **Even
AWS LambdaにGo言語のスクリプトをDockerイメージでデプロイする [Terraformを使用]
## 要約
最終的なソースコード全体は以下のリンクからご確認いただけます。https://github.com/mochi-yu/qiita-material/tree/main/golang-lambda-by-docker-with-terraform
## 関連記事
Go言語で記述したスクリプトを、**AWSのLambdaにTerraformを用いてデプロイする**機会があり、その過程の試行錯誤を整理して一連の記事にまとめました。この記事はそのうちの2本目として、Dockerイメージを用いてLambdaにスクリプトをデプロイしてみたいと思います。
– [zipファイルを用いてGo言語の処理をAWS Lambdaにデプロイする](https://qiita.com/mochi_2225/items/1b645f87148899f1bc09)
– **Dockerイメージを用いてGo言語の処理をAWS Lambdaにデプロイする**(この記事)
– [EventBridgeからAWS Lambdaを定期実行する処理をデプロイする](https://qiita.com/mo
AWS LambdaにGo言語のスクリプトをzipファイル形式でデプロイする [Terraformを使用]
## 要約
最終的なソースコード全体は以下のリンクからご確認いただけます。https://github.com/mochi-yu/qiita-material/tree/main/golang-lambda-by-zip-with-terraform
## 関連記事
Go言語で記述したスクリプトを、**AWSのLambdaにTerraformを用いてデプロイする**機会があり、その過程の試行錯誤を整理して一連の記事にまとめました。この記事はそのうちの1本目として、zipファイルを用いてLambdaにスクリプトをデプロイしてみたいと思います。
– **zipファイルを用いてGo言語の処理をAWS Lambdaにデプロイする**(この記事)
– [Dockerイメージを用いてGo言語の処理をAWS Lambdaにデプロイする](https://qiita.com/mochi_2225/items/000ee604b3a274b6b62d)
– [EventBridgeからAWS Lambdaを定期実行する処理をデプロイする](https://qiita.com/mochi_22
EC2 上で docker コンテナを使用した Lambda 関数の開発
EC2(Amazon Linux2) から dockerコンテナを使用して lambda 関数を作成する手順を記録しておきます。
それぞれについて、軽く説明しておきます## docker
docker の使い方として、以下二つの方法があると思います。今回は docker 環境で開発をしていきます。
1. ローカルで開発して、docker 環境でアプリケーションを動作させる
2. docker 環境で開発して、アプリケーションを docker で動作させる具体的には、docker とボリュームをマウントした環境で開発を行った後に、Docker image を ECR に Push して、Lambda 関数を作成します。
## 手順
0. EC2 にSSH接続する
1. docker をインストールします
“`
$ sudo yum install -y docker
$ sudo service docker start
$ sudo usermod -a -G docker ec2-user
$ sudo docker info
ソリューションアーキテクトに求められる視点(14/14) API の使用を制御および制限する方法
## はじめに
ソリューションアーキテクトに求められる視点を整理してみました。今回は、**API の使用を制御および制限する方法**です。実務や試験で、ご参考にして頂けましたら、幸いです。
## **アーキテクトに求められる視点**
Amazon API Gateway API を作成し、その API を外部の開発チームと共有している。
API は AWS Lambda 関数を使用し、本番ステージにデプロイされている。
API の使用量は特定の時間に急増し、コスト増加の懸念が生じている。
Lambda 関数を作り直すことなく、コストと使用量を制限する必要がある。## **ソリューション**
API Gateway API キーと使用プランを作成する。使用プランでスロットル制限とクォータを定義する。使用プランを本番ステージと API キーに関連付ける。API キーを外部開発チームと共有する。:::note info
API キーと使用プランを作成すると、API の使用を制御および制限できます。使用プランでは、スロットリング制限 (1 秒あたりのリクエスト数) とクォータ (
複数名のGoogleカレンダー予定をAWS Lambdaで取得する
# はじめに
部署やグループ全体のスケジュール調整にはGoogleカレンダーを利用するのが便利ですが、複数のカレンダーを同時に確認するのは手間がかかります。
そこで、GoogleカレンダーAPIを使用して複数人分のスケジュールを取得する方法を紹介します。この処理は主にAWS Lambdaを使用して実装しました。# 1. GCPでサービスアカウントを用意
まず最初に、GoogleカレンダーAPIを利用するためには、Google Cloudのプロジェクトを作成し、サービスアカウントを設定する必要があります。このサービスアカウントにドメイン全体の委任を行い、`/auth/calendar.readonly`といったスコープを設定します。※ワークスペースの管理者権限が必要
このサービスアカウントのサービス アカウント キーやWorkload Identity 連携を利用しサービスアカウントの権限でAPIを叩きます。# 2. 予定を取得するLambda関数
次に、実際に予定を取得する処理をAWS Lambdaで実装します。実行者のメールアドレスをcredentialのsubjec
Lambdaで使ってるNode.jsを18.xにアップデートした話 a.k.a 技術的負債の解消
# Node.js 14.xから18.xへのバージョンアップと周辺技術の更新
ソフトウェアの進化は早く、定期的なアップデートは避けて通れません。
https://qiita.com/autotaker1984/items/a3091772dbb0fb91473d
このたび、サービスで利用しているLambdaのランタイムにおいて、Node.jsをバージョン14.xから18.xへとアップデートしました。
このことに伴い、多くの周辺ライブラリやツールもアップデートまたは置き換えを行いました。
本記事では、その過程で直面した障壁とそれを乗り越えた経験を重点的に紹介します。## アップデートの背景
大きな理由としてNode.jsの14.xバージョンがサポート終了を迎え、AWSのLambdaでも14.xがDeprecatedとなったことから、アップデートを決断しました。
Node.jsの16.xも検討しましたが、すでに対応した当時であってもサポート終了が2024年6月12日と間近に迫っていため、18.xにアップデートしました。
https://docs.aws.amazon.co
Java 関数型インタフェースの理解
# はじめに
ラムダ式、メソッド参照を用いることで簡潔なコード記述を可能になり、直感的なプログラミングが可能になります。
[関数型インタフェース](https://docs.oracle.com/javase/jp/8/docs/api/java/util/function/package-summary.html)# コード比較
今回は関数型インタフェースSupplierを用いた”Hello world”をコンソール出力するサンプルコードを比較する### 従来のコード
抽象メソッドについては、オーバーライドによって中身の実装を行います。
“`
@FunctionalInterface
interface Greeting {
String getGreeting();
}public class App {
public static void main(String[] args) {
Greeting greeting = new Greeting() {
@Override
publi