AWS Toolkit for EclipseからLambda関数を直接作成できずにMavenでパッケージ化して作成
2021/08/23
目次
AWS Toolkit for EclipseからLambda関数を直接作成
チュートリアル の作成、アップロード、呼び出し方法 AWS Lambda 機能の手順にそって進めました。
右クリック-[New]-[Other]を選択しました。
[AWS]-[AWS Lambda Java Project]を選択しました。
手順にそって進めます。
プロジェクト作成が完了すると、Readme.htmlにチュートリアルの手順が記載されています。
ここで手順ではコードを書き換えるのですが、handleRequestのパラメータは String input だとエラーになるので、Object inputのままにしました。
1 2 3 4 5 6 7 |
@Override public String handleRequest(Object input, Context context) { context.getLogger().log("Input: " + input); String output = "Hello, " + input + "!"; return output; } |
/src/test/java – com.example.lambda.demo のHelloTest.javaの21行目のinputを以下に変更しました。
1 2 |
input = "from Lambda"; |
41行目には , を足します。
1 2 |
Assert.assertEquals("Hello, from Lambda!", output); |
右クリック – [Debug As] – [JUnit Test]を実行して、Failure Traceに何も表示されなければテストが正常完了です。
右クリック – [AWS Lambda]-[Upload function to AWS Lambda]を選択しました。
手順に沿って進めました。
IAMロールなどLambda関数に必要な設定をEclipseでできるのですね。
そして、Finishを押下したところでエラーです。
エラーと対応(Java8にする)
エラーメッセージは以下です。
1 2 3 4 5 6 7 8 9 10 |
Failed to upload project to Lambda com.amazonaws.eclipse.core.exceptions.AwsActionException: Cannot invoke "java.io.File.length()" because "jarFile" is null at com.amazonaws.eclipse.lambda.upload.wizard.UploadFunctionWizard.doFinish(UploadFunctionWizard.java:115) at com.amazonaws.eclipse.core.plugin.AbstractAwsJobWizard$1.run(AbstractAwsJobWizard.java:35) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) Caused by: java.lang.NullPointerException: Cannot invoke "java.io.File.length()" because "jarFile" is null at com.amazonaws.eclipse.lambda.upload.wizard.util.UploadFunctionUtil.performFunctionUpload(UploadFunctionUtil.java:82) at com.amazonaws.eclipse.lambda.upload.wizard.UploadFunctionWizard.doFinish(UploadFunctionWizard.java:111) ... 2 more |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Unable to export project [HelloLambda] to jar file java.lang.reflect.InvocationTargetException: JAR creation failed. See details for additional information. at org.eclipse.jdt.internal.ui.jarpackager.JarFileExportOperation.singleRun(JarFileExportOperation.java:1006) at org.eclipse.jdt.internal.ui.jarpackager.JarFileExportOperation.execute(JarFileExportOperation.java:996) at org.eclipse.ui.actions.WorkspaceModifyOperation.lambda$0(WorkspaceModifyOperation.java:110) at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2292) at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2317) at org.eclipse.ui.actions.WorkspaceModifyOperation.run(WorkspaceModifyOperation.java:131) at com.amazonaws.eclipse.lambda.upload.wizard.util.FunctionJarExportHelper.exportProjectToJarFile(FunctionJarExportHelper.java:78) at com.amazonaws.eclipse.lambda.upload.wizard.util.UploadFunctionUtil.performFunctionUpload(UploadFunctionUtil.java:68) at com.amazonaws.eclipse.lambda.upload.wizard.UploadFunctionWizard.doFinish(UploadFunctionWizard.java:111) at com.amazonaws.eclipse.core.plugin.AbstractAwsJobWizard$1.run(AbstractAwsJobWizard.java:35) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) |
Webで検索すると、JDKのバージョンを8にしよう。
とあったので、まず以下2つのファイルを削除しました。
/Library/Internet Plug-Ins/JavaAppletPlugin.plugin
/Library/PreferencePane/JavaControlPanel.prefPane
そして、Java SE Development Kit 8 DownloadsからmacOS x64向けのパッケージをダウンロードしてインストールしました。
でも同じエラーが発生しました。
もう少し調べると、[Upload function to AWS Lambda]を使わずにMavenでパッケージ化してデプロイしたらいいじゃないかという結果があったので、Toolkitを使うのは諦めて従うことにしました。
Mavenでパッケージ化してアップロード
プロジェクトを選択して右クリック-[Run As]-[Maven install]を選択しました。
Targetにdemo-1.0.0.jarができたので、マネジメントコンソールで手動で作ったランタイムがJava8のLambda関数にアップロードしました。
テストのパラメータは、テストコードと同じく、”from Lambda”にしました。
テストが成功しました。
現在のLambdaのデフォルトJavaバージョンは11
よくよく考えたら、今のLambdaのデフォルトJavaバージョンは11なんだからローカルのJDKを8じゃなくて11にしないといけないんじゃないかと思いまして。
ローカルのJDKを11をインストールしてやり直しました。
Java SE Development Kit 11 Downloads
1 2 3 4 5 6 7 |
% java -version java version "11.0.10" 2021-01-19 LTS Java(TM) SE Runtime Environment 18.9 (build 11.0.10+8-LTS-162) Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.10+8-LTS-162, mixed mode) % javac -version javac 11.0.10 |
これで、念のためプロジェクト作成からやってみます。
結果、同じでした。
そういう問題ではなかったようです。
Eclipseで開発してデプロイするという目的は達成できたのでよしとします。
最後までお読みいただきましてありがとうございました!
【PR】 「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト - プロフェッショナル 改訂第2版」という本を書きました。
【PR】 「AWS認定資格試験テキスト AWS認定クラウドプラクティショナー 改訂第2版」という本を書きました。
【PR】 「ポケットスタディ AWS認定 デベロッパーアソシエイト」という本を書きました。
【PR】 「要点整理から攻略するAWS認定ソリューションアーキテクト-アソシエイト」という本を書きました。
【PR】 「AWSではじめるLinux入門ガイド」という本を書きました。

