常见程序语言的 Graviton 适配指南

了解不同应用程序语言在 Graviton 的运行环境安装配置以及运行。

Graviton
免费套餐
教程
亚马逊云科技
Olawale Olaleye
难度
100 - 初级
时间
30 分钟
前提条件

海外区域: 注册 / 登录 亚马逊云科技

受众

软件开发工程师、系统运维工程师、架构师

上次更新时间
2024 年 1 月
相关产品

生产环境的应用程序语言复杂多样,Graviton 目前已经可以适配几乎所有的主流程序语言。本 Workshop 将指引读者动手实战不同应用程序语言在 Graviton 的运行环境安装配置以及运行。

  • 完成本动手实验后,您将掌握如何基于 Graviton 实例安装配置如下程序语言的运行环境:

    • Java
    • NodeJS
    • Python
    • PHP
    • Ruby
    • Go
    • Rust
  • 本动手实验针对以下人员编写:

    • 软件开发工程师
    • 系统运维工程师
    • 架构师
  • 完成本实验需要以下技能:

    • Linux 环境下的基本操作,如源码编译
    • 亚马逊云科技基本操作,如安全组配置、EC2 实例启动
    • Web 应用程序基本概念

准备工作

本章节主要协助读者完成实验环境准备,包括 EC2 实例启动、示例代码获取。

EC2 环境准备

说明

通过本章节内容,读者将分别启动一个 Graviton2 实例、一个 x86 实例用于后续实验。

创建安全组

1. 进入EC2 控制台,点击安全组

2. 创建安全组,开放 80、8080、9080、5000-5010 端口,源设置为 “0.0.0.0/0”;开放 22 端口,源设置为 MyIP(如使用了 VPN 请根据实际情况填写对应的出口 IP,同时请留意 VPN 网络是否允许访问 80/443 以外的非标 Web 服务端口)

启动 Graviton 实例

1. 进入 EC2 控制台,点击“启动新实例”

2. 在 EC2 配置向导中选择 AMI 为 Amazon Linux 2 5.10 版本,系统架构设置 ARM ,机型选择 m6g.large 并调整根卷为 50G 后启动实例,安全组使用前面步骤创建的安全组

3. 更新系统及安装必要的工具

sudo yum update -y
sudo yum install git -y
sudo reboot

4. 下载本次实验中需要使用的源码到 EC2 实例

$ git clone https://github.com/nwcd-samples/GravitonDemo.git
$ cd GravitonDemo
$ ls -l
总用量 8
...
-rw-rw-r-- 1 ec2-user ec2-user 1925 2月  17 06:12 godemo.go
drwxrwxr-x 4 ec2-user ec2-user   92 2月  17 06:12 graviton-demo-php
drwxrwxr-x 3 ec2-user ec2-user   71 2月  17 06:12 graviton-demo-rust
drwxrwxr-x 4 ec2-user ec2-user   90 2月  17 06:12 graviton-demo-springboot
-rw-rw-r-- 1 ec2-user ec2-user 3272 2月  17 06:12 socketdemo_python2.py
...

启动 x86 实例

如有兴趣对比不同架构下相同应用代码的运行情况,可以启动一个 m5.large 实例,操作步骤在此略过。

登录到实例

1. 从 windows 登录到实例

#使用 powershell 通过 ssh 命令连接到实例

2. 从 Mac 登录到实例

#使用 Terminal 通过 ssh 命令连接到实例

动手实验

本章节主要协助读者在 Graviton 实例上完成常见开发语言环境的安装配置并运行一个简易的 Web 程序。

在 Graviton 运行 Java 应用程序

搭建运行环境

1. 登录到服务器,运行如下命令安装 Java 11 运行环境

$ sudo yum install java-11-amazon-corretto -y
$ java -version
openjdk version "11.0.18" 2023-01-17 LTS
OpenJDK Runtime Environment Corretto-11.0.18.10.1 (build 11.0.18+10-LTS)
OpenJDK 64-Bit Server VM Corretto-11.0.18.10.1 (build 11.0.18+10-LTS, mixed mode)

通过以上步骤,即可完成 Java 11 环境搭建。

运行应用程序

1. 获取项目代码并启动应用程序

cd ~/GravitonDemo
cd graviton-demo-springboot
./mvnw package

java -jar target/graviton2-demo-0.0.1-SNAPSHOT.jar

