常见程序语言的 Graviton 适配指南
了解不同应用程序语言在 Graviton 的运行环境安装配置以及运行。
软件开发工程师、系统运维工程师、架构师
生产环境的应用程序语言复杂多样,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 几乎无难度。