LoginSignup
3
2

More than 3 years have passed since last update.

CodePipeLineからLambda呼び出しを行うCloudFormationテンプレートの定義

Last updated at Posted at 2019-10-31

はじめに

CodePipeLineが終わったらSlackに通知を送るために、最後にLambda呼び出したかった。
作成したものを備忘として記録。

テンプレート

  # CodePipeLine
  Pipeline:
    Type: AWS::CodePipeline::Pipeline
    Properties:

      ・・・(lambda以外は省略)

      Stages:

      ・・・(lambda以外は省略)

        - Name: lambda
          Actions:
            - Name: lambda
              ActionTypeId:
                Category: Invoke
                Owner: AWS
                Version: 1
                Provider: Lambda
              Configuration:
                FunctionName: slack-function # 呼び出したいLambdaの関数名
                UserParameters: 'lambda' # Lambdaにパラメータを渡したいときだけ設定する
              RunOrder: 1

LambdaでUserParametersを取得する方法(Python)

けっこう深いところにいます。。

def lambda_handler(event, context):
  # paramにテンプレートで設定した文字列lambdaが取得されます。
  param = event['CodePipeline.job']['data']['actionConfiguration']['configuration']['UserParameters']

LambdaからCodePipeLineに結果を返す方法

Lambdaから結果を返さないとCodePipeLine上でLambdaがずっと実行中のままとなり、1時間のタイムアウトまで実行中になってしまいます。

コード

import boto3

# CodePipeLineのクライアント
code_pipeline = boto3.client('codepipeline')
# job_idの取得
job_id = event['CodePipeline.job']['id']

try:
  # 成功したとき
  code_pipeline.put_job_success_result(jobId=job_id)
except:
  # 失敗したとき
  code_pipeline.put_job_failure_result(jobId=job_id, failureDetails={'message': "任意の文字列", 'type': 'JobFailed'})


IAMポリシー

成功/失敗を返す権限が必要です。
下記の2つの許可が必要です。

        {
            "Action": [
                "codepipeline:PutJobSuccessResult",
                "codepipeline:PutJobFailureResult"
            ],
            "Effect": "Allow",
            "Resource": "*"
        }
3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2