** Der Indikator dreht sich ständig **
(10 Minuten stehen, es bleibt gleich) Ich bin verrückt! !! !! font>Ich bin gestolpert, als ich Lambda anrufen wollte, um den CloudFront-Cache nach Abschluss der Bereitstellung in S3 zu leeren, und habe ihn zusammengefasst.
** Weil codepipeline: PutJobSuccessResult (*)
nicht zurückgegeben wird **
codepipeline: PutJobFailedResult
PutJobSuccessResult Erforderlich, um den Erfolg des vom Jobarbeiter zurückgegebenen Jobs an die Pipeline zu melden. Wird nur für benutzerdefinierte Aktionen verwendet. Zitiert aus https://docs.aws.amazon.com/ja_jp/codepipeline/latest/userguide/permissions-reference.html
CodePipeline empfängt nur die Ergebnisse von ** benutzerdefinierten Aktionen (wie Lambda), die es in einem festen Format aufruft **, PutJobSuccessResult
und PutJobFailedResult
.
** Auch wenn es in einem anderen Format zurückgegeben wird, wird es ignoriert, sodass sich der Indikator dreht **, dass das Ergebnis schon lange nicht mehr von Lambda stammt.
Ich habe es geschafft. </ font>
** OK, indem Sie Code schreiben, der "PutJobSuccessResult" und "PutJobFailedResult" auf Lambda zurückgibt. ** ** **
Wie man tatsächlich PutJobSuccessResult und PutJobFailedResult in Lambda nach Sprache zurückgibt.
Python
Lambda-Laufzeit_Python3.7
import json
import boto3
def lambda_handler(event, context):
codepipeline = boto3.client('codepipeline')
#Ergebnisse auf CodePipeline(Erfolg)Gib es zurück
codepipeline.put_job_success_result(jobId = event['CodePipeline.job']['id'])
#Ergebnisse auf CodePipeline(Fehler)Gib es zurück
# codepipeline.put_job_failure_result(
# jobId = event['CodePipeline.job']['id'],
# failureDetails={
# 'type': 'JobFailed',
# 'message': 'Failed test.'
# }
# )
return {
'statusCode': 200,
'body': json.dumps('Hello from Lambda!')
}
Ruby
Lambda-Laufzeit_Ruby2.5
require 'json'
require 'aws-sdk'
def lambda_handler(event:, context:)
codepipeline = Aws::CodePipeline::Client.new()
#Ergebnisse auf CodePipeline(Erfolg)Gib es zurück
codepipeline.put_job_success_result({job_id: event["CodePipeline.job"]['id']})
#Ergebnisse auf CodePipeline(Fehler)Gib es zurück
# codepipeline.put_job_failure_result({
# job_id: event["CodePipeline.job"]['id'],
# failure_details: {
# type: "JobFailed", # accepts {JobFailed, ConfigurationError, PermissionError, RevisionOutOfSync, RevisionUnavailable, SystemUnavailable}
# message: "Failed test."
# }
# })
{ statusCode: 200, body: JSON.generate('Hello from Lambda!') }
end
Node.js
javascript:Lambda-Laufzeit_Node.js10.x
var AWS = require('aws-sdk');
exports.handler = function(event, context) {
var codepipeline = new AWS.CodePipeline();
//Ergebnisse auf CodePipeline(Erfolg)Gib es zurück
codepipeline.putJobSuccessResult({jobId: event["CodePipeline.job"].id}, function(err, data) {
if(err) {
context.fail(err);
} else {
context.succeed('Success test.');
}
});
//Ergebnisse auf CodePipeline(Fehler)Gib es zurück
// var params = {
// jobId: event["CodePipeline.job"].id,
// failureDetails: {
// message: JSON.stringify('Failed test.'),
// type: 'JobFailed',
// }
// };
// codepipeline.putJobFailureResult(params, function(err, data) {
// context.fail('Failed test.');
// });
const response = {
statusCode: 200,
body: JSON.stringify('Hello from Lambda!'),
};
return response;
};
Normalerweise schreibe ich Node.js nicht, daher weiß ich nicht, ob dies der erforderliche Mindestcode ist. </ Font>
Schauen wir uns zunächst das CloudWatch-Protokoll von Lambda an.
AccessDeniedException
Als Ergebnis der Ausführung von Lambda zeigt CloudWatch Log so etwas an.
{
"errorType": "AccessDeniedException",
"errorMessage": "User: arn:aws:sts::1111111111111:assumed-role/codetest-role-xxxxxxxxx/codetest is not authorized to perform: codepipeline:PutJobSuccessResult",
...etc
}
Sie haben auch die Berechtigung, Ergebnisse von Lambda an CodePipeline zurückzugeben ...
Die folgende IAM-Richtlinie muss der Lambda zugewiesenen IAM-Rolle hinzugefügt werden.
IAM-Richtlinie
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"logs:*"
],
"Effect": "Allow",
"Resource": "arn:aws:logs:*:*:*"
},
{
"Action": [
"codepipeline:PutJobSuccessResult",
"codepipeline:PutJobFailureResult"
],
"Effect": "Allow",
"Resource": "*"
}
]
}
Bitte lassen Sie mich wissen, wenn Sie Fehler machen.
Recommended Posts