- 1. Lambda ローカルでサンプルアプリを動かす
- 2. Dialogflow(GCP) + Lambda + Line Messaging API でLine Bot作ってみた
- 3. Visual Studio のテンプレートを使ってAWSにWebAPIを作成する
- 4. S3に保存されているCSVファイルをjsonレスポンスで受け取る
- 5. 2022年にpythonとAWS Lambdaで作ったもの
- 6. API Gateway経由でLambdaを呼び出す
- 7. Lambdaローカル開発環境構築手順
- 8. Lambdaから直接Parameter Storeの値を取得する
- 9. EventBridgeを使ってLambda関数を月初のAM8:00に実行する
- 10. AWS CDK – API Gateway(REST)+ Lambda Authorizer
- 11. AWS LambdaでTypeScriptのコードを動かす最小の構成 with AWS SAM
- 12. 【小ネタ】Lambda の Dockerイメージをコードから作成した話
- 13. AWS CDK – Node.js 18 TypeScript での Lambda 実装
- 14. [Python / AWS lambda] AWS Lambda実行時にnumpyのRuntime.ImportModuleError
- 15. lambda Amazon API Gateway APIキー認証を用いた認証付きAPIを作ってみる
- 16. PythonであるLambda関数から別のLambda関数を呼び出す
- 17. AWS Lambdaの再試行回数によって処理を分岐させる方法
- 18. 非同期処理で立ち上げたlambdaのDLQはFIFOキューに入れられない
- 19. クラウドで堂々のシェア1位!AWS(Amazon Web Services)
- 20. AWS SAMでGo+API Gateway+Lambda+DynamoDBのサーバレスAPI構築をIaC化した
Lambda ローカルでサンプルアプリを動かす
前回の記事でLambdaのローカル開発環境を構築したので、今回はAWSチュートリアルのサンプルをビルドして動かしてみる。
AWSのチュートリアルは下記を参考にする。
https://docs.aws.amazon.com/ja_jp/serverless-application-model/latest/developerguide/serverless-getting-started-hello-world.html
前回執筆した記事は下記の通り。
https://qiita.com/nobumichi/items/e876a448b7be21e7e51a
# 作業環境
– Windows11 Pro 22H2
– Windows Terminal
– PowerShell 7.3.1
– Python 3.9.13
– aws-cli 2.9.11
– sam-cli 1.67.0
– git 2.39.0.windows.2# サンプルアプリ用の作業ディレクトリを作成する
任意の作業ディレクトリを作成する。私は`Documents`配下に`lambda`ディレク
Dialogflow(GCP) + Lambda + Line Messaging API でLine Bot作ってみた
### 背景
母のお仕事の手助けとして、簡単なファスティング計算サイトを学生時代作っていたのですが、Herokuの無料公開プランが終了し閲覧不可になっていました。
これを機に、母に一番馴染みがあるLineで同じようなことをできないかと思い作ってみました。#### Dialogflow
GCPのチャットボットが簡単に作成できるサービス。
AWSでいうAmazon Lexのようなもの。
https://wk-partners.co.jp/homepage/blog/webservices/dialogflow/今回のようなLine等サービスとの連携や、Webhook設定も比較的簡単に行えました。
また、料金もテキスト認識であれば**無料**!!(1分あたり180リクエストまで)
Amazon Lexはお金かかっちゃうので、無料というところに惹かれました。#### Line Messaging API
LineBotを作成し、応答メッセージの送受信を行うことができる。
応答のパターンもユーザーの反応や流
Visual Studio のテンプレートを使ってAWSにWebAPIを作成する
# はじめに
AWS上にWebAPIを作成するときは、VisualStudioのテンプレートを使ってAWSにデプロイすると手早く環境を構築することができます。そのやり方について色々教える機会が増えてきたのでアウトプットしました。
# 前提条件
– Visual Studio 2022 をインストール済み。
– AWS Toolkit for Visual Studio 2022 をインストール、Credentialsを設定済み。# 作成手順
## プロジェクトの作成
Visual Studio 2022を起動し、「新しいプロジェクトの作成」をクリックします。
新しいプロジェクトの作成画面で、右上のテンプレートの検索から「C#」「AWS」を条件として選択します。
すると以下のように4つ程候補が表示されるので、今回は「AWS Serverless Application with Tests (.NET Core -C#)」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.co
S3に保存されているCSVファイルをjsonレスポンスで受け取る
## 概要
この記事では、S3上に保存されたCSVファイルをLambdaで取り出し、jsonで返す方法を紹介します。
HTTP通信の窓口にはAPIGatewayを使用しています。
APIGatewayのイベントをトリガーにLambdaからS3へアクセスします。この記事では、S3のポリシー設定、Lambdaのロール設定、LambdaとAPIGatewayの設定は割愛し、Lambdaの実装にフォーカスします。
## 前提条件
CSVファイルは以下のものを使用しました。
全体のソースコードは下に載せます。
またAWSサービスの認証はそれぞれの環境でお願いします。“`csvs:hoge.csv
“name”,”age”
“fuga”,”22″
“hoge”,”20″“`
## `Lambda`の実装
実装には`Go`を用います。
大まかに以下の流れです。
1. s3にアクセスするためのクライアントを作成
2. s3からオブジェクトを取得する
3. オブジェクトを構造体にマーシャルする
4. 全ての処理が成功したらレスポンスを返す以下で詳しく説明していきます。
###
2022年にpythonとAWS Lambdaで作ったもの
# 1. まえがき
去年作ったプログラムのまとめ記事となります。# 2. 競馬関係のTwitter BOT
2022年の初めに、[「AWSではじめるインフラ構築入門」](https://amzn.asia/d/9bYYI0P)の本を購入し、アプリを作成
自分でも作成して見ようと、興味がある競馬関連のTwitterのBOTを4つ作成・1号機(今日のハクサン地方競馬出走情報Bot)
#園田競馬 9R ハクサンチェイス
— 今日のハクサン地方競馬出走情報Bot (@hakusan_keiba) December 30, 2022
・2号機(明日のメイショウ冠名馬中央競馬出走情報と今日の競走結果情報BOT)
今日のメイショウ冠馬中央競馬結果
中山05R メイショウゴルシ 10着(6番人気)
阪神09R メイショウフンケイ 6着(1番人気)
阪神09R メイショウカイト 7着(12番人気)
阪神09R メイショウミツヤス 11着(9番人気)
阪神12R メイショウツツジ 7着(15番人気)— 明日のメイショウ冠名馬中央競馬出走情報と今日の競走結果情報BOT (@MeishoBot) December 28, 2022
– 3号機(マカオ競馬の日本人騎手レース結果Bot)
https://twitter.com/macau_keiba/status/16094690722778972
API Gateway経由でLambdaを呼び出す
## 概要
API Gatewayを自身で構築したことがなかったので、簡単なものを構築してみた。
/test(GET)でLambdaを呼び出せるようにする。## 手順
1. Lambda関数を作成
2. API GatewayでREST APIを作成
3. APIをデプロイする
4. APIにアクセス## Lambda関数を作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/255243/22611345-9295-9f9e-80ec-393dec386d6b.png)
コードは初期のまま
“`
export const handler = async(event) => {
// TODO implement
const response = {
statusCode: 200,
body: JSON.stringify(‘Hello from Lambda!’),
};
return response;
};
Lambdaローカル開発環境構築手順
下記ブログを参考に、Lambdaのローカル開発環境構築手順をまとめる。
# 本記事執筆時の作業環境
– Windows11 Pro 22H2
– Windows Terminal
– PowerShell 7.3.1# Pythonインストール
下記を参考にPythonをインストールする。~~https://blog.pyq.jp/entry/python_install_221102_win~~
https://starter-guide.od.pythonic-exam.com/ja/latest/python-setup/install-py39-win.html
2023/01/02追記:LambdaランタイムのPythonのサポートが3.9までだったため、
参考記事を差し替えた。https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/lambda-runtimes.html
下記コマンドでPythonのインストールを
Lambdaから直接Parameter Storeの値を取得する
今まではboto3を使ってParameter Storeから値を取得していました。
“`python
import boto3ssm = boto3.client(‘ssm’)
response = ssm.get_parameters(
Names=[Parameter Store Key],
WithDecryption=True
)
“`
が、以下のアップデートにより、直接Parameter Storeなどから値を取得できるようになったので、実際に試してみた際のメモです。https://aws.amazon.com/jp/about-aws/whats-new/2022/10/aws-parameters-secrets-lambda-extension/
# 必要な権限
SDKを使って実装していたときと同様に、Lambdaの実行ロールに以下の権限を渡す必要がある。
* `ssm:GetParameter`
* `kms:DecryptSecureString` (SecureStringを取得する場合に必要)# 必要なレイヤーの追加
## AW
EventBridgeを使ってLambda関数を月初のAM8:00に実行する
個人で運用しているLambda関数を月初に動かす際に調査した内容のメモです。
# やりたいこと
今回やりたいことは『毎月1日の8:00に特定のLambda関数を実行する』こと。EventBridgeを使うことでcron形式での記述ができるが、タイムゾーンがUTCであるため時差を考慮する (JSTの9時間前を指定する) 必要がある。
`cron(0 0 1 * ? *)` のように月初を指定すると、9時以前に実行できなかったり、`cron(0 23 31 * ? *)` みたいに記述すると月末が31日まである場合は対応できるが、28日とか30日の場合にルールが複数出来そうで、可能な限り簡潔に記述したかった。
# 実現方法
EventBridgeのユーザーガイドを確認してみると、`L`を使うことで月末・週末を表現することができるらしい。
https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-create-rule-schedule.html
> * The L wildcard in the Day-of-mont
AWS CDK – API Gateway(REST)+ Lambda Authorizer
# 前回記事
– [AWS CDK – Node.js 18 TypeScript での Lambda 実装](https://qiita.com/takmot/items/83326c5e3e3213038dde)
# 前提条件
– IaC は CDK(CDK v2)
– Lambda のランタイムは Node.js 18(拡張子は.mjs)
– Lambda の実装は TypeScript(AWS SDK for JavaScript v3)
– API Gateway の API タイプは REST API# ファイル 構成
[前回](https://qiita.com/takmot/items/83326c5e3e3213038dde)から Lambda Authorizer を追加している。
“`
├─ src/
│ ├─ lib/
│ │ ├─ api-gateway/
│ │ │ ├─ handlers/
│ │ │ │ └─ sample-api/
│ │ │
AWS LambdaでTypeScriptのコードを動かす最小の構成 with AWS SAM
# はじめに
AWS Lambdaってお手軽に使えるんでしょ?と思いながら簡単なLambdaを書いたのですが、初心者の私はTypeScriptの知識もないために、デプロイするまでが難しかったです。
AWS SAM CLIを使ってテンプレートから作成するとゴチャゴチャしていて分かりにくいと感じたので、Lambdaとして実行するための必要最小限の構成を手動で作る手順を残しておきます。
# 開発環境
– Windows 10
– Git bash
– Node v16.18.1 / npm 8.19.2
– aws-cli/2.9.9 Python/3.9.11 Windows/10 exe/AMD64 prompt/off
– SAM CLI, version 1.67.0# 基本的なセットアップ
SAMでは `$ sam init` で対話型でテンプレートからプロジェクトを生成することが可能ですが、今回は使わずに一からプロジェクトを作ります。
ちなみに、Windows版のAWS SAM CLIをインストールすると、bashで `$ sam` を使うためにはひと工夫必要でし
【小ネタ】Lambda の Dockerイメージをコードから作成した話
# はじめに
[Releaseタグ作成からEKSへのデプロイを自動化した話](https://qiita.com/ijufumi/items/c8c54c2295baf04113b2) でやった内容のうち、 `Lambda` に焦点を当てた内容です。
載せているコードは一部だけなので、全体を見たい方は上記の記事から辿ってください。
# 環境
* `Kubernetes`: `1.24`
* `AWS CDK for Golang`: `v2.56.1`# やったこと
## Lambda用のコードを準備
`lambda` ディレクトリに、必要なファイルを用意します。
`Dockerfile` のみ載せています。
他は、`Github` リポジトリを参照。* `Dockerfile`
“`Dockerfile
FROM public.ecr.aws/lambda/python:3.9COPY . ${LAMBDA_TASK_ROOT}
COPY requirements.txt .
RUN pip install –upgrade pip && pip3
AWS CDK – Node.js 18 TypeScript での Lambda 実装
# 前提条件
– IaC は CDK(CDK v2)
– Lambda のランタイムは Node.js 18(拡張子は.mjs)
– Lambda の実装は TypeScript(AWS SDK for JavaScript v3)# ファイル 構成
`cdk init`で自動生成される構成から多少変更している。
[実践!AWS CDK #7 ファイル分割](https://dev.classmethod.jp/articles/cdk-practice-7-split-file/)を参考に、AWS リソースごとにリソース定義ファイルを分割している。
Lambda のコンパイル用に別途`tsconfig.json`を用意する。“`
├─ src/
│ ├─ lib/
│ │ ├─ api-gateway/
│ │ │ ├─ handlers/
│ │ │ │ └─ sample-api/
│ │ │ │ └─ index.ts // Lambdaコード
[Python / AWS lambda] AWS Lambda実行時にnumpyのRuntime.ImportModuleError
# エラー内容
“`bash:Cloudwatch Logsのロググループで確認
[ERROR] Runtime.ImportModuleError: Unable to import module ‘src.handlers.filename’:IMPORTANT: PLEASE READ THIS FOR ADVICE ON HOW TO SOLVE THIS ISSUE!
Importing the numpy C-extensions failed. This error can happen for
many reasons, often due to issues with your setup or how NumPy was
installed.We have compiled some common reasons and troubleshooting tips at:
https://numpy.org/devdocs/user/troubleshooting-importerror.html
Please note and check
lambda Amazon API Gateway APIキー認証を用いた認証付きAPIを作ってみる
# 概要
– lambdaとAPI Gatewayを使ってAPIキー認証を使った認証付きAPIを作ってみたので方法をまとめる。
# 情報
– 筆者はMacOSの端末を使っている。
# 方法
## lambdaの準備
1. 下記の情報でlambda関数を作成する。
– 関数の種別:一から作成
– 関数名:returnHello
– ランタイム:Node.js 18.x
– アーキテクチャ:x86_64
– 基本的な Lambda アクセス権限で新しいロールを作成
1. 関数作成時に作成されたindex.mjsの内容は特に変更せず、Testを実行して、200のステータスと「Hello from Lambda!」の文字列が返されることを確認する。## API Gatewayの準備
1. lambdaの「関数の概要」から「トリガーを追加」をクリックする。
![returnHello_-_Lambda.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0
PythonであるLambda関数から別のLambda関数を呼び出す
最近あるLambda関数から別のLambda関数を呼び出す処理をする際に少し調べたのでメモ。
# 環境
| ランタイム | Python 3.9 |
| — | — |# 今回の想定ケース
特定のLambdaから別のLambdaをまるごと呼び出す処理を想定。
今回は、以下の`testFunction01`から`testFunction02`を呼び出すような処理を実現していく。“`python:testFunction01
def lambda_handler(event, context):
print(‘[testFunction01] testFunction01’)
“`“`python:testFunction02
def lambda_handler(event, context):
print(‘[testFunction02] Called by testFunction01’)
return {‘message’: ‘called by testFunction01’}
“`# 実現方法
基本的には[inv
AWS Lambdaの再試行回数によって処理を分岐させる方法
業務の都合でAWS Lambdaの処理を再試行回数によって分岐させる必要が出てきたので、その実装を含めシェアします。
# 実現できることのイメージ
※Lambdaは最大2回まで再試行を設定可能です。“`Java
if (再処理回数 == 0) {
// 処理A
} else if (再処理回数 == 1) {
// 処理B
} else {
// 処理C
}
“`# とりあえず考えられる方法
基本的に以下の方法は **「Lambdaが再試行されるときはリクエストIDが同じになるのでそれをどうカウントするか」** という考え方が基になっています。なお、リクエストIDはUUIDっぽいので、他のリクエストIDとは被ることはないという前提です。
– CloudWatch Logsのログを読み取ってリクエストIDをカウントする ([参考](https://zenn.dev/shimo_s3/articles/c2895880138d19))
– DynamoDBなどのDBに記録しつつそれを読み取ってリクエストIDをカウントする ([参考](https:
非同期処理で立ち上げたlambdaのDLQはFIFOキューに入れられない
当たり前といえば当たり前かもしれないですが、設計時点で気が付かなかったのでメモ。
非同期実行の例としてS3, API Gatewayを想定しています。青い矢印は正常に疎通が取れます。
![名称未設定ファイル.drawio (6).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2882979/1db77976-0ba3-d5dd-fd2d-12ffa2bb4715.png)
# なぜこうなるのか
非同期実行でLambdaへ処理が流れてきたときに、Lambda内で並列的に同時実行されるためだと思います。要するに、流れてきたときには処理A, 処理B, 処理C, …という順序で流れてきたものが、再試行後の失敗時にはその順序が(例えば) 処理C, 処理A, 処理B, …と変わってしまっている可能性が高いためです。
そのためFIFOキューの特徴である順序を保つということが保証できなくなり、仕様上送信できないのではないかと思われます。
**※ですが、console上ではFIFOキューをDLQとし
クラウドで堂々のシェア1位!AWS(Amazon Web Services)
![aws.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2633992/fc7040ff-915a-e4de-99bd-f8262b8c4bfc.jpeg)
エスプリフォートでは積極的に新しい事を取り入れつつ、ビジネスシーンに合わせたインフラ及びシステム構成、セキュリティ、BCP対策などを考慮したご提案を心がけています。
これら磨きあげた技術力が、お客様に高いクオリティでシステムを提供する一助になっています。## はじめに
[今では当たり前!クラウドコンピューティング導入](https://qiita.com/espritfort_tech/items/4b5fc2c8b8a4b733ac88)
[新たなアプローチ!サーバーレスアーキテクチャ](https://qiita.com/espritfort_tech/items/83883ece946bf38f8bac)上記記事でご紹介した通り、クラウドサービスは今ではあらゆるシステムにとってなくてはならないサービスの一つになっていることは、既
AWS SAMでGo+API Gateway+Lambda+DynamoDBのサーバレスAPI構築をIaC化した
# はじめに
前回Goで作成したAPIの環境構築をSAMでIaC化しました。https://qiita.com/tkhs1121/items/7b193dcce19539f16761
# 環境
MacBook Air M1
開発言語 Go# 手順
AWS CLIとSAM CLIをインストールします。
“`shell
brew install awscli
brew tap aws/tap
brew install aws-sam-cli
“`AWSコンソールのIAMからアクセスキーを作成して、クレデンシャルを設定します。
“`shell
aws configure
“`前回のソースディレクトリにSAMの`template.yaml`を追加します。
https://github.com/tkhs1121/go-serverless-app-3
## ソースコード
“`yaml:template.yaml
AWSTemplateFormatVersion: ‘2010-09-09’
Transform: AWS::Serverless-2016-10-