AWSIaCPython

LocalStackで実行しているLambdaからboto3で別のLambdaを呼び出す方法

AWS

LocalStackを使ってローカルPC上に開発環境を構築していたのですが、 1つのLambda関数ないからもう一つ別のLambda関数をboto3経緯でInvokeしたかったのですがうまく行かずにハマってしまったのでメモです。

1. 構成図

こんな感じですね。

2. うまくいかなかったコード

Pythonになります。

Handler内の部分だけ抜粋してます。以下の様な感じで実行しています。

function_name = function02

client = boto3.client('lambda', endpoint_url='http://localhost:4566')
client.invoke(
    FunctionName=function_name,
    InvocationType='Event',
    LogType='Tail',
    Payload=json.dumps(event)
)

3. エラーメッセ-ジ

以下のエラーが表示されます。

接続できていません。 Lambda関数はコンテナ内で展開されるので、endpointがコンテナに対しての接続になってしまっているようです。

raise EndpointConnectionError(endpoint_url=request.url, error=e)ponset_exceptionionError: Could not connect to the endpoint URL: "http://localhost:4566/2015-03-31/functions/back/invocations"

そこで、コンテナが実行されている上のホストの情報取得が必要となります。

4. うまくいったコード

そのためにos.environ['LOCALSTACK_HOSTNAME']を利用します。

これでコンテナが実行されている上のホストの情報を取得できて接続できるようになりました。

function_name = function02

print(os.environ['LOCALSTACK_HOSTNAME]))

client = boto3.client('lambda', endpoint_url='http://%s:4566' % os.environ['LOCALSTACK_HOSTNAME'])
client.invoke(
    FunctionName=function_name,
    InvocationType='Event',
    LogType='Tail',
    Payload=json.dumps(event)
)

5. まとめ

あまりこのシチュエーションはないかもしれないのですが、一応誰かの役に立てればうれしいです。

AWSを効率的に学習する方法

私がAWSを学習するために使った学習材料は「Udemy」だけです。

まずは座学を行ってAWSプラクティショナー もしくは ソリューションアーキテクト試験を取得することを目標にしました。

具体的にはUdemyで以下の2つの商材を購入して学習しました。AWS公式が提供している模擬試験も受けていません。

Udemyは世界最大級のオンライン学習プラットフォームで、世界中の学びたい人と教えたい人をオンラインでつなぐサービスです。 Udemyは米国Udemy,Inc.が運営するプラットフォームで日本ではベネッセが事業パートナーとして協業をしています。 C2C(consumer to consumer)により生まれる豊富で多彩な講座により個人の学習ニーズに応じた学びをみつけることができます。

これだけでOK! AWS 認定ソリューションアーキテクト – アソシエイト試験突破講座(SAA-C02試験対応版)
【SAA-C02版】AWS 認定ソリューションアーキテクト アソシエイト模擬試験問題集(6回分390問)

今回は以上となります。

コメント

タイトルとURLをコピーしました