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

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

新規登録して質問してみよう
ただいま回答率
85.48%
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サーバーのコンピュータリソースをレンタルできるサービスです。

Q&A

0回答

272閲覧

AWS上で特定のサーバが停止している際に別のサーバ複数台も停止したい

btm2023

総合スコア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サーバーのコンピュータリソースをレンタルできるサービスです。

0グッド

0クリップ

投稿2023/05/10 12:55

編集2023/05/11 00:17

実現したいこと

AWS上で特定のサーバ複数台が停止している際に別の特定のサーバ複数台も停止するLambdaを作成したい

前提

プログラミング初心者です。
Lambdaにて特定のサーバが停止していることをトリガーにほかの特定のサーバも停止するスクリプトの作成を
検討しています。
Environmentというタグが01のサーバにてrunningステータスのものが一台もない場合は、
Environmentタグ02のサーバをすべて停止したいと考えております。

###調査したこと・試したこと
https://tex2e.github.io/blog/infrastructure/aws-stop-ec2

こちらのページのスクリプトを参考に、コードを作成していますが、エラーが発生しており
どう直せばいいかわからない状態です。
やりたいことに沿う形で直し方がわかる方がいらっしゃればご教示下さい。

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

{
"errorMessage": "Syntax error in module 'lambda_function': unindent does not match any outer indentation level (lambda_function.py, line 19)",
"errorType": "Runtime.UserCodeSyntaxError",
"stackTrace": [
" File "/var/task/lambda_function.py" Line 19\n instances = ec2.instances.filter(Filters=filters)\n"
]
}

該当のソースコード

import boto3

ec2 = boto3.resource('ec2')

def lambda_handler(event, context):
# create filter for instances in running state
filters = [
{
'Name': 'instance-state-name',
'Values': ['running']
},
{ # EC2のタグ「Environment」の値が「01」
'Name': 'tag:Environment',
'Values': ['01'],
}
]

instances = ec2.instances.filter(Filters=filters)

StoppedInstances = []

for instance in instances:

StoppedInstances.append(instance.id) print (instance.id) if len(response['Reservations']) <= 0: instance_ids = [] for instance_dic in response['Reservations']: instance_ids.append(instance_dic['Instances'][0]['InstanceId']) response = client.stop_instances(InstanceIds=instance_ids) print('[+] stop ec2 on region "%s"' % region['RegionName']) print(response) continue

stop_ec2()

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

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

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

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

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

AbeTakashi

2023/05/10 14:49

少なくともどういうエラーがでているかの情報がないと回答が出てこないと思います。ソースコードもちゃんと表示されてないようですので、そこも合わせて修正されるといいかと思います。 参考) https://teratail.com/help/question-tips しっかり読まれて足りない要素を付け加えれば、回答が出てきそうな気配があります。現状の情報だけだと厳しいかと。
btm2023

2023/05/11 00:18

ご丁寧にコメント頂きありがとうございます。 ソースコードを正常に表示するように、編集しまたエラーメッセージについても追記しました。
AbeTakashi

2023/05/11 02:16

エラーメッセージを読まれたでしょうか? シンタックスエラーで"unindent does not match any outer indentation level"と書かれています。これでググると色々出てくるので、まずはそちらを読まれてください。何が起きてるか概ね把握できるかと思います。 かつ、ソースコードを正常に表示するようした、とのことですが、ソースコードの上部の方は正しく表示されていません。インデントがどうなってるか一切分からないので、やはり現状だと第三者がアドバイスするのが厳しい状況です。参考で示したURLを再度見ていただき、ソースコード全体が正しく表示されインデントもしっかりと表示されるようになれば、的確なアドバイスが出てくる可能性があります。
btm2023

2023/05/11 04:57

再度ご丁寧にコメント頂きありがとうございます。 まずは、エラー内容を調べるようにいたします。 またソースコードの表示についても、テラテイルの使い方を調べて再度正常に表示できるよう試してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問