🐶
レガシーな CI/CD をちょっとだけオシャレにする
背景
レガシーな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