開発ベンダー5年、ユーザ企業システム部門通算9年、ITインストラクター5年目でプロトタイプビルダーもやりだしたSoftware Engineerです。
質問はコメントかSNSなどからお気軽にどうぞ。
出来る限りなるべく答えます。
このブログの内容/発言の一切は個人の見解であり、所属する組織とは関係ありません。
このブログは経験したことなどの共有を目的としており、手順や結果などを保証するものではありません。
ご参考にされる際は、読者様自身のご判断にてご対応をお願いいたします。
また、勉強会やイベントのレポートは自分が気になったことをメモしたり、聞いて思ったことを書いていますので、登壇者の意見や発表内容ではありません。
ad
ad
関連記事
-
-
Backlogの課題チケット更新内容をMicrosoft Teamsに通知する(AWS Lambda Python)
BacklogにSlack連携が追加されました。 ですが、私の所属している会社で …
-
-
AWS Organizationsでタグポリシーを設定しようとしました
Organizationsで[タグポリシーを有効にする]ボタンを押下しました。 …
-
-
Amazon Location Service入門ワークショップ-マップの操作
関連記事 Amazon Location Service入門ワークショップの前提 …
-
-
RDSスナップショットをS3にエクスポートする新機能を試そうかと思った
やったこと RDSスナップショットをS3にエクスポートできる、という新機能が追加 …
-
-
Amazon VPCにオンプレミス検証環境想定プライベートDNSサーバー(BIND)をEC2で起動する
オンプレミス想定の検証で使うために、Amazon VPCにプライベート向けDNS …
-
-
Former2で既存リソースのCloudFormationテンプレート出力を試してみた
JAWS DAYS 2020の資料確認のお手伝いを少ししてまして、「ゼロからはじ …
-
-
ヤマムギvol.23 Amazon RDS for MySQLとAmazon Aurora Serverlessの起動のデモをしました
ゴールデンウィーク毎朝デモ勉強会は終わったのですが、土曜日にやれるときがあれば、 …
-
-
RocketChatからOutgoing Webhookで呼び出されたAPI Gatewayでtokenをリクエスト検証する
本来はWAFでやったほうがよさそうですが、追加料金を発生させたくない場合にAPI …
-
-
ECR(Amazon Elastic Container Registry)にコンテナイメージをアップロードする
「Pandocサーバーのコンテナイメージを作成する」で作成したイメージをAWS …
-
-
CloudFrontからのバーチャルホストなサイトのテストってどうしてます?
このブログの構成です。 AWSで構築しています。 4つのサイトを1つのEC2で配 …