1
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

updated at

Organization

Alibaba CloudのFunction Computeでwebサイトを作る

webサイトと言ってもただHTMLを返すだけのやつです。ほとんどタイトル詐欺。

Function Computeとは

Function Computeの概要です。まず公式ドキュメントを見てみます。

Alibaba Cloud Function Computeは、イベント駆動型のフルマネージドコンピューティングサービスです。Function Compute を使用すると、サーバーやその他のインフラストラクチャの管理を心配することなく、コードを記述してアップロードできます。

ふむ。分かりやすく具体例を交えて説明します。

例えばOSSにファイルをアップロードした時にそのアップロードイベントを検知して何か処理を行う(Slack通知とか)です。いわゆるサーバレスな環境を実現します。

ここではHTTPのGETリクエストをトリガーにしてレスポンスを返すようにします。

毎月100万回のリクエストは無料(参考: 公式ドキュメント)なので個人利用なら気兼ねなく使えます。ありがたい。

サービスと関数とトリガー

FCにはサービスと関数の2つの概念があります。めちゃくちゃ簡単に説明すると関数がイベントに対応する処理で、サービスは関数の入れ物です。

そしてトリガーはどんな条件で関数を実行するかの設定です。

現在Java, Node.js, Pythonをサポートしていますが、HTTPイベントに関してはまだnode.jsしか対応していません。

準備

Resource Access Managementよりユーザーを作成してFunction Computeの権限を与えておいてください。

Function Computeを使ってみる

公式のチュートリアルHTTPトリガーのドキュメントを参考にします。

まず、Function ComputeのCLIツールであるfcliGitHub Releasesからダウンロードしておきます。

次に、ローカルの適当な場所にHTTPトリガーで実行される処理の関数を書きます。ここでは~/src/function_compute/my_website/http.jsとします。

$ mkdir ~/src/function_compute/my_website
$ cd ~/src/function_compute/my_website
$ vim http.js

以下がhttp.jsです。

// http.js
const getRawBody = require('raw-body')
module.exports.handler = function(request, response, context) {
  getRawBody(request, function(err, data){
    const respBody = new Buffer("<html><h1>hello FunctionCompute</h1></html>")
    response.setStatusCode(200)
    response.setHeader('content-type', 'text/html')
    response.send(respBody)
  })
};

getRawBody()でレスポンスを定義します。

サービスと関数の作成

さて、次に新しくサービスと関数を作ります。サービス名はmy_website、関数名はhttpにします。

>>> mks my_website
>>> cd my_website
>>> mkf http -t nodejs6 -h http.handler

mksmake servicemkfmake functionですね。

※ コマンド実行中に40xや50xが返ってきた場合はこちらのトラブルシューティングを参照してください。

コード編集はGUIからもできますが、コマンドラインの使用をおすすめします。(たまに画面が微妙な挙動をするので)

トリガーの作成

こっちもfcliでコマンドラインから作成したかったのですが、トリガー作成用のmktまだhttpに対応していない(2018/7/5)のでコンソール画面から作ります。

↓オプションの説明文にはサポートしてるって書いてある

>>> mkt --help
      --etag string              trigger etag for update
      --help
  -r, --invocation-role string   invocation role, timer type trigger optional
  -s, --source-arn string        event source arn, timer type trigger optional
  -c, --trigger-config string    trigger config file
  -t, --type string              trigger type, support oss, log, timer, http, cdn_events now (default "oss")

>>> mkt http -t http -c httpTrigger.yml
Error: unsupported trigger type, expect oss, log, timer, http, cdn_events, actual http

嘘やろhttpってあるやんけ

実装されていないっぽいですね。

追記:
v0.20で実装されたみたいで、ちゃんと使えました。

では、コンソールからトリガーを作成します。
image.png

これでOKを押せばトリガーが作成されます。
image.png

ブラウザで確認する

関数ページのコードタブにあるURLをコピーします。
image.png

コピーしたURLにアクセスしたらちゃんと見えました。完成。
image.png

まとめ

公式のドキュメントが最強。しかし新しいからかちょっとまだバグってる。

FunctionComputeとTableStoreでサーバレスAPIを作る

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
1
Help us understand the problem. What are the problem?