質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.02%
AWS Lambda

AWS Lambdaは、クラウド上でアプリを実行できるコンピューティングサービス。サーバーのプロビジョニングや管理を要せず複数のイベントに対してコードを実行します。カスタムロジック用いた他AWSサービスの拡張やAWSの規模やパフォーマンスを用いたバックエンドサービスを作成できます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

【AWS】lambdaでboto3のSSM(send_command)からEC2にコマンド実行するとエラーが出ずにタイムアウトしてしまいます。

BlogerHedgehog
BlogerHedgehog

総合スコア1

AWS Lambda

AWS Lambdaは、クラウド上でアプリを実行できるコンピューティングサービス。サーバーのプロビジョニングや管理を要せず複数のイベントに対してコードを実行します。カスタムロジック用いた他AWSサービスの拡張やAWSの規模やパフォーマンスを用いたバックエンドサービスを作成できます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

1回答

0グッド

0クリップ

3296閲覧

投稿2021/08/23 03:42

前提・実現したいこと

AWS上でlambdaからboto3のSSMクライアントのsend_commandを用いて同一VPC内のEC2インスタンスにコマンドを送ろうとす
ると特に何もエラーを出さずにタイムアウトしてしまいます。(実行時間は3分設定)

同じコードをローカルPCから投げると正常にEC2のコマンドが叩かれましたがlambda上からは実行できないという状況です。

ネットワーク設定の問題かと思い色々いじっていたのですが改善せず、ご教示いただきたく存じます。

以下、設定詳細です。
・VPC内にプライベートサブネットとパブリックサブネットを1つずつ作成
・lambdaはプライベートサブネットに設置
・EC2インスタンスはパブリックサブネットに設置
・セキュリティグループはlambda、EC2ともにすべてのポート、プロトコル、ソースの送受信を許可)
・ネットワークACLはデフォルト(制限なし)
・付与したIAMロールはそれぞれ以下
【lambda】不要なものもありますが色々ためしていましたので...。
・AmazonEC2FullAccess
・AmazonEC2RoleforSSM
・AmazonSSMManagedInstanceCore
・CloudWatchLogsFullAccess
・AmazonAPIGatewayAdministrator
・AmazonSSMFullAccess
・AmazonVPCFullAccess
・AWSLambdaBasicExecutionRole
・AWSLambdaVPCAccessExecutionRole
・AWSLambda_FullAccess
【EC2】
・AmazonEC2FullAccess
・AmazonEC2RoleforSSM
・AmazonSSMManagedInstanceCore
・AmazonSSMFullAccess

発生している問題・エラーメッセージ

特にエラー出力がなく、タイムアウトが返っています。

Response { "errorMessage": "2021-08-23T02:41:30.963Z de6ce47e-1dc2-4b55-aae2-355d051fc201 Task timed out after 180.10 seconds" } Function Logs START RequestId: de6ce47e-1dc2-4b55-aae2-355d051fc201 Version: $LATEST ssm作成 ['cd /home/ec2-user/'] END RequestId: de6ce47e-1dc2-4b55-aae2-355d051fc201 REPORT RequestId: de6ce47e-1dc2-4b55-aae2-355d051fc201 Duration: 180100.70 ms Billed Duration: 180000 ms Memory Size: 256 MB Max Memory Used: 81 MB Init Duration: 335.84 ms 2021-08-23T02:41:30.963Z de6ce47e-1dc2-4b55-aae2-355d051fc201 Task timed out after 180.10 seconds

該当のソースコード

python3.7 import json import boto3 import time def lambda_handler(event, context): ssm = boto3.client('ssm' ,region_name='************', aws_access_key_id='********************', aws_secret_access_key='********************') print("ssm作成") commands = ["cd /home/ec2-user/"] print(commands)#ここまでログ出力されています ##Command投入 r = ssm.send_command( InstanceIds = ["i-****"], DocumentName = "AWS-RunShellScript", Parameters = {"commands": commands} ) print("コマンド投入完了")#このログは出力されず command_id = r['Command']['CommandId'] time.sleep(2) res = ssm.list_command_invocations( CommandId = command_id, Details = True ) invocations = res['CommandInvocations'] status = invocations[0]['Status'] if status == "Failed": print("Command実行エラー") ## 結果格納 account = invocations[0]['CommandPlugins'][0]['Output'] print(account) return

試したこと

上記の通り、同じコードをローカルPCで実行すると正常に動作しました。
lambdaで実行した場合のみこの現象が起こります。

以上、ご教示いただきたく、よろしくお願いいたします。

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

回答1

0

ベストアンサー

プライベートサブネット内にあるせいでssmのエンドポイントにリクエストが届いてないのでは。
AWSのAPIは基本的にパブリックなエンドポイントなので、プライベートサブネット内から通信させるにはVPCエンドポイントを作成するか、NATを使ってプライベートサブネット内からインターネットに対して通信ができるようにする必要があります。
そもそもVPC Lambdaである必要をあまり感じないのでVPC Lambdaをやめるのが一番簡単です。
それが要件的に無理なのであれば上記の通りにしてみてください。

参考
VPC エンドポイント
NATを作る場合は、マネージドサービスであればNATゲートウェイがあります。
NATゲートウェイ

投稿2021/08/23 06:14

yu_1985

総合スコア7072

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.02%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

AWS Lambda

AWS Lambdaは、クラウド上でアプリを実行できるコンピューティングサービス。サーバーのプロビジョニングや管理を要せず複数のイベントに対してコードを実行します。カスタムロジック用いた他AWSサービスの拡張やAWSの規模やパフォーマンスを用いたバックエンドサービスを作成できます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。