CDK&AWS Lambda お手軽API作成
こんなもの作れます
https://cgo3wctz6upknfwfyltvlrhsea0mpiyy.lambda-url.ap-northeast-1.on.aws/?text=konkoncha
ここにアクセスするとクエリに渡されたtextの文字をヒエログリフに変換して返してくれます
AWS CLIでアクセスキーなどを設定する
AWS CLIのインストール
brew install awscli
キーの設定
aws configure
アクセスキーなどを入力すると~/.awd/config/
に登録されます
CDKのセットアップ
CDKのインストール
npm install -g aws-cdk
CDK用の作業ディレクトリ作成
mkdir ~/適当なディレクトリ/CDK用のディレクトリ && cd ~/適当なディレクトリ/CDK用のディレクトリ
※空のディレクトリじゃないとCDKの初期化コマンドが失敗します
初期化
cdk init app --langage typescript
CDKのデプロイに必要なディレクトリが作られます
. ├── README.md ├── bin ├── cdk.json ├── jest.config.js ├── lib ├── node_modules ├── package-lock.json ├── package.json ├── test └── tsconfig.json
lambda用の処理を記述
import { Stack, StackProps } from "aws-cdk-lib"; import { Construct } from 'constructs'; import * as lambda from 'aws-cdk-lib/aws-lambda'; import { FunctionUrlAuthType, HttpMethod } from "aws-cdk-lib/aws-lambda"; export class HieroRubyStack extends Stack { constructor(scope: Construct, id: string, props?: StackProps) { super(scope, id, props); const url = new lambda.Function(this, 'MyFunction', { runtime: lambda.Runtime.RUBY_2_7, handler: 'main.lambda_handler', code: lambda.Code.fromAsset('./app'), }); url.addFunctionUrl({ authType: lambda.FunctionUrlAuthType.NONE, }); } }
appディレクトリを作ってrubyの処理を記述
require 'json' def lambda_handler(event:, context:) hash = { A: ["1313F"], B: ["130C0"] , C: ["133A1"], D: ["130A7"], E: ["131CB"], F: ["13191"], G: ["133BC"], H: ["1339B"], I: ["131CB"], J: ["13193"], K: ["133A1"], L: ["130ED"], M: ["13153"], N: ["13216"], O: ["1336F"], P: ["133E4"], Q: ["133D8"], R: ["1308B"], S: ["132F4"], T: ["133CF"], U: ["13171"], V: ["13191"],W: ["13171"], X: ["133A1", "132F4"], Y: ["131CB"], Z: ["13283"] } text = get_text(event) result = text && text.upcase.split("").map{ |string| hash[string.to_sym] ? hash[string.to_sym].map{ |s| s.hex.chr(Encoding::UTF_8)} : string }.join { statusCode: 200, body: result } end def get_text(event) if event["requestContext"]["http"]["method"] == "POST" JSON.parse(event["body"])["text"].to_s elsif event["requestContext"]["http"]["method"] == "GET" event["rawQueryString"].split("&").map{ |string| string.split("=") }.to_h["text"] end end
クエリの受けとり方
event["rawQueryString"]
で受け取れる
bodyの受け取り方
event["body"]
で受け取れる
デプロイ
cdk deploy