来自S3的OpsWorks战争部署失败

时间:2014-10-15 19:22:18

标签: aws-opsworks

  1. 我有一个战争档案。 myapp.war(它恰好是一个grails应用程序,但这不是重要的)
  2. 我把它上传到一个s3桶,比如my-us-west-2
  3. 我使用S3存储库类型设置了OpsWorks:

    存储库类型:S3 存储库网址:https://myapp.s3-us-west-2.amazonaws.com/myapp.war 访问密钥ID:具有上述存储桶读取权限的密钥 秘密访问密钥:此密钥的秘密

  4. 部署到Java层(Tomcat 7)中的实例

  5. 所有灯都是绿色,部署成功
  6. 但该应用尚未实际部署
  7. 攻击实例并查看/ usr / share / tomcat7 / webapps我找到一个名为' myapp'的目录。在此目录中有一个名为' archive'的文件。 '档案'似乎是一个war文件,但它没有命名为&archive; war',它位于webapps的子目录中,因此tomcat无论如何都不会部署它。
  8. 现在,OpsWorks文档说档案应该是一个' zip'文件。但是:

    1. 将myapp.war拉入zip存档' myapp.war.zip'并更改此文件的路径会导致' myapp'包含' myapp.war'。没有部署,因为tomcat不会在webapps / myapp'

    2. 中查找war文件
    3. 更改' myapp.war'的名称到了'myapp.zip'并更改存储库路径导致' myapp'包含单个文件' archive'试。

    4. 因此。任何人都可以描述如何从S3中正确地向OpsWorks提供war文件吗?

2 个答案:

答案 0 :(得分:2)

问题似乎与zip档案的制作方式有关。

使用java'jar'工具创建的Jars,war等不起作用。使用zip工具创建的Zip存档,然后重命名为“.war”扩展名。

这在此解释:https://forums.aws.amazon.com/thread.jspa?messageID=559582&#559582

引用该帖子的回答:

  

我们当前的提取脚本无法正确识别WAR文件。如果   你解压缩WAR文件并使用zip来打包它,它应该工作到   我们更新了我们的脚本。

所以有效的程序是:

  1. 爆炸你的开发环境所发生的战争(在grails的情况下,war build会清理战争的登台目录,所以你没有一个爆炸的战争目录来自行压缩,你必须首先解压缩。)
  2. 使用zip工具压缩通过爆炸战争创建的目录的内容(或者,如果你的构建工具在那里留下爆炸的war目录,那么只需直接压缩它)
  3. (可选)将新的zip存档重命名为“.war”扩展名。
  4. 从原始问题第3步恢复程序 - 也就是说,将战争上传到s3存储桶并
  5. 指定war文件的S3路径作为OpsWorks设置中的存储库。
  6. 编辑:

    在回答这个问题之后,我发现毕竟Grails可以生成一个爆炸的战争目录。

    // BuildConfig.groovy
    ...
    grails.project.war.exploded.dir = "path/to/exploded/war-directory"
    grails.war.exploded=true
    ...
    

    该目录可以压缩或震撼,也可以是构建器/部署者所需的任何内容。

答案 1 :(得分:0)

this维基页面,您会看到WAR文件只是一个特殊的JAR文件。如果你查看JAR是什么here,那么你会看到它只是zipped编译的java代码。

此超级用户question也涉及.WAR与.zip业务。基本上,WAR只是一种特殊的ZIP。因此,当您上传WAR时,您正在上传ZIP。

确保它是S3存储桶中的WAR文件。

提供S3 WAR文件的完整链接。为此,右键单击S3中的WAR文件并选择Properties,然后复制链接。