0
1

More than 3 years have passed since last update.

【ECS】codepipelineでECSへデプロイする

Last updated at Posted at 2020-12-22

ゴール

下記で作成したECS環境へのデプロイをcodepipeline化する
https://qiita.com/chanP_yamazaki/items/1760a952c4da8d3fde19

S3にソースファイルを作成

imagedefinitions.json
[{"name":"php-fpm","imageUri":"アカウントID.dkr.ecr.ap-northeast-1.amazonaws.com/ECRリポジトリ名:php-fpm"}]

バージョニング設定を有効にしたS3バケットを作成後
上記ファイルを作成し、zip化してからアップロードする

codepipelineを作成

ステップ 名称 設定値
ステップ1 パイプライン名 test
ステップ2 ソースプロバイダ Amazon ECR
リポジトリ名 test
画像タグ php-fpm
ステップ3 ビルドステージをスキップ
ステップ4 デプロイプロバイダ Amazon ECS
クラスター名 test-cluster
サービス名 作成済みのものを指定

codepipelineを編集

作成後にステージの調整をしたいので編集を実行

SourceステージでS3を追加

名称 設定値
アクション名 s3
アクションプロバイダー Amazon S3
バケット ソースファイルを置いたバケットを指定
S3 オブジェクトキー imagedefinitions.json.zip
出力アーティファクト s3

Deployステージで編集

名称 設定値
入力アーティファクト SourceArtifact → s3
イメージ定義ファイル imagedefinitions.json

デプロイ開始/終了通知用のlambda関数用意

ランタイム: python

import json
import urllib.request

def post_slack(message):
    send_data = {
        "text": message,
    }
    send_text = json.dumps(send_data)
    request = urllib.request.Request(
        'webhookURL',
        data = send_text.encode('utf-8'),
        method = "POST"
    )
    with urllib.request.urlopen(request) as response:
        response_body = response.read().decode('utf-8')

def lambda_handler(event, context):
    snsMessageObject = json.loads(event['Records'][0]['Sns']['Message'])
    state = snsMessageObject['detail']['state']

    if state == 'STARTED':
        message = 'コンテナデプロイ開始します'
    elif state == 'SUCCEEDED':
        message = 'コンテナデプロイ終了しました'
    elif state == 'FAILED':
        message = 'コンテナデプロイに失敗しました。'
    else:
        message = event['Records'][0]['Sns']['Message']

    post_slack(message)

パイプラインの通知ルールを作成

名称 設定値
通知をトリガーするイベント Pipeline execution - Failed/Started/Succeeded
ターゲット 「ターゲットの作成」を押下して作成。作成後に「ターゲットの選択」は自動入力される

SNSトピックの編集

先ほど作成したトピックのサブスクリプション作成

名称 設定値
プロトコル Amazon Lambda
エンドポイント 通知用に作成したlambda関数

デプロイ実施

codepipelineの「変更のリリース」もしくはECRへのイメージpushでデプロイが開始し、開始と終了タイミングで通知が来れば成功

追加

ECRへのpushでデプロイを発火させずに承認アクションを追加することも可能
https://qiita.com/yukinosuke/items/17bcdae3fe4512e22eea

0
1
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
0
1