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

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

新規登録して質問してみよう
ただいま回答率
85.48%
AWS(Amazon Web Services)

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

Q&A

解決済

1回答

4079閲覧

lambdaを用いたVPC内のインスタンスの停止起動について

Kabosu_700skg

総合スコア10

AWS(Amazon Web Services)

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

0グッド

0クリップ

投稿2017/08/05 17:55

###前提・実現したいこと
お世話になります。
lambdaを用いてインスタンスの自動起動停止をVPC環境で実現したいと考えています。

AWS・Ptythonともに経験が浅く、まずはWEBの記事等を参考にPython3.6を用いて非VPC環境で
CloudWotch -> Lambda -> インスタンス操作(起動停止)
の流れでインスタンスの起動停止を実現しました。

その後、正常に稼働した処理をVPC環境で動かすべくlambdaの設定でVPCを設定したところ、処理がタイムアウトするようになってしまいました。

そこでお聞きしたいのですが、
・自動起動停止はそもそもVPC内で行えるのか(VPC内で完結するのは無理とかかれたWEBサイトをみました)
・VPC内で自動起動停止を行うためのポイント

などのアドバイスを有識者の皆様からいただけるとうれしいです。
情報がすくなくて申し訳ありませんが、よろしくお願いいたします。

###発生している問題・エラーメッセージ
・lambdaにVPCを設定するとタイムアウトとなる。

エラーメッセージ 【VPC非設定】 [INFO] 2017-08-05T17:34:43.802Z 5dbaa40c-7a04-11e7-8920-cd76b523e32f === Instance停止開始 === [INFO] 2017-08-05T17:34:44.175Z 5dbaa40c-7a04-11e7-8920-cd76b523e32f === Instance停止成功 === [INFO] 2017-08-05T17:34:44.175Z 5dbaa40c-7a04-11e7-8920-cd76b523e32f === Instance停止終了 === 【VPC設定】 [INFO] 2017-08-05T17:21:16.640Z 7c97b617-7a02-11e7-bdbc-295ce323c70a === Instance停止開始 === [DEBUG] 2017-08-05T17:21:16.640Z 7c97b617-7a02-11e7-bdbc-295ce323c70a Event before-parameter-build.ec2.StopInstances: calling handler <bound method ParameterAlias.alias_parameter_in_call of <botocore.handlers.ParameterAlias object at 0x7fe02a617ef0>> [INFO] 2017-08-05T17:21:16.700Z 7c97b617-7a02-11e7-bdbc-295ce323c70a Starting new HTTPS connection (1): ec2.ap-northeast-1.amazonaws.com END RequestId: 7c97b617-7a02-11e7-bdbc-295ce323c70a REPORT RequestId: 7c97b617-7a02-11e7-bdbc-295ce323c70a Duration: 10003.95 ms Billed Duration: 10000 ms Memory Size: 128 MB Max Memory Used: 31 MB 2017-08-05T17:21:25.863Z 7c97b617-7a02-11e7-bdbc-295ce323c70a Task timed out after 10.00 seconds

###試したこと
課題に対してアプローチしたことを記載してください
・自分でVPCを構築
・VPC設定を外した状態での動作確認
→正常稼働を確認

###補足情報(言語/FW/ツール等のバージョンなど)
lambda設定:
Python3.6

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

LambdaがEC2を起動停止する場合、AWS SDK for Pythonを利用してAWSのAPIを呼び出してこれを実現します。

AWSのAPIエンドポイントはインターネットの先に有りますので、Lambdaはインターネットへ接続できる必要があることになります。

VPC内のLambdaがインターネットに接続するには、NATが必要です。
http://docs.aws.amazon.com/ja_jp/lambda/latest/dg/vpc.html#vpc-internet

重要

Lambda 関数でインターネットアクセスが必要な場合は、パブリックサブネットまたはインターネットに接続していないプライベートサブネットに添付しないでください。代わりに、NAT インスタンスまたは Amazon VPC NAT ゲートウェイを介して、インターネットにアクセスしているプライベートサブネットにのみ添付してください。

NATを用いてインターネットに接続できるようにすれば、Lambdaを用いてインスタンスの自動起動停止をVPC環境することが可能になると思います。

なお、VPC内でLambdaを実行する必要があるのは、VPC内にいないとアクセスできないリソースがある場合(VPC内の特定のサブネットからしかアクセスできないRDSへアクセスするなど)のみです。
今回のように、AWS APIをコールするLambdaをVPC内で動かす意味はありません。ENI作成のオーバーヘッドも発生してしまいますので、そもそもVPC外で実行したほうがよいかと思います。

投稿2017/08/05 21:31

kubihie

総合スコア32

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Kabosu_700skg

2017/08/06 03:23

回答ありがとうございます。 大変参考になりました。 >LambdaがEC2を起動停止する場合、AWS SDK for Pythonを利用してAWSのAPIを呼び出してこれを実現します。 外部のライブラリを呼んでいるのですね。 今回はVPC内にある外部からアクセスを認めないEC2に対しての対応を検討しているのでこのような質問をさせていただきました。 ご回答いただいた内容をもとに検討していきたいと思います。
kubihie

2017/08/06 03:41

ちょっと補足します。 >今回はVPC内にある外部からアクセスを認めないEC2に対しての対応を検討している Lambdaは、AWS SDK for Pythonを使用してAWSのAPIエンドポイントへ通信してAPIをコールします。 AWSのAPIがコールされると、AWSの仮想基盤経由でEC2が起動停止されることになります。 LambdaがEC2へ直接アクセスすることはありませんので、EC2が外部からのアクセスを認めない環境であっても問題ありません。
Kabosu_700skg

2017/08/07 07:16

補足いただきありがとうございます。 >LambdaがEC2へ直接アクセスすることはありませんので、EC2が外部からのアクセスを認めない環境であっても問題ありません。 EC2がVPC環境にあり外部アクセスを遮断している場合はlambdaも同じVPCでないとEC2の操作をできないものと考えていました。 補足も含め、ご説明ありがとうございました。 何とか希望する要件をクリアする目処がついたような気がします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問