LoginSignup
0
2

More than 5 years have passed since last update.

APIGatewayを使ってサーバーレスなURL短縮サービスを作る(URL生成編)

Posted at

こちらの記事の続きです。
APIGatewayを使ってサーバーレスなURL短縮サービスを作る(URL取得編)

何を作るか?

諸事情により、外部のURL短縮サービスを使えない場合のために、自前のURL短縮サービスを作ります。
このサービスは、以下の2つから構成されます。

  • URL生成
    • 入力された任意のURLに対して、短縮したURLを生成する
    • 生成したURLを元のURLと共にAmazon S3に格納する
  • URL取得
    • 与えられた短縮URLを元にS3から元URLを取得する
    • HTTPレスポンスでステータスコード301とともにLocationヘッダで元URLを返す

この記事では、AWS Lambdaを使ってURLを生成する部分を実装します。
URL取得の部分はこちらの記事を参照してください。

概要

URL生成部分は、以下のように実装します。

  • 短縮キーとして一意な文字列を生成する。
  • 短縮キーをS3オブジェクトのキー(ファイル名)としてS3バケットにオリジナルURLを格納する。
  • 短縮キーと取得用APIのURLから、短縮URLを生成して返却する。

上記をLambdaFunctionとして実装し、APIGatewayで公開します。

作成方法

CloudFormationのテンプレートを用意してあるので、まずはそれを実行します。

こちらからapp-generateurl.yamlを取得して、CloudFormationで実行してください。
以下のパラメータを設定し、StackNameは任意で構いません。

  • DataBucketName: こちらの記事で作成したS3バケット
  • GetUrlEndpoint: こちらの記事で作成したAPIまたは、カスタムドメインを設定している場合はそのAPI。{key}で終わっている必要あり。

まずはそれを実行しますと言いつつ、実行したら完成です。

使い方

短縮URL生成APIを呼ぶ

このページで作成したCloudFormationスタックのOutputsのApiに対して、POSTで短縮前URLをリクエストします。

$ curl -X POST <OutputsのApi> -H "Content-Type:applcation/json" -d "{\"Url\": \"https://www.google.co.jp\"}"

結果

{"Url":"短縮後のURL"}

短縮後のURLの末尾はランダムなキーになっているはずです。

このURLにアクセスしてみます。

curl -i "短縮後のURL"

結果

HTTP/2 301
content-type: application/json
location: https://www.google.co.jp
〜中略〜
{"Location":"https://www.google.co.jp"}

きちんとStatusCodeが301でlocationヘッダに元のURLが設定されているので、Webブラウザはリダイレクトしてくれるでしょう。

まとめ

あとは、URLを生成するページなりプログラムを作成して、それを実行した結果を利用者に伝えれば完成です。(この記事ではそこまでは触れないです)

AWSのサービスを使って、ほとんどプログラムを書かず、サーバーレスなURL短縮サービスができてしまいました。

では。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2