- 1. 【AWS】S3に格納したExcelファイルをLambdaで読み込んでEC2にタグ付けする
- 2. AWS Lambda Function URLを利用して、Amazon Timestreamにデータを書き込む
- 3. AWS Elemental MediaConvertを利用して、動画の拡張子をmp4に自動変換する構築
- 4. ServerlessFrameworkでLambdaをVPCの中にいれようとしたらEC2の権限エラーがでる
- 5. AWS自主学習 ハンズオン コンテナ・SQS・Lambda・S3
- 6. S3更新時、CloudFrontのキャッシュを削除するLambdaをイベント通知で実行
- 7. コンテナイメージを利用した簡単なLambdaを作成する
- 8. Lambda でコンテナを実行する
- 9. AWS日記47(API Gateway – CORS)
- 10. 【AWS CDK v2】IPを固定化したLambdaの作成方法
- 11. AWS Lambdaを使って関数を定期実行する
- 12. aws lambda の Runtimeをnodejs12.xからnodejs16.xにaws cli を使って 一括で切り替えたメモ
- 13. 【EC2】自動停止・起動設定をLambdaで書いてEC2タグで設定する
- 14. ServerlessFrameworkでLambda(Go)を動かしたらファイルが見つからずエラーになる
- 15. AWS Lambdaのイベントソースマッピング系のコマンド色々
- 16. 最大実行時間9分→60分になった第二世代CloudFunctionsを使ってみた。
- 17. AWS Lambdaで動かすStable Diffusion/Waifu Diffusionをちょっと効率的に使うTips
- 18. Python lambda解説
- 19. AWSに特化したChaliceフレームワークを触ってみた
- 20. Lambda(Python)のテストイベントを作成するために、関数の先頭に入れる1行
【AWS】S3に格納したExcelファイルをLambdaで読み込んでEC2にタグ付けする
# はじめに
久しぶりにコードを書く機会があったのでそこで使用したコードの一部をテンプレートっぽく記事として残そうと思います。
エクセルファイルを読み込んで、その他のサービス(SystemsManagerやEventBridgeなど)に対して処理を行う場合のコードとかも
別のタイミングで記事として残そうと思っていますので興味がある方は読んでみてください。今回の検証では以下のサービスを使用します。
* S3
* EC2
* Lambda(python3.9)# 目次
1. [処理の概要](#処理の概要)
1. [インプットデータを作成する](#インプットデータを作成する)
1. [IAMロールを作成する](#iamロールを作成する)
1. [Lambda関数を作成する](#lambda関数を作成する)
1. [Iamロールを作成する](#iamロールを作成する)
1. [Lambdaを実行する](#lambdaを実行する)
1. [タグの確認](#タグの確認)
1. [さいごに](#さいごに)# 処理の概要
S3に格納したエクセ
AWS Lambda Function URLを利用して、Amazon Timestreamにデータを書き込む
[Amazon Timestream](https://docs.aws.amazon.com/timestream/index.html) は、AWSの時系列データベースサービスで、IoTなどのデータシンクとしてよく利用されるようです。
今回、[InfluxDB](https://www.influxdata.com/) で運用しているデータシンクをAmazon Timestream に置き換えるため、HTTPのAPIを経由して Amazon Timestream に最も簡単に書き込む方法を検討しました。その結果、もっとも簡単そうな構成について情報を共有します。## 構成の概要
外部サービス ⇒ [Function URL](https://docs.aws.amazon.com/lambda/latest/dg/lambda-urls.html) ⇒ [AWS Lambda](https://docs.aws.amazon.com/lambda/index.html) ⇒ [Timestream](https://docs.aws.amazon.
AWS Elemental MediaConvertを利用して、動画の拡張子をmp4に自動変換する構築
# はじめに
AWS Elemental MediaConvertを利用して、様々な拡張子の動画をmp4に変換する構築についてまとめます。
下記が変換フローになります。1. アップロード用S3に動画・画像をアップロードする
1. Lambdaにイベント通知する
3. 画像の場合、視聴用S3にコピーする
3. 動画の場合、MediaConvertを使い、拡張子をmp4に変換
1. ユーザーが動画・画像にアクセスし視聴する
1. Media Convert で動画をS3にアップロードする前に、アクセスされた場合、オリジンフェールオーバーし、オリジン先がアップロード用S3に変更6.に関して、Media Convertが実行完了する時間が長い場合、S3にアップロードされる前にリクエストされる可能性があります。
その際に、表示されるよう、オリジンフェールオーバーを利用しています。![スクリーンショット 2022-10-04 17.28.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/98874
ServerlessFrameworkでLambdaをVPCの中にいれようとしたらEC2の権限エラーがでる
# はじめに
ServerlessFrameworkで作成したLambdaにRDS通信を設定する作業を行っていたときに、VPC設定でつまづいたのでまとめます
設定の参考になる記事はあったのですが、説明が不足していたようだったので解決方法をまとめます# 問題
ServerlessFrameworkでVPCの設定を行います
そこで以下の記事を参考に、IAMにEC2の権限を付与しました“`yml:serverless.yml
iamRoleStatements:
– Effect: “Allow”
Action:
– “ec2:CreateNetworkInterface”
– “ec2:DescribeNetworkInterfaces”
– “ec2:DeleteNetworkInterface”
Resource:
– “*”
“`しかし、実行コマンドを叩くと以下のエラーが発生します
“`
ApiLambdaFunction (AWS::Lambda::Funct
AWS自主学習 ハンズオン コンテナ・SQS・Lambda・S3
AWSのお勉強。EC2、SQS、Lambda、S3をハンズオンで使ってみる。
やりたいこと
1. 自PC→コンテナ(docker on EC2)にテキストデータを送信
自PCでcurlをたたいてテキストデータを送信、
docker on EC2の自作goプログラムでデータ受信2. コンテナ→SQS
コンテナ(自作goプログラム)からSQS標準キューにテキストデータを連携。3. SQS→Lambda
SQSをイベントソースにしてLambdaをキック。4. Lambda→S3
LambdaからS3にテキストファイルを作成。## チャレンジその1
まずは簡単な構成で作ってみる。
![HandsOn.drawio (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/651099/f36ae2cc-b7d8-b472-21a6-b07b19bde9b3.png)## チャレンジその2
もう少し現実的な構成にしてみる。
何でもパブリックサブネットはやめてALBだけとし、
docker
S3更新時、CloudFrontのキャッシュを削除するLambdaをイベント通知で実行
# はじめに
S3とCloudFrontで静的サイトを構築した状態で、オリジンのS3が更新されたらCloudFrontのキャッシュを削除するLambdaを実装します。
キャッシュの削除は、`全てのキャッシュを削除する`パターンと、`更新したファイルのキャッシュのみを削除`するパターンの2パターンのコードを作成します。![スクリーンショット 2022-10-02 17.04.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/988747/b670f6b6-e98e-5a72-3bec-a7c11b558dee.png)
# S3を作成
S3を作成します。
設定は以下の通りです。
![スクリーンショット 2022-10-02 16.02.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/988747/df16f6d5-4f44-9714-b59b-c189243884ac.png)# Cloudfront作成
コンテナイメージを利用した簡単なLambdaを作成する
コンテナイメージを使用したLambdaを作る必要があったので、pythonで簡単なHello worldを表示させるだけのLambdaの作り方をメモ。
# 0.作成手順
1.各ファイルの準備
2.ECRリポジトリの作成
3.ECRへイメージをプッシュ
4.Lambda関数の作成
5.Lambda関数のテスト# 1.各ファイルの準備
Dockerfileとpython処理を記述したapp.pyを準備して同じディレクトリに置く。app.pyにはHello worldを返すだけの処理を記述。
“`python:app.py
def handler(event, context):
return ‘Hello world!’
“`Dockerfileはドキュメント:[Lambda コンテナイメージの作成](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/images-create.html#images-create-1)を参考に作成。
“`Dockerfile:Dockerfile
FROM public.ec
Lambda でコンテナを実行する
# イメージを作成する
以下のドキュメントを参考に Dockerfile を作成します。
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/images-create.html#images-create-from-base
“`Dockerfile:Dockerfile
FROM public.ecr.aws/lambda/python:3.8# Copy function code
COPY app.py ${LAMBDA_TASK_ROOT}# Install the function’s dependencies using file requirements.txt
# from your project folder.COPY requirements.txt .
RUN pip3 install -r requirements.txt –target “${LAMBDA_TASK_ROOT}”# Set the CMD to your handler (could also be done
AWS日記47(API Gateway – CORS)
# はじめに
今回はREST API リソースの CORS サポートを有効にします
[REST API リソースの CORS を有効にする](https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/how-to-cors.html)を参考に、POST メソッドリクエストに対する設定を行います# 準備
### CloudFormation
“`yaml
AWSTemplateFormatVersion: “2010-09-09”
Transform: AWS::Serverless-2016-10-31
Description: SampleJsonResponse PageParameters:
ApplicationName:
Type: String
Default: ‘SampleJsonResponsePage’Resources:
FrontPageApi:
Type: AWS::Serverless::Api
Properties:
【AWS CDK v2】IPを固定化したLambdaの作成方法
IP制限がかかっているサーバーにLambdaからアクセスする必要がある場合など、LambdaのIP固定化が必要な際にAWS CDK v2でどのように実装するかを記載します。
## 構成
VPCを作成し、その中でLambdaとEIPを紐付けてIPを固定化し、インターネットにアクセスする構成です。
Lambdaの中身はTypescriptで実装し、[axios](https://github.com/axios/axios)を利用してAPIを実行します。![archtecture.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2412171/5e842cc7-7e9a-6e76-b7cc-9751bf9caebd.png)
## 環境
“`bash
cdk –version
2.21.1 (build a6ee543)node_modules/.bin/tsc –v
Version 4.8.3
“`## 完成系
“`vpc-lambda-stack.ts
im
AWS Lambdaを使って関数を定期実行する
# 経緯
Pythonで動くコードを定期実行させたくなった。
タスクスケジューラ―でやるにしても電源オフ時に起動できるようにBIOSの設定をするのが面倒。
また、どこかでサーバを立てて実行させるほどの気力はない。
ので、AWS Lambdaを使って関数を定期実行させることにした。# 目的
関数の定期実行ができるまでをメモ程度に記録する。
AWS Lambdaに関するナレッジはネットに溢れているが、自分にとって意外なハマりどころや勘所があったので後から見返せるようにまとめたい。# AWS Lambdaとは
[AWS Lambda とは – AWS Lambda (amazon.com)](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/welcome.html)# AWS上の環境
– リージョン:東京
– ランタイム:Python 3.9(関数の作成時に設定)# 実行コードの概要
ファイルは単体で拡張子は「.py」。
実行するコード中には以下の通り、import文があるので外部ライブラリをコードが読み込めるよう
aws lambda の Runtimeをnodejs12.xからnodejs16.xにaws cli を使って 一括で切り替えたメモ
## 概要
AWSからnode12がEOLになるので、nodejs12.xのlambdaを更新してくれとメールが来ていた。
11月になる前に対応したいので、cliを使って一括でnodejs16.xに更新した。
なお、cdkで作ったものは14.xを明示的に指定しているので、ここで更新が必要なものはCloudFormationが自動生成したLambdaであった。メール
> Hello,
We are contacting you as we have identified that your AWS Account currently has one or more Lambda functions using Node.js 12 runtime.
We are ending support for Node.js 12 in AWS Lambda. This follows Node.js 12 End-Of-Life (EOL) reached on April 30, 2022 [1].>As described
【EC2】自動停止・起動設定をLambdaで書いてEC2タグで設定する
# EC2の自動起動・停止を自動化させたい
社内用のサーバーなどで常時起動しておく必要のないサーバーを夜になったら自動で停止、朝になったら自動で開始をさせたいという要望がありました。
単純に開始処理と停止処理をLambdaで書いて起動や停止をさせればいいのですが、時間の変更や、一時的に停止をやめたり、開始をやめたりなどカスタム性を考えるとEC2のタグで管理できると楽だなという結論になりました。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/290902/448e277c-4b0a-1169-d826-0261a3508ed1.png)
上記画像のようにEC2のタグに開始時刻と停止時刻を書いてしまうという運用です。不要なればタグを外すだけです。
以下のスクリプトでできました。
hour_rounderという関数で時刻を丸めているのですが、これはいらないかもですが念の為にやっています。あとはこのLambdaをEvent Bridgeで毎時呼び出すだけです。
Lambdaのロールには
ServerlessFrameworkでLambda(Go)を動かしたらファイルが見つからずエラーになる
# はじめに
GoをLambdaにデプロイしたのですが、ファイル読み込みで多くの時間を使ったのでまとめます
ServerlessFrameworkを利用したLambdaでファイル読み込みをする方の参考になればと思います# 問題
Lambda(go)で以下のコードを実行していました
ここでは`config.ini`という設定ファイルを本番環境では、`main`の実行ファイルと同じ階層にあるものを読み込むようにしますしかし、このコードでは`not found ./config.ini`となってしまいます
“`go:config.go
path := “/go/src/config/config.ini”if os.Getenv(“ENV”) == “production” {
path = “./config.ini”
}cfg, err := ini.Load(path)
“`# 解決方法
現在serverless frameworkを利用して`serverless.yml`で`main`と同じフォルダに`config.ini`がアップロード
AWS Lambdaのイベントソースマッピング系のコマンド色々
# はじめに
LambdaのイベントソースマッピングはAWS CLIで操作できますが、多くのコマンドがUUID指定なので使いづらいと感じ、jqコマンドを使ってコマンド一発で実行できるようにしたときのメモです。
# コマンド
## イベントソースマッピングの作成と開始
以下コマンドの\
\ を置換する。 “`bash
aws lambda create-event-source-mapping –function-name–event-source-arn
“`## イベントソースマッピングの無効化
### UUID指定
以下コマンドの\
を置換する。 “`bash
aws lambda update-event-source-mapping –uuid–no-enabled
“`### LambdaファンクションArn指定
以下コマンドの\
を置換する。 “`bash
a
最大実行時間9分→60分になった第二世代CloudFunctionsを使ってみた。
# tl;dr
– 2022年8月にGAとなった第二世代CloudFunctions(以下CF)。主な変更点として、最大使用可能リソースと最大実行時間が大幅に増加した。(具体的な変更点は[こちら](https://shinyorke.hatenablog.com/entry/cloud-functions-gen2))
– 最大実行時間が`9分→60分`と、AWSのFaaSであるLambda(最大15分)も屁じゃないくらいに最大実行時間が増えたように聞こえるが、実際には`HTTP関数以外の最大実行時間は今まで通り9分のまま`([参考](https://cloud.google.com/functions/docs/configuring/timeout?hl=ja))。# やったこと
![スクリーンショット 2022-09-24 22.14.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646534/b8371ea0-b7a2-cace-e9cd-c1eb1be56422.png)
– pan
AWS Lambdaで動かすStable Diffusion/Waifu Diffusionをちょっと効率的に使うTips
# はじめに
LambdaでStable Diffusion/Waifu Diffusionを動かすと、画像生成に1枚当たり約3分かかります(パラメータで前後します)。
基本的な作業の流れとしては次のとおりですが、、**prompt等のパラメータの設定→Lambda実行→【画像生成[3分待機]】→画像ダウンロード→チェック→パラメータの・・・(略)**
面倒です。特に3分待機が。煩雑です。
ということで本記事はこの辺りの状況を少しだけ改善するための小ネタです。
なお、AWS LambdaでStable Diffusion/Waifu Diffusionを動かすためのプロジェクトは次のものを使用します。
最新版のソースコード一式をクローン or ダウンロードしてご利用ください。https://github.com/densenkouji/stable_diffusion.openvino.lambda
# 前提
– AWS CLI、Docker、Pythonはインストール済み
– 「aws configure」でAWS Access Key ID、AWS Secret Acc
Python lambda解説
# lambdaとは?
無名関数のこと。
関数を短く書けて便利。
関数名がないので、何回も使いまわしたい関数には使わない。# 書き方
## 基本
“`
lambda 引数 : 処理
“`
## lambdaを使わない例と、使った例
### lambdaなし
“`
def example(x, y):
return x + y
“`
### lambdaで書いた場合
“`
lambda x,y : x+y
“`
関数名なしで、短く書ける
## lambdaの引数に値を入れる時
さっきの例のxとyに値を入れる時の書き方
“`
(lambda 引数:処理)(引数に入れたい値) と書くので、
(lambda x,y : x+y)(1,2)
となる
“`
AWSに特化したChaliceフレームワークを触ってみた
今回とあるプロジェクトでChaliceのフレームワークを使うことになり、その導入資料を作成したので、記事として残そうと思います。
## Chaliceとは
Chaliceは、Amazon製であるため、AWS専用のフレームワークとなっています。
– デプロイ周りを簡単にかつ自動で構築できるため、コードを書くことに集中できる
– Flask、bottle、FastAPIなどのフレームワークで使用されているおなじみのデコレーターベースの構文を使用しているため、学習コストが低い
– さまざまなデプロイツールに対応しているため、自分が慣れ親しんだデプロイツールを利用できる(TerraformやAWS SDKなど)公式ドキュメントではデプロイまでの時間が早いことを示すため、ターミナルでの実行時間を見れるようにしています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/255267/d136591d-69ad-bad7-eaad-236c842bb4f3.png)
とても自信がおありの
Lambda(Python)のテストイベントを作成するために、関数の先頭に入れる1行
# はじめに
「API Gateway→Lambda」などのLambdaを書くときに、最初にlambda_handlerのeventに渡ってくるデータを取得したい場合のワンライン、コピペ用メモです。# Lambda
“`Python
print(json.dumps(event, ensure_ascii=False))
“`
まず、この1行を入れて、APIを送信するなどして、Lambdaを動かします。
eventの内容をCloudWatchLogsから取得して、テストのイベントJSONに使います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155165/19be57b9-0eb1-043e-b8a8-e5d3a25adf9c.png)# おわりに
小技として記事にしてみました。