0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

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

Posted at

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

今回の内容は

  • start-web-frameworkの紹介(再掲)
  • Javaフレームワークを実装および開発【開発用ECSインスタンス】
    ※Javaフレームワーク(Tomcat/JettyやSpringBoo,Quarkus)をServerless Devsで実装する為の事前準備

となります。

■ Disclaimer

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

■ Prerequisites

■ Overview

1. start-web-framework

前回の再掲となりますが、start-web-frameworkはAlibaba Cloudを活用したのWebフレームワーク応用事例となります。
Alibaba CloudのFunction ComputeへWEBフレームワークをデプロイする方法が公開されています。
また、Serverless Devsのプロジェクトのデフォルトレポジトリにもなっているようです。

現在start-web-frameworkへ公開されているWebフレームワークのデプロイ方法は以下のとおりとなっています。
start-web-frameworkへ表記されているWebフレームワークと違いがありますが正しい表記はこちらとなります。
start-web-frameworkの表記は修正中のようです

Node.js Python PHP Go Java Others
Express [custom] Flask [python3] Think PHP [custom] BeeGo Tomcat/Jetty Gatsby
Egg [custom] Tornado [custom] Laravel [custom] Gin [custom] SpringBoot [custom] Hugo [custom]
Nextjs [custom] Bottle [python3] Discuz [custom] - Quarkus -
Nuxtjs [custom] Web.py [python3] WordPress [custom] - - -
Hapi [custom] Django [python3] Zblog [custom] - - -
Koa [custom] FastAPI [custom] Ecshop [custom] - - -
Nest [custom] Web2py Metinfo [custom] - - -
Midway-koa [custom] Pyramid [python3] Whatsns [custom] - - -
Vue.js [custom] - Typecho [custom] - - -

今回はJavaフレームワークであるTomcat/JettyやSpringBoot、Quarkusをstart-web-frameworkを参考にServerless Devsで実装してみます。

■ Let’s Get Started

Python版まではCloudShell上よりServerless Devsを実行してきましたがJava版からは以下の流れで実装します。

  1. 開発用ECSインスタンスを作成
  2. Javaフレームワークを実装および開発【開発用ECSインスタンス】
  3. 開発したソースコードをServerless Devsを用いてJavaフレームワークへデプロイ【Function Compute】

前回では「開発用ECSインスタンスを作成」を実施しましたので今回は

「Javaフレームワークを実装および開発【開発用ECSインスタンス】」

までを実施します。なお、開発についてはデモ画面の作成までとなります。

Javaフレームワークについてはstart-web-frameworkのJavaフレームワーク例で公開されているSpringBootをServerless Devsへデプロイする前提ですすめていきます。

また、本手順では管理画面から接続できる「ワークベンチ接続」を利用して開発用ECSインスタンスへ接続します。

1.1. AlibabaCloudにサインイン

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

FunctionCompute_10001.PNG

1.2. 開発用ECSインスタンスへの接続

ECS管理コンソールへ移動後、前回構築を行った開発用ECSインスタンスを選択します。

ECS_50010.PNG

ECS管理コンソールのインスタンス詳細画面にて【接続】を選択します。
開発用ECSインスタンスが停止済みの場合は【起動】を選択後、【接続】を選択してください。

ECS_50011.PNG

接続とコマンド画面にて「ワークベンチ(デフォルト)」の【今すぐサインイン】を選択します。

ECS_60004.PNG

InstanceLogin画面にて前回RunInstanceコマンドにて入力したパスワードをPasswordの箇所へ入力後、【OK】を選択します。

ECS_50013.PNG

ECS管理コンソールからECSインスタンスへ接続できたことを確認します。

ECS_50014.PNG

1.3. Apache Mavenの導入

開発用ECSインスタンスは「CentOS Stream 9」で構築を行った為、How to install Apache Maven on CentOS 9 Streamの手順を参考に実施します。

本手順はApache Mavenに関する内容となりますので設定の詳細は省略します。
Apache Mavenについて詳細を理解したい方はApache Maven Projectなどをご確認ください。

1.3.1. Java17のインストール

How to install Apache Maven on CentOS 9 StreamではJava11をインストールしていますが、今回はSpringBootおよびFunctoin Computeの両方をサポートなおかつ最新版のJava17をインストールの上、バージョンを確認します。

dnf install -y java-17-openjdk
java --version
1.3.2. Mavenのダウンロード・展開およびシンボリックリンク作成

/opt以下にMaven3系の最新パッケージをダウンロードして展開の上、シンボリックリンクを作成します