2. 通过浏览器访问上一步部署的应用(http://EC2-IP:8080,留意 Web 服务端口在安全组已开放)。运行正常的话,可以看到 Web 应用返回了实例相关的信息。

至此,读者已完成了基于 Graviton 的 Java 应用部署运行,可以留意到操作上与在 X86 环境一致。

在 Graviton 运行 NodeJS 应用程序

搭建运行环境

1. 登录到服务器运行以下命令安装配置 nodejs 运行环境

#安装nodejs

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash
. ~/.nvm/nvm.sh
nvm install 16

2. 查看 nodejs 版本

node -e "console.log('Running Node.js ' + process.version)"

通过以上步骤即可完成 nodejs 运行环境的安装。

运行应用程序

1. 切换到 node 工程,并启动 demo 程序

#进入nodejs demo目录
$ cd ~/GravitonDemo/graviton-demo-nodejs

# 更新npm版本
$ npm install -g npm

# 安装依赖
$ npm install

#运行demo程序
$ node nodejsdemo.js

2. 浏览器中查看运行效果(请确保 EC2 安全组已开放应用服务器端口,比如 5004)。运行正常的话,可以看到 Web 应用返回了实例相关的信息。

在浏览器中输入http://服务器ip:5004  查看运行效果

浏览器显示效果

在 Graviton 运行 Python 应用程序

搭建运行环境

Amazon Linux2 系统已经包含了python3 运行环境,通过以下命令查看版本。

1. 查看 Python 版本

$ python3 --version

运行应用程序

1. 切换到 Python 工程,并启动 demo 程序

#进入Pythondemo目录
$ cd ~/GravitonDemo/graviton-demo-python

#运行demo程序
$ python3 python3demo.py

2. 浏览器中查看运行效果 (请确保 EC2 安全组已开放应用服务器端口,比如 5003)。运行正常的话,可以看到 Web 应用返回了实例相关的信息。

在浏览器中输入http://服务器ip:5003  查看运行效果

浏览器显示效果

在 Graviton 运行 PHP 应用程序

搭建运行环境

1. 登录服务器,运行如下命令安装 PHP 运行环境

$ sudo amazon-linux-extras enable php8.1
$ sudo yum clean metadata
$ sudo amazon-linux-extras install php8.1 nginx1 -y
$ php -v
PHP 8.1.14 (cli) (built: Jan 20 2023 18:11:37) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.14, Copyright (c) Zend Technologies

通过以上操作,我们完成了 Graviton 环境的 PHP + Nginx 环境部署。

运行应用程序

1. 切换到目录,复制 PHP 项目资源至 nginx 目录

$ cd ~/GravitonDemo/graviton-demo-php
$ sudo cp -r assets /usr/share/nginx/html/
$ sudo cp index.php /usr/share/nginx/html/
$ sudo service nginx restart

2. 通过浏览器访问上一步部署的应用(请确保 EC2 安全组已开放应用服务器端口,比如80)。运行正常的话,可以看到 Web 应用返回了实例相关的信息。

在浏览器中输入http://服务器ip:80  查看运行效果

至此,读者已完成了基于 Graviton 的 PHP 应用部署运行,可以留意到操作上与在 X86 环境一致。

在 Graviton 运行 Ruby 应用程序

搭建运行环境

1. 登录到服务器运行以下命令安装配置 ruby 运行环境

#安装ruby
sudo amazon-linux-extras list | grep ruby
sudo amazon-linux-extras install -y ruby3.0

2. 查看 ruby 版本

ruby -v

通过以上步骤即可完成 ruby 运行环境的安装。

运行应用程序

1. 切换到 ruby 工程,并启动 demo 程序

#进入ruby demo目录
$ cd ~/GravitonDemo/graviton-demo-ruby

#运行demo程序
$ ruby rubydemo.rb

2. 浏览器中查看运行效果 (请确保 EC2 安全组已开放应用服务器端口,比如 5001)。运行正常的话,可以看到 Web 应用返回了实例相关的信息。

在浏览器中输入http://服务器ip:5001  查看运行效果

浏览器显示效果

在 Graviton 运行 Go 应用程序

搭建运行环境

1. 登录到服务器运行以下命令安装配置 go 运行环境

#安装golang
$ sudo yum install -y golang

#配置golang 
$ mkdir -p ~/GoWorkSpace

$ echo "export GOPATH=$HOME/GoWorkSpace">>~/.bashrc
$ echo "export PATH=$PATH:$GOPATH/bin">>~/.bashrc

$ source ~/.bashrc
#可选
#如上一步配置golang 环境变量出错请执行以下命令后退出连接,重新登录
#出错信息“manpath: can't set the locale: make sure $LC * and $LANG are correct”

$ echo "LANG=en_US.utf-8" | sudo tee -a /etc/environment
$ echo "LC_ALL=en_US.utf-8" | sudo tee -a /etc/environment

2. 查看 golang 版本

go version

通过以上步骤即可完成 go 运行环境的安装和配置。

运行应用程序

1. 切换到 golang 工程,并启动 demo 程序

#编译golang代码
$ cd ~/GravitonDemo/graviton-demo-go
$ go install godemo.go

#运行demo程序
$ ~/GoWorkSpace/bin/godemo

2. 浏览器中查看运行效果 (请确保 EC2 安全组已开放应用服务器端口,比如 5000)。运行正常的话,可以看到 Web 应用返回了实例相关的信息。

在浏览器中输入http://服务器ip:5000  查看运行效果

浏览器显示效果

在 Graviton 运行 Rust 应用程序

搭建运行环境

1. 登录到服务器,运行如下命令安装 Rust 运行环境。

# 安装gcc
$ sudo yum install gcc -y

# 安装rust最新版本
$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
...
You can uninstall at any time with rustup self uninstall and
these changes will be reverted.
Current installation options:
   default host triple: aarch64-unknown-linux-gnu
     default toolchain: stable (default)
               profile: default
  modify PATH variable: yes

1) Proceed with installation (default)
2) Customize installation
3) Cancel installation
>1

