株式会社ネットワールドのエンジニアがお届けする技術情報ブログです。
各製品のエキスパートたちが旬なトピックをご紹介します。

GitとCI/CDに関する知識ゼロのSEが、GitLabのCI/CDパイプラインからAWS CLIでS3バケットを作成/削除するだけ

皆様こんにちは。SEの小池と申します。

CI/CDパイプラインでは パブリッククラウドのリソースを作成することできます。
やり方はCLIでコマンドを実行する、APIを使う、Infrastructure as Code (IaC) を使う等の方法があります。

筆者はCLIなら何とかなりそうなので、とりあえずはCLIのコマンドを用いてパブリッククラウドのリソースの操作を試行してみたいと思います。

というわけで本記事では、GitLabのCI/CDパイプラインからAWSのCLI (awsコマンド) を使ってS3バケットを作成 / 削除する方法を紹介いたします。
最初はEC2の作成/削除にしようと思ったのですが、S3バケットを作るだけなら一切お金はかかりませんので、お財布にやさしい方を選びました。

本記事の対象の方

GitLabのCI/CDパイプラインで各種AWSのCLI (awsコマンド) を実行なさりたい方。

今回のブログのゴール

このブログのゴールはこちらです。


今回のゴール
  • GitLabのCI/CDパイプラインで、AWS CLIを使ってS3バケットを作成/削除する。

このブログをお読みいただくにあたっての事前ご連絡事項

  • 本記事はGitLabのSelf-Managed版 15.3.1-ee (Ultimate) における仕様をベースに記載しております。それ以外のエディションやバージョンではこの記事に記載の通りではない可能性がございます。
  • 本記事は前提条件があります (こちら) 。こちらの前提条件となるAWS IAMユーザーの作成方法、GitLab Runnerの作成方法については記載を省略しております。
  • 本記事のGitLabのGUIは日本語にローカライズした状態で掲載しております。それ以外の言語をご利用の方は適宜読み替えてください。
  • 本記事はGitLab Docs (こちら) を参考にしております。AWSへのデプロイに関して詳細を知りたい方はGitLab Docsをご参照ください。

前提

本ブログではGitLabで、AWS S3のバケットを作成/削除するパイプラインを作成します。
以下を全て満たしていることが前提となります。

前提
  • アクセスキーID と シークレットアクセスキー があるAWS IAMユーザーを持っている。
  • dockerコマンドが使用可能なRunnerが存在する。

本ブログではエクゼキューターがdockerのRunnerを用いております。
エクゼキューターがdockerのRunnerの作成方法については過去のブログでもご紹介しておりますので、もし上記を満たすRunnerが無い場合はご参照いただければと存じます。
blogs.networld.co.jp

検証手順

ここからは具体的にS3バケットを作成/削除するCI/CDパイプラインを作成してまいります。

Step1 : 検証用の空プロジェクトを作成する。

まずは今回の検証に使う空のプロジェクトを作成しましょう。
空のプロジェクトの作成方法については過去のブログでもご紹介しておりますので、もし手順が不明の方はそちらをご参照いただければと存じます。
blogs.networld.co.jp

空のプロジェクトを作成したら、そのプロジェクトで利用可能なRunnerがあることを確認します。
作成した空プロジェクトに対してOwnerもしくはMaintainerの権限を持つユーザーで、[設定] > [CI/CD] を開きます。

[Runner] を展開し、この空プロジェクトで使用可能なRunnerがあることを確認します。
Runnerは前提に記載した条件を満たしていることを確認してください。

以上で検証用の空プロジェクトを作成する手順は終了です。

Step2 : 変数を設定する。

AWSにアクセスするためのアクセスキーIDとシークレットアクセスキー、そのほかにS3バケットを作成するリージョンを変数に設定します。

Step1で作成した空プロジェクトに対してOwnerもしくはMaintainerの権限を持つユーザーで、[設定] > [CI/CD] を開きます。

[変数] を展開し、[変数の追加] をクリックします。

変数を設定していきます。
GitLab Docsを参照し、今回は以下3つの変数を設定します。
参考:Deploy to AWS from GitLab CI/CD | GitLab

表1. 今回設定する変数名と設定値
変数名 設定値
AWS_ACCESS_KEY_ID ご自身のAWS IAMユーザーのアクセスキーID。
AWS_SECRET_ACCESS_KEY ご自身のAWS IAMユーザーのシークレットキー。
AWS_DEFAULT_REGION AWSのデフォルトのリージョンコード。任意の値を設定。
例) アジアパシフィック (東京)なら ap-northeast-1

まずアクセスキーIDを設定します。
キー欄にAWS_ACCESS_KEY_IDと入力します。
欄にご自身のIAMユーザーのアクセスキーIDを入力します。
機密情報ですので、Mask variableにチェックを入れます。
入力が終わったら、[変数の追加] をクリックします。

続けてシークレットアクセスキーを設定します。
キー欄にAWS_SECRET_ACCESS_KEYと入力します。
欄にご自身のIAMユーザーのシークレットキーを入力します。
機密情報ですので、Mask variableにチェックを入れます。
入力が終わったら、[変数の追加] をクリックします。

最後にデフォルトリージョンを設定します。
キー欄にAWS_DEFAULT_REGIONと入力します。
欄にS3 バケットを作成するリージョンのコードを入力します。
リージョンのコード一覧はAWSのドキュメントをご参照ください。
このブログでは例として、アジアパシフィック (東京) (ap-northeast-1) を指定します。
入力が終わったら、[変数の追加] をクリックします。
参考:リージョンとゾーン - Amazon Elastic Compute Cloud

先ほど設定した3つの変数が表示されていることを確認します。

以上で変数を設定する手順は終了です。

