我做了什么?
使用JSP开发了一个Web应用程序,允许用户注册、登录并将文件上传到AWS S3。我正在使用Elastic Beanstalk将这个应用程序部署到aws,方法是上传应用程序的war文件。对于登录和注册模块,我使用了RDS,它运行良好。
问题
当我想上传文件到S3时,我需要在WEB app中使用AWS SDK jar及其支持的jar文件。当我完成开发部分并导出war文件时,它大约是75MB。所以问题是,如果我把任何东西改成app,我需要把这个大尺寸的war上传到aws。war文件的大小受AWS SDK的JAR文件的影响。
应对这种情况有哪些选择?
使用Elastic Beanstalk部署部分(因此更小)war文件的步骤如下:
dist-lib.zip
)config
文件war
文件war
文件摘录自Web模块的build.gradle
(从zip内的路径中删除版本号):
apply plugin: 'java-library-distribution'
distTar.enabled = false
distZip.enabled = hasProperty('dist') //
def subPrjs = rootProject.subprojects.collect { it.name } - project.name
//...
distributions.main {
contents.exclude subPrjs.collect { "$it*.jar" }
contents.exclude "tomcat-embed-*"
contents.exclude "tomcat-annotations-api-*"
contents.exclude "spring-boot-starter-tomcat-*"
}
distZip {
baseName += '-lib'
version = null
doLast {
def f0 = archivePath;
version = props.ver; // replace w/ your version number
if (archivePath.exists()) {
archivePath.delete()
}
f0.renameTo(archivePath.path)
}
}
创建zip文件w/:gradle distZip-Pdist=true
。
从aws cli:aws s3 cp您的_模块/build/distributions/YOUR_模块-lib-YOUR_版本。zip s3://YOUR_BUCKET/dist/dist lib。邮政编码
我建议固定桶:
它不会为你产生额外的外部流量
如果出现问题,你不小心上传了一些敏感数据,它不会造成任何损害
在Amazon S3中安全存储私钥中描述了访问私有S3存储桶的配置详细信息。
在您的应用程序被复制到Tomcat的
webapps
之前,您需要以下文件来自动下载、提取外部库并将其添加到提取的war包中。
deploy/eb/app-res.config
:
Resources:
# Use instance profile to authenticate to S3 bucket that contains the private key
AWSEBAutoScalingGroup:
Metadata:
AWS::CloudFormation::Authentication:
S3Auth:
type: "s3"
buckets: ["elasticbeanstalk-us-east-1-169305339676"]
roleName:
"Fn::GetOptionSetting":
Namespace: "aws:autoscaling:launchconfiguration"
OptionName: "IamInstanceProfile"
DefaultValue: "aws-elasticbeanstalk-ec2-role-dev"
files:
# distribution libs
/tmp/dist-lib.zip:
mode: "000644"
owner: tomcat
group: tomcat
authentication: "S3Auth"
source: https://s3.amazonaws.com/YOUR_BUCKET/dist/dist-lib.zip
deploy/eb/dist-lib。配置
:
files:
/opt/elasticbeanstalk/hooks/appdeploy/pre/10_lib_extr.sh:
mode: "000755"
owner: root
group: root
content: |
#!/usr/bin/env bash
rm -rf /tmp/dist-lib
unzip /tmp/dist-lib.zip -d /tmp/
mv /tmp/dist-lib/lib /tmp/deployment/application/ROOT/WEB-INF/lib
另一部分来自
build。web模块的gradle
(子模块(子项目)类直接包含在web-INF/classes
中):
apply plugin: 'war'
jar.enabled = false
def env = project.hasProperty('env') ? project.getProperty('env') : 'lcl' // profile: set w/ "-Penv=..."
def ebDirs = ["$rootDir/deploy/eb-$env", "$rootDir/deploy/eb", "$rootDir/deploy/eb/_nginx"] // env. specific config first
// ...
war {
duplicatesStrategy = 'fail'
//rootSpec.exclude subPrjs.collect { "**/$it*.jar" } // exclude subproject jars only
rootSpec.exclude "**/*.jar" // exclude dependencies => they must be downloaded and extracted during deployment
from(subPrjs.collect { project(":$it").sourceSets.main.output }) {
duplicatesStrategy = 'exclude' // in case of one output dir for multiple sourceSets
into "WEB-INF/classes"
}
from(ebDirs) {
duplicatesStrategy = 'exclude' // in case of env. spec. config
exclude "**/_*"
into ".ebextensions"
}
}
使用gradle v4对上述解决方案进行了测试。10.2和aws cli v1。16.44
(包括创建电子商务和部署电子商务)。
使用Maven之类的构建工具。这将确保在服务器的本地maven存储库中下载依赖文件。因此,它可以减少项目的上传大小。这是官方的快速指南
问题内容: 我如何知道要从WAR中获取文件的文件参考。 WAR的结构为: WAR SRC -Model -Network structure WebContent META-INF WEB-INF LIB JSP位于WebContent下,我已将config.txt文件放在WebContent文件夹下,并尝试通过 BufferedReader in = new BufferedReader(new
我们正在使用AWS SAM构建API。在CodeStar中的Lambda节点模板上构建。事情一直进展顺利,直到我们的模板。yml文件变得太大了。每当推送代码并且CloudFormation开始执行更改集并为SAMendpoint创建堆栈时,它就会失败并回滚到上一次成功构建。 似乎我们有太多的资源超过了每个堆栈的云形成限制。 我尝试拆分模板文件,并编辑构建规范来处理两个模板文件,执行两个AWS云形成
我有以下装饰示例: 我正在努力与行:即使在阅读了很多装饰教程 > 如果我将*和**留在中,我会得到错误:但是为什么wrapper\u function1知道的参数?我就是看不见他们被交到哪里去了。这样的事情对我来说是有意义的 def decorator_function1(原始_函数,*args,**kwargs)):my_args=args my_kwargs=kwargs def wrappe
问题内容: 我有一个很大的xml文件,其中包含许多子元素。我希望能够运行一些xpath查询。我尝试在Java中使用vtd- xml,但有时会出现内存不足错误,因为xml太大,无法容纳到内存中。是否有替代方法来处理如此大的xml。 问题答案: 尝试http://code.google.com/p/jlibs/wiki/XMLDog 它使用sax执行xpaths,而无需创建xml文档的内存表示形式。
如何使war文件自动部署?服务器组件是glass乐于,数据库是在MySQL中创建的。我需要创建一个可执行文件来提取war文件吗?以及如何做到这一点?
问题内容: 我正在使用Python脚本处理大型CSV文件(数以10M行的GB数)。 这些文件具有不同的行长,并且无法完全加载到内存中进行分析。 每行由脚本中的一个函数分别处理。分析一个文件大约需要20分钟,并且看来磁盘访问速度不是问题,而是处理/函数调用。 代码看起来像这样(非常简单)。实际的代码使用Class结构,但这是相似的: 鉴于计算需要共享的数据结构,使用多核在Python中并行运行分析的