当前位置 : 首页 » 文章分类 :  开发  »  AWS-EC2使用笔记

AWS-EC2使用笔记

aws ec2免费版使用笔记

启动实例

启动免费ec2实例,我选择的是第一个 Amazon Linux 2 AMI (HVM), SSD Volume Type - ami-6cd6f714
启动后记下 实例 ID,公有 DNS (IPv4),IPv4 公有 IP,以后连接时用。

密钥对

启动实例时,会让添加一个密钥对,可以直接让系统新生成,然后提示下载一个.pem文件,这个就是自己的私钥。
把私钥放到一个安全的目录,一般是 ~/.ssh/,然后将私钥的权限改小才能使用,

管理多个密钥对

如果想从多台机器登陆ec2,比如Windows和mac,需要生成多个密钥对。
在ec2控制台左侧选择“密钥对”->“创建密钥对”,输入名称就会创建一个密钥对,同时会下载.pem私钥文件。

但我使用新创建的密钥对在另外一台电脑上登录时,提示:
Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

后来又试了 在本地 ssh-keygen生成密钥对,把公钥上传到 aws页面上,登录时还是提示这个错误。

最后只能把第一次生成的 .pem 私钥拷贝到另一台电脑上,登录成功了。

.pem私钥权限过大无法登陆

确保 .pem 文件具有权限 0400 而不是 0777。
否则登录时提示:
错误:未保护的私钥文件

在mac使用时,0644的权限都不行:

xxxxx  ~/.ssh  ssh aws
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for '/Users/xxx/.ssh/xxx.pem' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "/Users/xxxx/.ssh/xxxx.pem": bad permissions
ec2-user@ec2-xxxxxx.us-west-2.compute.amazonaws.com: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

必须保护您的私钥文件,防止其他任何用户对其进行读写操作。如果除您外其他任何人都能够读取或写入您的私钥,则 SSH 会忽略您的密钥
获取您在启动实例时指定的密钥对的 .pem 文件在您电脑上位置的完全限定路径。确保 .pem 文件具有权限 0400 而不是 0777。
chmod 0400 .ssh/my_private_key.pem 改小私钥文件的权限

用户名

对于 Amazon Linux 2 或 Amazon Linux AMI,用户名称是 ec2-user

ssh密钥登录

ssh -i myprivate.pem ec2-user@ec2-xx-xx-xx-xx.us-west-2.compute.amazonaws.com

或者在~/.ssh/config中增加配置如下,以后直接使用ssh aws即可登录

Host aws
    HostName ec2-xx-xx-xx-xx.us-west-2.compute.amazonaws.com
    IdentityFile ~/.ssh/myprivate.pem
    User ec2-user

使用 SSH 连接到 Linux 实例
https://docs.aws.amazon.com/zh_cn/AWSEC2/latest/UserGuide/AccessingInstancesLinux.html

scp上传文件到服务器

scp -i ~/.ssh/myprivate.pem filename ec2-user@ec2-xx-xx-xx-xx.us-west-2.compute.amazonaws.com:~


yum安装java8

检索包含java的列表
yum list java*
可以看到在 aws的默认库 amzn2-core 中已有java

检索1.8的列表
yum list java-1.8*

安装1.8.0的所有文件(必须使用root用户)
sudo yum -y install java-1.8.0-openjdk*

测试java运行环境
java -version

查看安装目录,先看看java命令的目录:

[ec2-user@ip- usr]$ which java
/usr/bin/java
[ec2-user@ip- usr]$ ll -h /usr/bin/java
lrwxrwxrwx 1 root root 22 Sep 16 06:13 /usr/bin/java -> /etc/alternatives/java

可知安装到了 /etc/alternatives/ 中


AWS EC2部署Spring Boot应用及自定义域名访问

后台启动spring boot应用及本地访问

启动应用的脚本:start.sh

#!/bin/bash
nohup java -jar yourapp.jar --server.port=8888 &

