![](/img/trans.png)
[英]AWS Lambda, Python : Call Shell script from Lambda or Linux command
[英]Launch a shell script from Lambda in AWS
如果我在EC2實例中有一個bash腳本,是否有一種方法可以觸發lambda?
lambda的觸發器將來自RDS。 因此,mysql中的表會更新,並且該表中的特定列會更新為“Ready”,Lambda必須以“Ready”狀態提取該行的ID,並將該ID發送到bash腳本。
使用Amazon EC2 Simple Systems Manager ,您可以配置SSM文檔以在實例上運行腳本,並為該腳本傳遞參數。 Lambda實例需要運行SSM send-command,以實例ID為目標。
示例SSM文檔:run_my_example.json:
{
"schemaVersion": "1.2",
"description": "Run shell script to launch.",
"parameters": {
"taskId":{
"type":"String",
"default":"",
"description":"(Required) the Id of the task to run",
"maxChars":16
}
},
"runtimeConfig": {
"aws:runShellScript": {
"properties": [
{
"id": "0.aws:runShellScript",
"runCommand": ["run_my_example.sh"]
}
]
}
}
}
上述SSM文檔接受taskId作為參數。
將此文檔另存為JSON文件,並使用AWS CLI調用create-document:
aws ssm create-document --content file:///tmp/run_my_example.json --name "run_my_example"
您可以通過調用describe-document
來查看SSM文檔的describe-document
:
aws ssm describe-document --name "run_my_example"
您可以指定taskId參數並使用send-command
使用文檔名稱來運行該send-command
aws ssm send-command --instance-ids i-12345678 --document-name "run_my_example" --parameters --taskid=123456
筆記
實例必須運行最新版本的SSM代理 。
您需要在Lambda腳本中使用一些邏輯來標識服務器EG的實例ID,以查找特定標記實例的實例ID。
我們假設一些事情。 首先,您知道如何使用sns設置“觸發器”(請參閱此處 )以及如何從所述觸發器掛起lambda腳本。 其次,你對python有一點了解(Lambda的語法產品是Node,Java和Python),因為這個例子將在Python中。 另外,我不會介紹如何使用mysql查詢數據庫。 您沒有提到您的RDS實例是MySQL,Postgress還是其他。 最后,您需要了解如何通過IAM角色和策略允許跨AWS資源的權限。
以下腳本將至少概述向您的實例觸發腳本的方法(您必須弄清楚如何查詢相關信息或將該信息傳遞到SNS主題),然后在實例上運行shell命令指定。
import boto3
def lambda_handler(event, context):
#query RDS to get ID or get from SNS topic
id = *queryresult*
command = 'sh /path/to/scriptoninstance' + id
ssm = boto3.client('ssm')
ssmresponse = ssm.send_command(InstanceIds=['i-instanceid'], DocumentName='AWS-RunShellScript', Parameters= { 'commands': [command] } )
我可能有兩個RDS行的標志。 一個說“准備好”,一個說“已識別”。 所以SNS主題觸發lambda腳本,lambda腳本查找'ready'= true和'identify'= false的行,將'identify'更改為true(以確保可能同時運行的其他lambda腳本不會運行拿起它,然后開火腳本。 如果腳本未成功運行,請將“已識別”更改回false以確保您的數據保持有效。
其中一件事要考慮的是:
我建議看看消息隊列(比如SQS)。 這將解決很多頭痛問題。
它是如何工作的:
我認為您可以使用新的EC2 Run Command功能來完成此任務。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.