この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
「GithubActionsでaws-nukeを定期実行したい。」
AWSリソースの一括削除に便利なaws-nukeですが、定期実行できたらさらに便利ですよね。
今回は、GithubActions上でaws-nukeを定期実行する方法を紹介します。
やってみた
フォルダ構成
.
├── .github
│ └── workflows
│ └── aws-nuke-run.yaml # aws-nukeをGithubActions上で実行する
├── docker-compose.yml
└── nuke-config.yml #aws-nuke用のconfigファイル
IAMロールを作成
GithubActionsからAWSリソースを作成するために、IAMロールを作成します。
IAMロールの権限は、削除したいリソースによって変わります。
私はIAMユーザーなども削除したかったため、AdministratorAccess
のポリシーを付与しました。
IAMロールの作成は、以下が参考になるかと思います。
AWS CDKを使用している場合は、以下の手順でできます。
nuke-config.ymlの作成
aws-nuke用のconfigファイルを用意します。 今回はSQS Queueのみ削除するconfigファイルを用意しました。
nuke-config.yml
---
regions:
- ap-northeast-1
- global
account-blocklist:
- 000000000
resource-types:
targets:
- SQSQueue # SQSQueueのみ削除される
accounts:
1234567890: {}
aws-nukeの設定などについては、こちらの記事で触れています。
docker-compose.ymlの作成
GithubActions上でdocker runでaws-nukeのコンテナ起動してもいいのですが、コマンドを短くするためにdocker-compose.yml
を使用します。
docker-compose.yml
version: "3"
services:
aws-nuke:
image: rebuy/aws-nuke:latest
entrypoint: /usr/local/bin/aws-nuke --config /home/aws-nuke/config.yml --force --quiet
volumes:
- ./nuke-config.yml:/home/aws-nuke/config.yml
- ~/.aws:/home/aws-nuke/.aws
environment:
- AWS_ACCESS_KEY_ID
- AWS_SECRET_ACCESS_KEY
- AWS_SESSION_TOKEN
以下のように、ローカル実行する際にも短いコマンドで実行できて便利です。
$ export AWS_ACCESS_KEY_ID=<アクセスキー>
$ export AWS_SECRET_ACCESS_KEY=<シークレットアクセスキー>
$ export AWS_SESSION_TOKEN=<セッショントークン>
# docker-compose使用
$ docker compose run aws-nuke
# 直接docker run
$ docker run \
--rm -it \
-v /full-path/to/nuke-config.yml:/home/aws-nuke/config.yml \
-v /home/user/.aws:/home/aws-nuke/.aws \
quay.io/rebuy/aws-nuke:latest \
--config /home/aws-nuke/config.yml
.github/workflows/aws-nuke-run.yamlの作成
aws-nuke用のワークフローファイルです。 今回はサンプル用に毎時0分に実行します。
name: aws-nuke-run
on:
schedule:
- cron: '0 * * * *'
jobs:
run_aws_nuke:
name: Run aws-nuke
runs-on: ubuntu-latest
permissions:
id-token: write
contents: read
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v1
with:
role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME_TEST }}
aws-region: ap-northeast-1
- name: Run aws-nuke
run: docker compose run aws-nuke --no-dry-run
おわりに
GithubActions上でaws-nukeを定期実行する方法の紹介でした。
他にもpush時や手動トリガー(workflow_dispatch)でdry-runを実行させたりすると便利かもしれません。
ワークフローをトリガーするイベント - GitHub Docs
以上、AWS事業本部の佐藤(@chari7311)でした。