ラベル Lambda の投稿を表示しています。 すべての投稿を表示
ラベル Lambda の投稿を表示しています。 すべての投稿を表示

2025-03-10

AWS Lambda: [ERROR] ProfileNotFound: The config profile (xxxx) could not be found

Chaliceを使ってPythonコードをlamdaにデプロイしたら、Internal Errorのリターンがあり、表題のようなエラーがCloud Watchで確認できました。エラーの意味は、xxxxってプロファイルがないよってことなんですが。。。。

原因と解決策

原因は、ローカルで指定している Crediencialのプロファイルが、サーバー側にはないよってこと。

解決策は、デプロイするコードにはprofileを指定する記述をなくす。。ということにようです。sonnnet3.7の回答がそうだったので、実際そうすると動きました。でも何かスマートじゃないな。




2021-06-10

Zappaを使ってLambdaにFlaskアプリを導入した際のURL問題の解決法

 Zappaを使うと、AWS Lambda上にてウェブアプリをお手軽にDeployさせることができます。おちラボで動かしているのはFlaskのアプリなんですが、1つだけ問題が。。。。

ディレクトリ階層に余分なprefixがつく問題

ZappaでアップロードしたURLには、/dev/みたいな余分なURL(Stageという概念ですね)が付いちゃいます。これはAPI Gatewayの仕様らしく、回避不能のようです。api的な使い方だったら別にそれを前提にしておけばいいんですが、アプリとしてDeployする場合、アプリ内で自身の別URLを呼ぶ場合に都合が悪くなります。例えば、

  • (ローカル環境)/update
  • (Lambda環境) /dev/update
というふうに、”/dev”みたいなstage表記がもれなく付いてきます。静的にURLを記述しちゃうとローカルで動くけどLambdaにデプロイするとURLがNot foundでエラーになったりするわけです。

解決策:動的にURLを定義する
まあ、当たり前の解決策なんですが、実行環境に合わせて動的に定義するしかないです。例えば以下のようにosの環境を調べておいてからstageを渡すという方法ですね。下記の場合は、ローカルがWindows環境を想定していますので、まあLambdaのOSがWindowsなわけがないので(Amazon Linuxのはず)、これでOKでしょう。



2015-10-25

AWS Lambdaのメモリ設定とパフォーマンスについてのメモ書き

AWS Lambdaをもう少し本気で使ってみようかなということで、ラボで内部利用している非公開なAPIをGAE→Lambdaにしようと企んでいます。ちょっと試してみたんですが、その使用感などメモ書きです。

メモリとコンテナのスペックは連動する
Lambdaにはメモリ設定があります。これは最初悩みどころで、どれぐらいメモリが必要なんだろ?とか思ったりしますがこれは勘違いです。メモリ設定の正体は、Lambdaコンテナのスペックに比例します。つまり、

  • メモリ量を増やすことで、実効速度が速くなる
ということです。逆に言うと、メモリをケチるとめちゃめちゃ遅いです。使い物にならないです。例えば、「amazon product advertising api」をLambdaでコールしてみたんですが、
  • メモリ128MB:→実行速度:6000〜8000ms
  • メモリ1024MB:→実行速度:600〜1000ms
となります。ウェブアプリのREST APIとして使いたいなら、6000〜8000msなんてありえない数値です。1000msでも遅いなぁって気がしますしね。
傾向として初回は起動が遅いですが、連続した2回目以降の処理は速くなります。ただ、メモリ128Mだと、何回やっても6000〜8000msをうろつきます。ちなみに、試したプログラムの最大メモリ使用量は51MBです。

コスト(料金)に注意
ただし、メモリを増やすとコストもかかってきます。これについては、下記の記事を御覧ください。
メモリ設定変更の方法に注意(Javaの場合)
管理画面でメモリを変更できるようになってますが、Javaの場合はメモリ設定だけを変更することはできないようです。jarのアップロード時にしか反映されない感じなので注意が必要です。

コストの点ではLambdaはGAEよりも若干高い気がしますが、制約もなくきちんとしたモノを作りたいのであれば選択肢として充分アリかなという印象ですね。



2015-07-12

EclipseでAWS Lambda Functionプログラミング(Java)

Lambdaについて、意外とJava版の情報が少ないので書いてみました。なお、本記事は新サービスである「Amazon API Gataway」を視野に入れた書き方をしています。

Lambdaとは
簡単にいうと、AWS上で動かすことのできるスクリプトです。AWSで提供されているサービスのイベントに合わせてプログラムを実行できます。例えば、
  • DynamoDBにデータが登録された際に〜な処理をする
みたいなこともできるわけです。以前までは、Javascript(node.js相当)で記述できましたが、先月、Javaも対応になりました。さらに、、、後日記事にするつもりですが、このたび、Amazon API Gatawayというサービスも登場し、Lambdaと連携できるようになったということもあり、今、ホットな話題と言えるでしょう。

Eclipseでの手順
ざっと書くと下記の通りです。

0.事前準備
Eclipse for AWS Pluginは入れておいて下さい。で、当然ですが、AWSのアカウントはもっており、Lambdaの実行権限のあるユーザアカウントを用意しておいて下さい。また、S3も使えるようにアカウント設定しておきましょう。

1.AWS Lambda Java Project でプロジェクトを生成
プロジェクトの作成でAWSのところに、AWS Lambda Java Projectがありますので、これをクリックして作成します。


2.InputTypeの設定に注意
Lambdaは基本的にAWSのイベントを扱いますから、どのようなイベントに対応するのかをInputTypeで設定します。今回はカスタムにしました。そして、Stringを授受するファンクションとしました。


3.サンプルコードを書き換えます
すでにサンプルはできていますので、出力がnullになっているので何か文字を返すように書き換えましょう。
4.アップロードと実行
プロジェクトを右クリックすることで、AWSへアップロードや実行をするメニューが出ます。

実行を選ぶとAWSへのアップもされるようです。

5.Deployするリージョンとファンクション名を指定
Lambdaにおいてどういうファンクション名にするのか指定します。既存のものに上書きすることもできます。なお、現段階では東京リージョンは使えない模様。

6.動作環境設定
最初は細かい設定が必要です。S3も使うようなのですが、何のためかは不明。コードの実体を保存する場所かと思いましたが、そういうわけではない模様。メモリとタイムアウトの設定については、どういう値がベターなのかは今後の要調査ですね。Roleについては、今回はAPIGatewayのを前提してます。


7.実行

実行時には、入力パラメータを求められるので必ず何かを書いて下さい。どうやらファンクションとのやりとりはJSON形式で行われているらしく、何もなしで実行するとJSON Parserエラーが出ます。今回はStringを受け取るファンクションを作ったわけですから、必ずStringを渡す必要があるのです。


実行結果は出力パネルに出ます。

ちなみに、、、、、この実行というのは、本番環境での実行になりますので注意して下さい。今回のサンプルでは、文字列を受け取るようになっているので、実行時の入力には必ず何か文字を渡して下さい。

以上、ざっと書いてみましたが、これとAmazon API Gatawayを組み合わせることで、面白いことができそうです。それについては後日。