AWS Lambdaで以下のPythonスクリプトを作成して、停止したすべてのインスタンスを一覧表示します。これは正常に機能します。ここで、停止したインスタンスを起動して機能を拡張したいと思います。
脚本:
region ='us-east-1'
ec2 = boto3.resource('ec2',region)
def lambda_handler(event, context):
instances = ec2.instances.filter(Filters=[{'Name': 'instance-state-name', 'Values': ['stopped']}])
for instance in instances:
print('Ec2 Instances which are stopped: ', 'Instance ID: ', instance.id, 'Instance state: ', instance.state, 'Instance type: ',instance.instance_type)
現在、インスタンスを開始するために次のコードを追加しています。
ec2.start_instances(InstanceIds=instance.id)
(InstanceIds = '')はここにリストを期待しているため、エラー[ec2.ServiceResource 'オブジェクトには属性' start_instances]がありませんが、インスタンスのタイプは<class 'boto3.resources.factory.ec2.Instance'>
How do i convertであるため、start_instancesメソッドにリストを入力できます。
前もって感謝します!!
以下に、回答を得た後の更新されたスクリプトを見つけてください。このスクリプトは、停止したインスタンスを自動的に開始します。
更新されたスクリプト
region ='us-east-1'
ec2 = boto3.resource('ec2',region)
client = boto3.client('ec2',region)
def lambda_handler(event, context):
instances = ec2.instances.filter(Filters=[{'Name': 'instance-state-name', 'Values': ['stopped']}])
for instance in instances:
print('Ec2 Instances which are stopped: ', 'Instance ID: ', instance.id, 'Instance state: ', instance.state, 'Instance type: ',instance.instance_type)
instance_ids = [instance.id for instance in instances]
response = client.start_instances(InstanceIds=[instance.id])
print('Lambda have started these instances', instance.id)
注意このスクリプトをコピーして貼り付ける場合は、インスタンスがオンになり、コストがかかる可能性があるため、注意してください。(このスクリプトは機能しています、テスト済みです!)
ec2.instancesは高レベルのリソースで、start_instanceは低レベルのクライアントです。クライアント関数を使用するには、次のコマンドでクライアントを作成する必要があります。boto3.client('ec2')
client = boto3.client('ec2')
response = client.start_instances(
InstanceIds=[
'string',
],
)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加