Created
September 13, 2018 05:04
-
-
Save deopard/3767b4f96bc9760c5dc7ce45d30647bb to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// AWS SDK를 이용한다. | |
const AWS = require('aws-sdk'); | |
const sns = new AWS.SNS(); | |
const codepipeline = new AWS.CodePipeline(); | |
// Lambda 함수가 실행되면 아래 함수에 파라미터가 채워져서 호출된다. | |
exports.handler = (event, context, callback) => { | |
// event 변수의 값을 확인해보기 위한 로깅 | |
console.log('EVENT--------'); | |
console.log(event); | |
// 현재 실행되고 있는 CodePipeline의 job id | |
const jobId = event['CodePipeline.job'].id; | |
// SNS의 주제를 게시할 때 사용할 파라미터 | |
// Message는 CodePipeline에서 넘어온 UserParameter 값을 사용하여 구성한다. | |
// 주제 ARN은 SNS에서 생성한 주제의 ARN 값을 입력한다. | |
const snsParams = { | |
Message: `${userParams(event)} 배포 완료!`, | |
TopicArn: 'arn:aws:sns:ap-northeast-2:XXXXXXXXXX:code-pipeline-notification' // 실제 ARN 값 입력 필요! | |
}; | |
// SNS의 주제에 게시한다. | |
sns.publish(snsParams, (snsErr, data) => { | |
// SNS 주제 게시에 실패한 경우 | |
if (snsErr) { | |
console.log(snsErr); | |
const pipelineParams = { | |
jobId: jobId, | |
failureDetails: { | |
message: JSON.stringify(snsErr), | |
type: 'JobFailed', | |
externalExecutionId: context.invokeid | |
} | |
}; | |
return codepipeline.putJobFailureResult(pipelineParams, (pipelineErr, data) => { | |
if (pipelineErr) { | |
console.log(pipelineErr); | |
callback(pipelineErr, 'SNS: fail. CodePipeline: fail'); | |
} else { | |
callback(snsErr); | |
} | |
}); | |
} else { | |
const pipelineParams = { | |
jobId: jobId | |
}; | |
return codepipeline.putJobSuccessResult(pipelineParams, (pipelineErr, data) => { | |
if (pipelineErr) { | |
console.log(pipelineErr); | |
callback(pipelineErr, 'SNS: success, CodePipeline: fail'); | |
} else { | |
callback(null, data); | |
} | |
}); | |
} | |
}); | |
// CodePipeline에서 넘어온 user parameter 값을 추출한다. | |
function userParams(event) { | |
let value; | |
try { | |
value = event['CodePipeline.job'].data.actionConfiguration.configuration.UserParameters; | |
} catch (error) { | |
value = ''; | |
} | |
return value; | |
} | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment