AWSエンジニアが学習するAlibaba Cloud【Function Compute編 (1)】

普段AWSを主に利用しているエンジニアがAlibabaCloudを学習するために調べた情報や手順を紹介します。

今回の内容は

- Alibaba Cloudの概要
- Alibaba Cloud Function Compute（以下、「Function Compute」）の概要
- Function Computeの実行(管理画面)

となります。

## ■ Disclaimer

本記事は掲載時点の情報であり、最新の情報とは異なる場合があります。
本記事は完全性、正確性、有用性、安全性などを保証するものではありません。
本記事をご利用の場合は自己責任にてお願いします。

## ■ Prerequisites

- Alibaba Cloudアカウントを作成済みであることを前提とします。
  - [Alibaba Cloud アカウントを作成](https://www.alibabacloud.com/help/ja/maxcompute/latest/create-an-alibaba-cloud-account)

## ■ Overview

### 1. Alibaba Cloudの概要

Alibaba Cloudについて調べてみました。

まず、Alibaba Cloudで利用しているリージョンについてはデータセンターが設立されている国と地域の法律に準拠して運用されているとのことです。(東京リージョンを利用している場合は日本法に準拠して運用)

一方、日本リージョンについて現時点では東京のみ開設でした。
DRを検討する際は日本国内の東京以外に存在するリージョンで検討する場合が多いため、AWSのように大阪リージョンを開設してほしいところです。

#### 1-1. Alibaba Cloudとは

- Alibaba Cloudは世界最大級のECサイト「淘宝（Taobao）」や「天猫」、電子決済サービス「Alipay」などを運営するアリババグループが提供するパブリッククラウド
- 毎年11月11日の「独身の日」に行われる世界最大級のセールイベントでも裏側でAlibaba Cloudを活用[^1]
- 国際版では世界最大級の巨大市場で培った高度な技術や仕組みをグローバルな商習慣に準拠した形で提供

#### 1-2. Alibaba Cloudのシェア

- 2019年のガートナー調査ではグローバル市場では第3位、アジア太平洋(APAC)市場では第1位のシェアを獲得[^2]

#### 1-3. Alibaba Cloudのセキュリティ

- Alibaba Cloud Internationalはシンガポール法人の為、シンガポール法に準拠[^3] 
- 国際基準の「ISO27001」や「PCI DSS」および国内基準の「FISC」や「NISC」などさまざまなセキュリティ認証を取得[^4]

#### 1-4. Alibaba Cloudのリージョン

- 世界に28リージョン、85アベイラビリティゾーンを提供[^5]
  - 日本リージョンは東京のみ

### 2. Function Computeの概要

AWS Lambdaと同様のサービスであるFunction Computeについて調べてみました。

仕様についてはAWS Lambdaと大きくは変わりはありませんが複数のFunction Computeを一元管理できるサービスという機能はAWS Lamdbaには存在しないので管理面ではFunction Computeのほうが便利そうです。

ランタイムについてもAWS Lamdbaより種類が多いのは魅力的です。
特にランタイムでPHPが利用できるのでPHPプログラマーにとっては非常にありがたいと思います。

#### 2-1. Function Computeとは

- 正式名称は「Alibaba Cloud Function Compute」
- Function ComputeはAlibaba Cloudが提供するイベント駆動型のフルマネージドコンピューティングサービス

#### 2-2. Function Computeのサービス

- AWS Lambdaに存在しない概念として「サービス」があり、必ず作成が必要[^6]
- サービスはFunction Computeをリソースを整理して管理するもの
- アプリケーション内で使用するFunction Computeを１つのサービスにまとめることができる

#### 2-3. Function Computeのランタイム（AWS Lambdaとの比較）

- Function ComputeのランタイムとAWS Lambdaの比較は以下のとおり
    -  Function Computeのランタイム名は管理画面の「ランタイム環境」にて確認
- 組み込みランタイムはFunction Computeのほうが少ないがカスタムランタイムで組み込みランタイムのように選択可能な為、ランタイムだけでいえばFunction Computeのほうが多い
  - 組み込みランタイムでPHPが利用可能なのはFunction Computeのみ

|  Alibaba Cloud Function Compute      |  AWS Lambda         | 
| ------------------------------------ | ------------------- | 
|  Python 3.10(カスタムランタイムで選択可) |  -                  |
|  Python 3.9                          |  Python 3.9         | 
|  Python 3.8(カスタムランタイムで選択可)  |  Python 3.8         | 
|  Python 3.7(カスタムランタイムで選択可)  |  Python 3.7         | 
|  Python 3.6                          |  -                  | 
|  Python 2.7                          |  -                  | 
|  Java 17(カスタムランタイムで選択可)     |  -                  | 
|  Java 11                             |  Java 11            | 
|  Java 8                              |  Java 8             | 
|  PHP 8.1(カスタムランタイムで選択可)     |  -                  | 
|  PHP 8.0(カスタムランタイムで選択可)     |  -                  | 
|  PHP 7.4(カスタムランタイムで選択可)     |  -                  | 
|  PHP 7.2                             |  -                  | 
|  ThinkPHP(カスタムランタイムで選択可)        |  -              | 
|  Laravel(カスタムランタイムで選択可)        |  -              | 
|  Swoole(カスタムランタイムで選択可)        |  -              | 
|  Go 1                                |  Go 1               | 
|  .NET 6.0(カスタムランタイムで選択可)    |  -                  | 
|  .NET Core 3.1 ※パブリックプレビュー      |  .NET Core 3.1      | 
|  .NET Core 2.1                       |  -                  | 
|  Node.js 17(カスタムランタイムで選択可)  |  -               | 
|  Node.js 16 ※パブリックプレビュー         |  Node.js 16         | 
|  Node.js 14                          |  Node.js 14         | 
|  Node.js 12                          |  Node.js 12         | 
|  Node.js 10                          |  -                  | 
|  Node.js 8                           |  -                  | 
|  Node.js 6                           |  -                  | 
|  Debian 9(カスタムランタイムで選択可)      |  -                  | 
|  TypeScript(カスタムランタイムで選択可)  |  -                  | 
|  Rust(カスタムランタイムで選択可)        |  -                  | 
|  Ruby(カスタムランタイムで選択可)        |  Ruby 2.7           | 
|  Dart(カスタムランタイムで選択可)        |  -                  | 
|  Deno(カスタムランタイムで選択可)        |  -                  | 
|  Lua(カスタムランタイムで選択可)         |  -                  | 
|  Nginx(カスタムランタイムで選択可)       |  -                  | 
|  Tomcat(カスタムランタイムで選択可)      |  -                  | 
|  Next.js(カスタムランタイムで選択可)      |  -                  | 


#### 2-4. Function Computeの価格

- Function Compute[^7]
  - 関数呼び出し料金
    - リクエスト数 × 単価 (単価：1,000,000 リクエスト毎に USD 0.2)
    - リクエスト数：毎月、最初の 100 万回のリクエストは無料
  - インスタンスのリソース使用料
    - インスタンスに割り当てられたメモリサイズに比例
    - インスタンスの計算能力 × 実行時間 × 単価
    - インスタンスによって毎月使用される最初の 400,000のリソースは無料
  - アウトバウンドインターネットトラフィックの料金
    - Function Computeからインターネットへ通信が発生した際に発生
    - 単価：1 GB あたり USD 0.117
    - 内部ネットワーク経由トラフィックは無料
    - 受信インターネットトラフィックは無料


## ■ Let’s Get Started

### 1. Function Computeの実行（管理画面）

実際にFunction Computeを試してみます。今回はAlibaba Cloudの管理画面（言語は日本語）より操作を行います。

#### 1.1. AlibabaCloudにサインイン

自分のアカウント（メールアドレス）とパスワードを入力の上、【サインイン】をクリックします。

![FunctionCompute_00001.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/74171/8d86da4a-6ea8-e1bd-8284-6cd892fb403d.png)

#### 1.2. Fuction Computeコンソール画面へ移動

画面上部の検索窓へ【Function Compute】を入力してFuction Computeコンソール画面へ移動します。

![FunctionCompute_00002.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/74171/b5494996-57bb-c4e7-baed-c4653db4e585.png)


#### 1.3. AliyunFcDefaultRoleロールの作成（初回のみ）

初めて Fuction Computeコンソール画面へアクセスを行うとAliyunFcDefaultRoleロール作成の推奨画面が表示される為、【作成】ボタンをクリックします。

![FunctionCompute_00003.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/74171/0321f9cb-cefa-abe4-3427-54d87bfe57ee.png)


「ロール名」および「ロールの説明」はデフォルトのまま【権限付与に同意】をクリックの上、Function Computeコンソールに移動します。

![FunctionCompute_00004.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/74171/6f531fc9-e776-4596-2a4a-a919030e371c.png)


#### 1.4. サービスの作成

Fuction Computeコンソールのダッシュボードにて[サービスと機能]を選択後、【サービスの作成】をクリックします。
合わせて画面上部のリージョンを **【Japan(Tokyo)】** に変更します。

![FunctionCompute_00005.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/74171/c767cbb6-3995-b7db-c652-d124ef1f6439.png)

サービスの作成画面では以下の項目を入力後、【OK】をクリックしてサービスを作成します。

- 名前
    - FirstService
- 説明
    - FirstService
- サーバのロール ※[詳細オプションの表示]をクリックして展開
    - AliyunFcDefaultRole

![FunctionCompute_00006.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/74171/e30cd6e4-f176-023e-6727-b3fea74b518a.png)

#### 1.5. 関数の作成

サービス作成後、【関数を作成】をクリックしてFunction Computeを作成します。

![FunctionCompute_00007.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/74171/34395215-5d37-b42d-df0d-41e2884251a3.png)


関数の作成画面では以下の項目を入力後、【作成】をクリックして関数を作成します。
今回は組み込みランタイムのPHP 7.2を選択の上、サンプルコードを利用して関数を作成します。

- 基本設定
    - 関数名
        - FirstFunction
    - リクエストタイプ
        - イベントリクエスト
- コード
    - ランタイム
        - PHP 7.2
    - コードのアップロード方法
        - サンプルコードの仕様
            - Hello, world!の例

![FunctionCompute_00008.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/74171/f5c91824-8ad7-28e0-8458-efaedc9806f0.png)

#### 1.6. 関数のテスト

関数を作成後、【関数のテスト】をクリックします。

![FunctionCompute_00009.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/74171/f99815e4-6a53-4a70-f78e-412ce4a207e9.png)

関数のテスト実行後に表示される画面上部のレスポンスにて「hello world」が表示されていることを確認します。

![FunctionCompute_00010.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/74171/a5bd1c25-7df2-6482-e744-4a063f8a4c87.png)


#### 1-7. リアルタイムログの確認

【関数のテスト】の右側にある【リアルタイムログ】をクリックします。最初にリアルタイムログを表示する際には有効化の確認画面が表示されるので、【有効化】をクリックします。

![FunctionCompute_00011.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/74171/c19a96fc-d000-50cc-ee33-195b8352e5b9.png)

リアルタイムログ有効化後に再度【関数のテスト】を実行します。
その後、【リアルタイムログ】を再度クリックしてリアルタイムログを確認します。

![FunctionCompute_00012.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/74171/f2f95867-12ec-b2e5-05b1-dfd628145591.png)


## ■ Next Time

今回は管理画面よりFunction Computeを実行しましたが次回はAWSのSAMにあたるServerless Devsを利用してFunction Computeのデプロイおよび実行を試してみたいと思います。

[^1]: https://www.alibaba.co.jp/news/2021/11/post-33.html
[^2]: https://www.alibaba.co.jp/news/2020/04/3iaas3apac1.html
[^3]: https://www.alibabacloud.com/ja/trust-center/japan?spm=a3c0i.17650567.2445100110.25.49251118vCsLo1
[^4]: https://www.alibabacloud.com/ja/trust-center/compliance
[^5]: https://www.alibabacloud.com/help/en/elastic-compute-service/latest/regions-and-zones
[^6]: https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/using-regions-availability-zones.html
[^6]: https://www.alibabacloud.com/help/ja/function-compute/latest/introduction-1
[^7]: https://www.alibabacloud.com/help/ja/function-compute/latest/billing-billing