cd /opt
wget https://dlcdn.apache.org/maven/maven-3/3.9.0/binaries/apache-maven-3.9.0-bin.tar.gz
tar xzf apache-maven-3.9.0-bin.tar.gz
ln -s apache-maven-3.9.0 maven
1.3.3. 環境変数の設定

mvnコマンドのPATHを通す為、環境変数を設定します。

echo 'export MVN_HOME=/opt/maven' > /etc/profile.d/maven.sh
echo 'export PATH=${MVN_HOME}/bin:${PATH}' >> /etc/profile.d/maven.sh
source /etc/profile.d/maven.sh
1.3.4. Mavenのバージョン確認

mvnコマンドを実行してMavenのバージョンを確認します。

mvn --version

1.4. SpringBootの導入

本手順はSpringBootに関する内容となりますので設定の詳細は省略します。
詳細を理解したい方はSpring Boot リファレンスドキュメントなどをご確認ください。

1.4.1. SpringBootプロジェクトの雛形をダウンロード

Spring Bootプロジェクトの雛形を生成するSpring Initializrにアクセス後、下記項目を設定後、画面右の【ADD DEPENDENCIES】をクリックします。

  • Project : Maven
  • Language : Java
  • Spring Boot : 2.7.9
  • Project Metadata
    • Group : com.example
    • Artifact : springbootdemo
    • Name : springbootdemo
    • Description : SpringBootDemo project for Spring Boot
    • Package name : com.example.springbootdemo
    • Packaging : Jar
    • Java : 17

ECS_60101.PNG

DEPENDENCIESの追加画面にて【Spring Web】を選択します。

ECS_60102.PNG

下記内容の設定になっていることを確認後、画面下の【GENERATE】をクリックしてZIPファイル(springbootdemo.zip)をダウンロードします。

ECS_60103.PNG

1.4.2. ZIPファイル(springbootdemo.zip)をアップロード

SCPもしくはSFTPが利用可能なファイル送受信ソフト(WinSCP等)を使って開発用ECSインスタンスの/tmp以下へZIPファイル(springbootdemo.zip)をアップロードします。

1.4.3. プロジェクトフォルダ(/opt/springboot)の作成

ZIPファイル(springbootdemo.zip)を/opt以下に移動後、展開してプロジェクトフォルダ(/opt/springboot)に移動します。

cd /opt
mv -i /tmp/springbootdemo.zip /opt/
unzip springbootdemo.zip
cd springbootdemo
1.4.4. デモ画面(index.html)作成

SpringBootアプリを実行した際に「Spring Bootアプリのデモ画面です」の文字を表示するデモ画面(index.html)をsrc/main/resources/static以下に作成します。

vi src/main/resources/static/index.html
src/main/resources/static/index.html
<!DOCTYPE html>
<html>
<head>
        <meta charset="utf-8">
        <title>Spring Boot Demo</title>
</head>
<body>
        <h1>Spring Bootアプリのデモ画面です</h1>
</body>
</html>
1.4.5. コントローラークラス(DemoController.java)の作成

/demoへアクセスした際にデモ画面(index.html)を表示するコントローラークラス(DemoController.java)を作成します。

vi src/main/java/com/example/springbootdemo/DemoController.java
src/main/java/com/example/springbootdemo/DemoController.java
package com.example.springbootdemo;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class DemoController {

    @RequestMapping(value="/demo")
    private String demo(){
        return "/index.html";
    }
}
1.4.6. jarファイルの生成

Mavenのコマンドを実行してjarファイルを生成します。

mvn install

上記コマンド完了後、lsコマンドを使用してtarget以下にjarファイルが作成されていることを確認します。

ls -al target
1.4.7. Mavenの起動

MavenのコマンドでSpringBootを起動します。

mvn spring-boot:run

正常に起動した場合は下記のような画面となります。
次の手順の動作確認が終わり次第、[Ctrl + C] で終了します。

ECS_60002.PNG

1.4.8. 動作確認

ワークベンチ接続の画面より別ターミナルを開いた後、curlコマンドでアクセスしてデモ画面を確認します。

curl http://localhost:8080/demo/
動作確認結果
<!DOCTYPE html>
<html>
<head>
        <meta charset="utf-8">
        <title>Spring Boot Demo</title>
</head>
<body>
        <h1>Spring Bootアプリのデモ画面です</h1>
</body>
</html>

※赤枠の【+】をクリックすると別ターミナルを開きます
ECS_60003.PNG

以上で「Javaフレームワークを実装および開発【開発用ECSインスタンス】」は完了となります。

■ Next Time

次回は次の手順の「開発したソースコードをServerless Devsを用いてJavaフレームワークへデプロイ【Function Compute】」を実施します。

0
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?