$ source "$HOME/.cargo/env"
$ cargo -V
cargo 1.67.1 (8ecd4f20a 2023-01-10)

通过以上步骤,即可完成 Rust 1.67.1 环境搭建。

运行应用程序

1. 切换到 Rust 工程,并启动 Web 服务

$ cd ~/GravitonDemo/graviton-demo-rust
$ cargo run
Compiling cookie_store v0.12.0
   Compiling h2 v0.3.15
   Compiling time v0.3.17
   Compiling rand v0.8.5
   Compiling webpki-roots v0.21.1
   Compiling local-channel v0.1.3
   Compiling qstring v0.7.2
   Compiling num_cpus v1.15.0
   Compiling encoding_rs v0.8.32
   Compiling mime v0.3.16
   Compiling language-tags v0.3.2
   Compiling chunked_transfer v1.4.1
   Compiling httpdate v1.0.2
   Compiling base64 v0.21.0
   Compiling ureq v1.5.5
   Compiling actix-server v2.2.0
   Compiling actix-web-codegen v4.1.0
   Compiling serde_urlencoded v0.7.1
   Compiling actix-macros v0.2.3
   Compiling time v0.1.45
   Compiling iana-time-zone v0.1.53
   Compiling json v0.12.4
   Compiling chrono v0.4.23
   Compiling ec2_instance_metadata v0.3.0
   Compiling zstd v0.12.3+zstd.1.5.2
   Compiling actix-http v3.3.0
   Compiling actix-web v4.3.0
   Compiling graviton2-demo-rust v0.1.0 (/home/ec2-user/rust-graviton2-demo)
    Finished dev [unoptimized + debuginfo] target(s) in 2m 12s
     Running `target/debug/graviton2-demo-rust`

2. 通过浏览器访问上一步部署的应用 (请确保 EC2 安全组已开放应用服务器端口,比如 5006)。运行正常的话,可以看到 Web 应用返回了实例相关的信息。

在浏览器中输入http://服务器ip:5006  查看运行效果

浏览器显示效果

至此,读者已完成了基于 Graviton 的 Rust 应用部署运行,可以留意到操作上与在 X86 环境一致。

清理实验环境

在所有实验完毕后,请留意停止或者终止实验中用到的 EC2 实例,以免产生不必要的费用。

总结

本 Workshop 以动手实验的方式介绍了常见开发语言(Java、NodeJS、Python、PHP、Ruby、Golang 以及 Rust)在 Graviton 上运行环境的安装配置,通过这些动手实验可以看出这些开发语言的应用程序迁移至 Graviton 几乎无难度。