3 回答

TA貢獻1802條經(jīng)驗 獲得超6個贊
正如評論中建議更好地使用SNS
or ,我認為它比 lambda 函數(shù)更合適,并且 SNS 或 SQS 涉及與實例SQS
之間的一對一通信,那么為什么要添加額外的 lambda 層?S3
EC2
雖然三個可以訂閱事件,但 lambda 涉及一個額外的層,并且還涉及 ssh,我認為這在時間上是昂貴的(s3 事件接收 + 事件進程 + ssh 到 ec2)。
使用 Lambda:
當(dāng) lambda 觸發(fā)器將開始ssh
對 ec2 執(zhí)行操作并運行腳本時,Lambda 的一大優(yōu)勢是您可以運行任何類型的腳本,并且您不需要服務(wù)器來保持它們的正常運行,就像 SQS 和社交網(wǎng)絡(luò)。您可以探索這些示例ssh-ec2-lambda/和scheduling-ssh-jobs-using-aws-lambda,第二個示例類似,只是您需要基于事件而不是調(diào)度。
社交網(wǎng)絡(luò):
如果多個實例假設(shè)在 ec2 實例上運行作業(yè)腳本,則 SNS 是更好的選擇。該圖有點類似于您的用例或用于表示大圖。
質(zhì)量保證:
如果只有一個實例應(yīng)該運行腳本,那么 SQS 將適合處理該事件。

TA貢獻1827條經(jīng)驗 獲得超8個贊
我不知道為什么你的選擇不起作用,因為它絕對有可能,我已經(jīng)使用這個博客aws blog
每當(dāng)具有特定擴展名的文件上傳到存儲桶 (terraform) 時,此 git存儲庫都有代碼觸發(fā) lambda。
您可以通過 lambda 訪問 EC2 實例,如上面的塊中所示,使用標(biāo)簽。
希望這一切對您有所幫助。

TA貢獻1829條經(jīng)驗 獲得超9個贊
我在網(wǎng)上找到的博客的幫助下進行了管理,該博客的鏈接已丟失,但有代碼。
import time
import boto3
import paramiko
import os
def lambda_handler(event, context):
ec2 = boto3.resource('ec2', region_name='us-east-1',aws_access_key_id='XXXXXXXXXXXXXXXXXXXX',aws_secret_access_key='XXXXXXXXXXXXXXXXXXXX')
instance_id = 'XXXXXXXXXXXXXXXX'
instance = ec2.Instance(instance_id)
# Start the instance
instance.start()
# Giving some time to start the instance completely
#time.sleep(60)
# Connect to S3, we will use it get the pem key file of your ec2 instance
s3_client = boto3.client('s3',aws_access_key_id='XXXXXXXXXXXXXXXXXXXX',aws_secret_access_key='XXXXXXXXXXXXXXXXXXXX')
# # # Download private key file from secure S3 bucket
# # # and save it inside /tmp/ folder of lambda event
bucket_name = ''
key_name = ''
key_location = ''
s3_client.download_file(bucket_name, key_name, key_location)
# # # # Allowing few seconds for the download to complete
time.sleep(10)
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
privkey = paramiko.RSAKey.from_private_key_file(key_location)
# # # username is most likely 'ec2-user' or 'root' or 'ubuntu'
# # # depending upon yor ec2 AMI
ssh.connect(instance.private_ip_address,22, username='ubuntu', pkey=privkey)
commands = []
for command in commands:
print("Executing {}".format(command))
stdin , stdout, stderr = ssh.exec_command(command)
stdin.flush()
data = stdout.read().splitlines()
for line in data:
print(line)
ssh.close()
return 'Success'
現(xiàn)在只需壓縮 paramiko 庫。如果我再次找到該博客,將更新答案。
添加回答
舉報