AWS基本教程 场景是:在把22端口关闭了,无法再连上服务器的情况
解决办法:关闭服务器,点击操作->实例设置->编辑用户数据
1 2 3 4 5 6 7 # !/bin/bash # 允许 SSH 端口 iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT iptables -P FORWARD ACCEPT iptables -F iptables -A INPUT -p tcp --dport 22 -j ACCEPT
再启动服务器
AWS升级配置 1.先停止实例,不是终止实例
2.修改实例类型
服务器局域网互通 需要把局域网 想要互通的服务器,加入一个公共的的默认安全组
选择default安全组
要看服务器部署在哪里
JavaSDK上传图片到S3 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 @RestController @Slf4j @Api(tags = "上传接口") public class UploadController { @Value("${S3.accessKey}") String accessKey; @Value("${S3.secretKey}") String secretKey; @Value("${S3.endPoint}") String endPoint; @Value("${S3.bucketName}") String bucketName; @PostMapping("/upload") @ApiOperation("上传") @NotNeedAuth public Response<String> upload (@RequestParam("file") MultipartFile file) { String originalFilename = file.getOriginalFilename(); if (!Constant.PHOTO_LIST.contains(originalFilename.substring(originalFilename.lastIndexOf("." ) + 1 ))) { return Response.fail(CodeConstant.CODE_095); } String newImageName = ThreadLocalRandom.current().nextInt(10000 ) + System.currentTimeMillis() + originalFilename.substring(originalFilename.lastIndexOf("." )).toLowerCase(); String fileName = "lxdt/dt/" + Constant.DIRECTORY_TIME_FORMAT.format(LocalDateTime.now(Constant.TIME_ZONE)) + newImageName; try { S3Util.uploadFileByFile(accessKey, secretKey, endPoint, bucketName, fileName, file); } catch (Exception e) { log.error("上传失败" , e); return Response.error("" ); } return Response.successData(fileName); } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 public class S3Util { public static void uploadFileByFile (String accessKey, String secretKey, String endPoint, String bucketName, String folderName, MultipartFile file) throws IOException { ClientConfiguration clientConfig = new ClientConfiguration (); clientConfig.setProtocol(Protocol.HTTPS); AmazonS3 amazonS3 = AmazonS3Client.builder().withEndpointConfiguration(new AwsClientBuilder .EndpointConfiguration(endPoint, Region.getRegion(Regions.AP_SOUTHEAST_1).getName())) .withClientConfiguration(clientConfig).withCredentials(new AWSStaticCredentialsProvider (new BasicAWSCredentials (accessKey, secretKey))) .disableChunkedEncoding().withPathStyleAccessEnabled(true ).withForceGlobalBucketAccessEnabled(true ).enablePathStyleAccess().build(); ObjectMetadata objectMetadata = new ObjectMetadata (); objectMetadata.setContentType(file.getContentType()); objectMetadata.setContentLength(file.getSize()); amazonS3.putObject(new PutObjectRequest (bucketName, folderName, file.getInputStream(), objectMetadata).withCannedAcl(CannedAccessControlList.PublicRead)); } }
S3桶策略 公开访问桶策略
1 2 3 4 5 6 7 8 9 10 11 12 { "Version" : "2012-10-17" , "Statement" : [ { "Sid" : "PublicReadGetObject" , "Effect" : "Allow" , "Principal" : "*" , "Action" : "s3:GetObject" , "Resource" : "arn:aws:s3:::your-bucket-name/*" } ] }
印象中有遇到这种情况:
第一次操作桶的时候,桶里面的文件是能正常共享出来的
很久之后没有操作了,再上传一个新文件,上传的这个文件就不能共享了
第二次出现这样情况的时候,我文件的url搞错了,是可以正常共享的
PicGO+S3 创建存储桶 红框里不要勾选
创建文件夹,设置公开
开启静态托管
新建IAM用户 访问创建IAM页面
创建使用者
创建使用者详情
创建使用者权限,点击下一步,然后就能看到key和密钥了
PicGO配置 PicGO软件许要下再S3插件,然后再配置文件里粘贴这个
1 2 3 4 5 6 7 "aws-s3" : { "accessKeyID" : "AKIA2Q6ZSIPP7MKZOFHR" , "secretAccessKey" : "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" , "bucketName" : "mmzcg.com" , "uploadPath" : "blog/{year}/{fullName}" , "acl" : "public-read" }
参考 S3教程
PicGoS3教程
CloudFront加速Vercel 1.找到vercel自动分配的域名
2.aws 创建分配
3.选择源
不要选择源,输入vercel分配的域名
4.选择全部https,其它可以默认
5.选择证书
备用域名: 比如vercel默认分配的是xxx.vercel.app 你想加速的域名是 abc.blog,备用域名就填abc.blog
自定义SSL证书: 用aws自带的证书申请工具
点击保存,回到CloudFront首页
6.cname
看上次修改时间这一列,如果显示的时间,就表示刚才的配置已经生效了,如果显示在部署中…就等一会
CloudFront这一列会分配一个域名,在域名解析那里Cname指向这个域名就可以了
AWS S3和Hexo 1.安装插件
1 2 npm install hexo-deployer-aws-s3 --save-dev
2.改_config.yml
1 2 3 4 5 6 7 8 deploy: type : 'aws-s3' region: ap-east-1 bucket: mmzcg.com
如果要部署多个地方,每个仓库的type前面要加一个-
如果只有一个,就只用type开头就行
3.执行环境变量
1 2 3 export AWS_ACCESS_KEY_ID=AKIA2Q6ZSIPP7MKZOFHRexport AWS_SECRET_ACCESS_KEY=ZifJfUmVVGMq37hd8Itozp4fws5O97dVlwgMgtCYsource /etc/profile
4.部署
1 2 3 4 hexo clean hexo algoli hexo d -g
发现报错,The bucket does not allow ACLs,还需要在存储中开启 ACLs
接下来要关闭「阻止共有访问操作」
部署成功后,开启静态网站托管功能
RDS 创建RDS 选择mysql社区版本
AWS的RDS开启慢查询日志到cloudwatch中
快照导出到S3
参考文档
接下来的页面是需要的设置
导出标识符,就是导出任务的名字
导出的数据,这里测试就简单点,导出全部表,要是选部分表,文档里有导出规则
S3 目标, 选一个存储桶
接下来的两个是难点,IAM角色,和加密
先看加密,先创建ARN,找到配置的选项卡
点击下面的链接
在客户管理的秘钥,创建一个秘钥, 客户管理的密钥和AWS托管的密钥是有区别的,要选对
创建完之后,再回到 密钥列表的页面,点密钥ID,进入到详情页
复制ARN刚刚才导出的页面,角色权限什么的,各种尝试下就可以了
front清空缓存API 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 import boto3import datetimedef create_invalidation (distribution_id, paths ): client = boto3.client('cloudfront' ,aws_access_key_id='AKIA2UC26S7767GSGKJQ' ,aws_secret_access_key='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' ) caller_reference = str (datetime.datetime.now()) items = paths if isinstance (paths, list ) else [paths] invalidation_batch = { 'Paths' : { 'Quantity' : len (items), 'Items' : items }, 'CallerReference' : caller_reference } response = client.create_invalidation( DistributionId=distribution_id, InvalidationBatch=invalidation_batch ) return response distribution_info = [ ["EX123AFBG" , "生产环境" , "生产" , "baidu.com" ], ] paths_to_invalidate = ['/*' ] for info in distribution_info: distribution_id = info[0 ] print (f"Creating invalidation for Distribution ID: {distribution_id} , Description: {info[1 ]} , Type: {info[2 ]} " ) response = create_invalidation(distribution_id, paths_to_invalidate) print (response) print ("================" ) print ("刷新完成" )