如何编写AWS Lambda代码以向pipline报告工作完成情况



编辑:更改lambda函数和日志输出,问题重新处理:/

具有以下lambda函数作为代码管道中的步骤:

import boto3
import json
import sys
import os
import pymysql
import logging
logger = logging.getLogger()
logger.setLevel(logging.INFO)
DB_HOST = os.environ['DB_HOST']
DB_USER = os.environ['DB_USER']
DB_PASS = os.environ['DB_PASS'], 
DB_PORT = int(os.environ['DB_PORT'])
codepipeline = boto3.client('codepipeline')
cursorType = pymysql.cursors.DictCursor
try:
connection = pymysql.connect(
host=DB_HOST, 
user=DB_USER,
password=DB_PASS, 
port=DB_PORT,

)
except pymysql.MySQLError as err:
logger.error("Error: Could not connect to MySql db")
logger.error(err)
sys.exit()

logger.info("Success: Connected to MySql db")

def lambda_handler(event, context):
cursor = connection.cursor()
try:
logger.info("Dropping db...")
cursor.execute(f"drop database {DB_NAME}")
logger.info("Creating db...")
cursor.execute(f"create database {DB_NAME}")
logger.info("Db created")
connection.close()
logger.info('Conection closed')
job_id = event['CodePipeline.job']['id']
logger.info("Job id `{job_id}`")
response = codepipeline.put_job_success_result(jobId=job_id)
logger.info(response)
except Exception as err:
logger.error(err)  
response = codepipeline.put_job_failure_result(
jobId=job_id, failureDetails={'message': message, 'type': 'JobFailed'}
)
return {
"statusCode": 200,
}

功能运行的功能日志:

START RequestId: 02e2f7cb-817d-4e49-90db-5b4cae5c9336 Version: $LATEST 
[INFO] 2020-09-23T07:38:34.515Z  Found credentials in environment variables. 
[INFO] 2020-09-23T07:38:34.598Z  Success: Connected to MySql db 
{'CodePipeline.job': {'id': '9a8b13ea-d4f8-4aea-8481-60db0b7b5b5d... snip} 
Dropping db 
Creating db 
Db created 
Conection closed 
[INFO] 2020-09-23T07:38:34.732Z 02e2f7cb-817d-4e49-90db-5b4cae5c9336 Job id 9a8b13ea-d4f8-4aea-8481-60db0b7b5b5d 
successfuly done 
END RequestId: 02e2f7cb-817d-4e49-90db-5b4cae5c9336 
REPORT RequestId: 02e2f7cb-817d-4e49-90db-5b4cae5c9336 Duration: 60060.17 ms Billed Duration: 60000 ms Memory Size: 128 MB Max Memory Used: 76 MB Init Duration: 426.53 ms  
2020-09-23T07:39:34.660Z 02e2f7cb-817d-4e49-90db-5b4cae5c9336 Task timed out after 60.06 seconds
[INFO] 2020-09-23T07:39:35.55Z  Found credentials in environment variables. 
[INFO] 2020-09-23T07:39:35.94Z  Success: Connected to MySql db 
START RequestId: 02e2f7cb-817d-4e49-90db-5b4cae5c9336 Version: $LATEST 
{'CodePipeline.job': {'id': '9a8b13ea-d4f8-4aea-8481-60db0b7b5b5d',... snip} 
Dropping db 
Creating db 
Db created 
Conection closed 
[INFO] 2020-09-23T07:41:39.974Z 02e2f7cb-817d-4e49-90db-5b4cae5c9336 Job id 9a8b13ea-d4f8-4aea-8481-60db0b7b5b5d 
successfuly done 
END RequestId: 02e2f7cb-817d-4e49-90db-5b4cae5c9336 
REPORT RequestId: 02e2f7cb-817d-4e49-90db-5b4cae5c9336 Duration: 60060.32 ms Billed Duration: 60000 ms Memory Size: 128 MB Max Memory Used: 30 MB  
2020-09-23T07:42:39.925Z 02e2f7cb-817d-4e49-90db-5b4cae5c9336 Task timed out after 60.06 seconds 

我怎么能"力";lambda向代码管道报告作业是否完成,而不是只是在某种循环中运行?

Lambda IAM角色的政策如下所示:

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ssm:Describe*",
"ssm:Get*",
"ssm:List*",
"kms:Decrypt",
"ssm:GetParametersByPath",
"ec2:DescribeNetworkInterfaces",
"ec2:CreateNetworkInterface",
"ec2:DeleteNetworkInterface",
"ec2:DescribeInstances",
"ec2:AttachNetworkInterface",
"codepipeline:PutJobSuccessResult",
"codepipeline:PutJobFailureResult"
],
"Resource": "*"
}
]
}

请帮忙,因为我找不到lambda不是"的原因;让人知道";返回有关作业状态的管道。

因此,要么创建代码管线vpc端点,要么将lambda移动到专用网络。。。已破案:(。

相关内容

  • 没有找到相关文章

最新更新