🐶

レガシーな CI/CD をちょっとだけオシャレにする

2022/06/16に公開

背景

レガシーなCI/CD例

コードを Github に push し、EC2 上でブランチを指定してデプロイする仕組み

そもそもCIの概念があるのかは微妙ですが、EC2/踏み台EC2 に SSH してデプロイスクリプトを実行しているようなケースを未だに運用していたりしないでしょうか。(PHPだとDeployer使う等)

課題

一番の課題は EC2 に SSH するという部分です。
簡単に思い付くだけでも以下のデメリットがあります。

  • 接続用のSSHアカウントを管理する必要がある
  • 必要に応じて接続アカウントにキーペアを設定する必要がある
  • SSH の接続に対してアクセス制限を設定する必要がある

実はこれだけでも運用コストからみればチリツモです。

解決

Github 使ってるなら CodeBuild 等で運用を重くするよりも開発チームだけで解決できるようにしましょう。

ちょっとだけオシャレなCI/CD

コードを Github に push すれば自動でデプロイする仕組み

Github Actions 例

name: AWS SSM Send-Command Example

on:
  push:
    branches: main

jobs:
  start:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v2

      - name: AWS SSM Send-Command
        uses: peterkimzz/aws-ssm-send-command@master
        id: ssm
        with:
          aws-region: ${{ secrets.AWS_REGION }}
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          instance-ids: ${{ secrets.INSTANCE_ID }}

          working-directory: /home/ubuntu
          command: deployer.sh

IAMユーザーの必須ポリシー

{
   "Version":"2012-10-17",
   "Statement":[
      {
         "Effect":"Allow",
         "Action":[
            "ssm:SendCommand"
         ],
         "Resource":[
            "arn:aws:ec2:*:*:instance/*",
            "arn:aws:ssm:*:*:document/*"
         ]
      }
   ]
}

一言

少しでも運用コストを下げ、インフラ側の負担を減らしましょう。
SSHしたら負けですよ!

Discussion