2

AWS Lambda 関数を作成し、AWS での展開をセットアップしようとしています。次の内容の buildspec.yml ファイルを作成しました。

version: 0.1

phases:
  build:
    commands:
      - echo Entering build phase...
      - echo Build started on `date`
      - mvn package shade:shade
      - mv target/classes/* .
      - rm -rf target src buildspec.yml pom.xml
      - aws cloudformation package --template template.json --s3-bucket $S3_BUCKET --output-template template-export.json
artifacts:
  type: zip
  files:
    - template-export.json

コードを AWS CodeCommit にプッシュすると、ビルド プロセスは正常に実行されますが、出力 s3 バケットには 130 kb の出力ファイルしかありません。これは、作成されたパッケージに依存関係がないことを意味し、Lambda を実行しようとすると、次のエラーが発生しました。

クラス com.test.handler のロード中にエラーが発生しました: org/apache/log4j/Logger: クラス java.lang.NoClassDefFoundError

pom.xml ファイルに、shade プラグインを追加しました。

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.3</version>
<configuration>
    <createDependencyReducedPom>false</createDependencyReducedPom>
</configuration>
<executions>
    <execution>
        <phase>package</phase>
        <goals>
            <goal>shade</goal>
        </goals>
    </execution>
</executions>
</plugin>

PCでコマンドを実行するmvn packageとすべて問題なく、すべての依存関係 (サイズは 10 MB 強) を含む jar ファイルが取得されます。この jar ファイルを AWS ラムダ関数に手動でデプロイすると、すべてが期待どおりに機能します。

私もこのチュートリアルに従ってみました: Link、しかし何も変わりませんでした。

誰かが助けてくれませんか、ここで何が欠けているのか本当にわかりません:/

4

1 に答える 1