注意如果想以http默认的80端口启动spring boot,必须有root权限,否则报错无法启动:
sudo nohup java -jar blog-0.0.1-SNAPSHOT.jar --server.port=80 &
用80启动后,就可以直接用域名,不用加端口访问了,因为http默认使用80端口

启动后可以在aws本地尝试用localhost访问,以及用aws给分配的共有DNS访问。
当然Spring boot中先要有处理/请求的Controller代码,可以先简单的返回个hello world

如果以8080端口启动:

curl localhost:8080/
curl ec2-xx-xx-xx-xx.us-west-2.compute.amazonaws.com:8080/

如果以80端口启动:

curl localhost/
curl ec2-xx-xx-xx-xx.us-west-2.compute.amazonaws.com/

springboot 后台运行
https://www.cnblogs.com/bigben0123/p/7910036.html


ec2安全组放开80端口入站流量

编辑aws ec2的安全组,开放tcp 80端口和tcp 8080端口的入站流量,以便可以远程访问
然后就可以使用aws给分配的 公有DNS 通过公网访问spring boot接口url了。


自定义域名解析到aws

目前我的域名都放在阿里云,这里以阿里云的域名解析为例。

记录类型 主机记录 解析线路 记录值 TTL
CNAME www 默认 实例的公有DNS 10分钟
CNAME @ 默认 实例的公有DNS 10分钟

CNAME表示解析到一个域名,而不是一个ipv4地址
www表示解析 www.example.com 的访问
@表示解析 example.com 的访问

然后就可以用自己的域名访问 spring boot 接口了。


ec2安全组(出入站端口控制)

EC2防火墙默认阻断了除ssh 22端口外的所有入站流量
可以编辑EC2的Scurity Groups安全组配置,根据自己需要开放入站端口

开放tcp 3306端口入站流量

为了mysql可以远程访问,开放3306端口入站

开放tcp 8080端口入站流量

为了tomcat服务器可远程访问,开放8080端口入站

开放tcp 80端口入站流量

为了http可远程访问,开放http的默认80端口入站


AWS EC2 自己安装mysql及远程访问

安装mysql

和普通linux下安装mysql大致相同,看mysql官网的文档即可。

Getting Started with MySQL - Installing and Starting MySQL
https://dev.mysql.com/doc/mysql-getting-started/en/#mysql-getting-started-installing

创建可远程访问的mysql账号

创建一个账号,Host为%,即允许所有主机连接,并给账号授权。
然后在ec2命令行中验证可以本地登录mysql

配置mysql绑定ip

查看mysql server绑定ip
show variables like 'bind_address';
默认是*,表示接收所有的IPv4 或 IPv6 连接请求,如没有更改过就不用配置。

编辑EC2安全组配置,放开3306端口入站流量

mysql安装后还不能远程连接,因为EC2防火墙默认阻断了除ssh 22端口外的所有入站流量
编辑EC2的Scurity Groups安全组配置,添加允许所有来源的3306端口入站流量,编辑完后入站规则如下表:

类型 协议 端口范围 来源 描述
SSH TCP 22 0.0.0.0/0
MYSQL/Aurora TCP 3306 0.0.0.0/0 mysql
MYSQL/Aurora TCP 3306 ::/0 mysql

注意:
1、描述必须全部是英文字符,否则无法保存。
2、类型中已经预定义了好多常用协议,直接选择即可,如果没有合适的,选择 自定义TCP规则 可满足大多数情况。

EC2开启MySql远程访问
https://blog.csdn.net/timberwolf_2012/article/details/47350215

远程连接mysql数据库

可以在Windows或Mac命令行中登录,也可以使用Navicat或DataGrip等图形界面登录

C:\Users\xxx> mysql -u username -h ec2-xx-xx-xx-xx.us-west-2.compute.amazonaws.com -p
Enter password: *******
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 39
Server version: 5.6.41 MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

上一篇 博客项目方案

下一篇 VSCode使用笔记

阅读
1,839
阅读预计8分钟
创建日期 2018-09-04
修改日期 2018-09-18
类别
标签
百度推荐