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を学習するために実施した方法は以下の通りです。
 ①最初に書籍(ハンズオンができる)を購入、座学でAWSの基礎を学習
 ②AWS資格試験を取得ための学習

※私の場合は①と②を合わせて2か月でソリューションアーキテクトを取得できました。

①AWS基礎学習

最初に購入した書籍は「Amazon Web Services 基礎からのネットワーク&サーバー構築」です。

Amazon Web Services 基礎からのネットワーク&サーバー構築

この本では、AWSの基本サービスを利用したハンズオンを通じて、AWSの基礎を学習することができます。

また、タイトル通りAWSのネットワークやインフラに関しても網羅しているため、もともとインフラ系の技術者ではない人たちにとっても分かりやすい内容だと思います。

とりあえずAWS上にサーバーを設定して開発を行うための準備までするには最良の一冊です。

Amazon Web Services 基礎からのネットワーク&サーバー構築

②AWS資格取得

AWSの基礎をある程度学習することができたら、次はAWS資格を取得しましょう。まずはAWSソリューションアーキテクトを目指しましょう。

資格勉強のための問題集をひたすら解きながら、AWSの知識を積み重ねて習得していきましょう!

苦行ではありますがこの問題集を3周ほどすればAWS用語や構成に関しても習得できているはずです。

AWS認定ソリューションアーキテクト-アソシエイト問題集

今回は以上となります。

コメント