我最近發佈了一個關於How to allow invoking an AWS Lambda function only from EC2 instances inside a VPC的問題。 我設法通過將具有「AWS lambda role」策略的IAM角色附加到EC2實例來實現它,現在我可以使用boto3調用lambda函數。如何使用python asyncio從EC2實例調用AWS Lambda函數
現在,我想使用asyncio await語法異步調用lambda函數。我通過設置InvokeType='Event'
來讀取lambda函數提供的異步版本,但實際上使得調用立即返回而沒有得到函數的結果。
由於該函數需要一些時間,我想並行啓動很多,我希望避免在等待函數返回時阻止執行。
我試過使用aiobotocore,但那只是支持基本的's3'服務功能。
解決這個問題的最好方法就是使用AWS API網關服務通過GET/POST請求調用lambda函數,該請求可以使用aiohttp輕鬆處理。
儘管如此,我並沒有設法使它工作。
我加入到EC2 IAM角色的政策「AmazonAPIGatewayInvokeFullAccess」但每次我嘗試時間:
import requests
r = requests.get('https://url_to_api_gateway_for_function')
我得到禁止迴應<Response [403]>
。
我直接使用lambda函數中的觸發器創建了API網關。
我還嘗試編輯API網關設置,方法是在函數路徑中添加post方法,並設置「AWS_IAM」身份驗證,然後將其部署爲「prod」部署...沒有運氣。同樣禁止的迴應。當我通過「API網關上的測試屏幕」進行測試時,它可以正常工作。
任何想法如何解決這個問題?我錯過了一些步驟?
http://docs.aws.amazon.com/apigateway/latest/developerguide/getting-started.html#getting-started-prerequisites'你可以使用或自定義所管理的策略AWSLambdaFullAccess(arn:aws:iam :: aws:policy/AWSLambdaFullAccess)並將其附加到IAM用戶 – mootmoot
我試過這個教程,我設法使它工作,只要我沒有設置** AWS_IAM **作爲授權API ...只要我打開它,從EC2即使我使用策略AWSLambdaFullAccess作爲EC2實例,我也可以獲得403響應... – Bertone
什麼是AWS_IAM授權? – mootmoot