Step3 : .gitlab-ci.ymlを作る。

CI/CDパイプラインを作成していきます。
このブログでは極力シンプルなパイプラインを作成するように致します。

先ほど作成した空プロジェクトの [CI/CD] > [Editor] を開きます。

[Configure pipeline] をクリックします。

デフォルトのテンプレートが自動で入力されますが、今回はこれを全部削除します。

今回作成するステージとジョブは以下の通りです。
参考:Deploy to AWS from GitLab CI/CD | GitLab

表2. 今回作成するステージとジョブ
ステージ ジョブ 処理内容 備考
Deploy deploy S3バケットを作成する。 自動実行
Destroy destroy S3バケットを削除する。 手動実行

まずはステージを宣言します。

stages:
    - deploy
    - destroy

次に、S3バケットを作成するジョブを作成します。
awsコマンドを実行できるイメージがGitLab社から提供されているので、今回はそれを使用します。
参考:Deploy to AWS from GitLab CI/CD | GitLab

また、S3バケット名は唯一である必要があるので、できるだけ重複しないような文字列を指定してください。

stages:
    - deploy
    - destroy

deploy:
    stage: deploy
    image: registry.gitlab.com/gitlab-org/cloud-deploy/aws-base:latest
    script:
        - aws s3 mb s3://<作成するS3バケットの名前>

このブログでは例としてS3バケット名をgitlab-aws-command-testと指定しました。

stages:
    - deploy
    - destroy

deploy:
    stage: deploy
    image: registry.gitlab.com/gitlab-org/cloud-deploy/aws-base:latest
    script:
        - aws s3 mb s3://gitlab-aws-command-test

最後に、S3バケットを削除するジョブを作成します。
S3バケットの削除ジョブまで自動にするとCI/CDパイプラインで作成~削除までを即時で自動実行してしまい、せっかく作成したS3バケットの存在を確認するタイミングがなくなるので、今回は削除ジョブだけ手動実行にします。
手動実行にするには、そのジョブにキーワードwhenで値manualを設定します。

stages:
    - deploy
    - destroy

deploy:
    stage: deploy
    image: registry.gitlab.com/gitlab-org/cloud-deploy/aws-base:latest
    script:
        - aws s3 mb s3://gitlab-aws-command-test

destroy:
    stage: destroy
    image: registry.gitlab.com/gitlab-org/cloud-deploy/aws-base:latest
    script:
        - aws s3 rb s3://gitlab-aws-command-test
    when: manual

下図の赤枠部分に、[Pipeline syntax is correct.] と表示されていることを確認します。
エラーメッセージが表示されている場合、ymlファイルの内容に問題があるので、内容を確認してください。

任意のコメントを記載し、変更内容をmainブランチにコミットします。
この作業を実施しているユーザーのロールによってはmainブランチに直接コミットできない場合もあるので、その場合はマージリクエストを作ってからmainブランチにマージしてください。

コミットするとすぐにCI/CDパイプラインが実行されます。
しばらくすると画面上部にパイプラインが実行中である旨が表示されるので、[View pipeline] をクリックします。

パイプラインの詳細画面が表示されます。
deployジョブが完了するまで待ちます。
なお、destroyジョブは手動実行の設定をしたので、自動では実行されません。

以上で.gitlab-ci.ymlを作る手順は終了です。

Step4 : S3バケットが作成されたことを確認する。

Step3で実行されたCI/CDパイプラインにて、S3 バケットが作成されたはずなので、実際に確認します。
このブログではコンソールから目視確認しますが、CLIやAPIでも確認可能です。お好きな方法でご確認ください。

AWSのコンソールに今回作成したS3バケットの存在有無を確認できるユーザーでサインインし、ymlファイルのawsコマンドで指定した名前のS3バケットが作成されていることを確認します。

以上でS3バケットの作成確認は終了です。

Step5 : S3バケットを削除するジョブを手動実行する。

Step3で実行されたなかったジョブdestroyを手動実行して、作成したS3バケットを削除します。

先ほどのGitLabのCI/CDパイプラインの実行結果画面に戻り、destroyジョブの再生ボタンをクリックします。

destroyジョブが正常終了したことを確認します。

以上でS3バケットの削除ジョブの手動実行は終了です。

Step6 : S3バケットが削除されたことを確認する。

再度AWSのコンソールを表示し、今度は先ほど作成したS3バケットが正常に削除されていることを確認します。
このブログではコンソールから目視確認しますが、CLIやAPIでも確認可能です。お好きな方法でご確認ください。

以上で今回の検証は終了です。

最後に

この度はGitもCI/CDもよくわかっていないど素人SEによるGitLab検証ブログをお読みいただき、誠にありがとうございます。
このブログの目標は以下のとおりでしたが、皆さまはいかがでしたでしょうか。


今回のゴール
  • GitLabのCI/CDパイプラインで、AWS CLIを使ってS3バケットを作成/削除する。

今回の手順ではS3バケットの作成/削除のみ実施しましたが、もちろん他のawsコマンドも実行できます。
パブリッククラウドのリソースの作成や削除はCLI、API、IaC等色々手段がありますが、CLIに慣れている方は今回のような手順で自動化するのも手かと思われます。
この記事がGitLabを触り始めた方の一助となれば幸いにございます。


GitLabに関するお問い合わせは、以下のフォームからお願い致します。
GitLab製品 お問い合わせ

今までのGitLabの検証ブログはこちらです。
GitLab カテゴリーの記事一覧 - ネットワールド らぼ

GitLab操作デモ動画 (基本編) を作ってみました。(音声の録音は自宅でiPhoneのボイスメモ使うという超低クオリティですが…。)
つたない内容ではありますが、ご興味がおありでしたら是非ご視聴いただければと存じます。

www.youtube.com