GitHub Actions のシークレット情報と変数の設定方法

# はじめに

このシリーズは GitHub Actions を触ってみたいけど、ざっくり理解したい方向けの記事です。

1. [GitHub Actions ざっくりワークフローを理解](https://qiita.com/mkin/items/16fcbb1a44d49c3daaee) 
1. [GitHub Actions のシークレット情報と変数の設定方法](https://qiita.com/mkin/items/75a4928a1fafe5eacd17)（←当記事）
1. [GitHub Actions ワークフローを再利用する（共通化）](https://qiita.com/mkin/items/d3e79cfc032958953dfe)

前回はGitHub Actionsのワークフローの概要を説明しました。

https://qiita.com/mkin/items/16fcbb1a44d49c3daaee

今回はAmazon ECSにデプロイするGitHub Actionsを通して、シークレット情報と変数の設定方法をご紹介します。

# テンプレートからワークフローを作成

まずは、前回 説明した通り、ワークフローをテンプレートから作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134221/bb4562f5-550b-1236-e1f7-0d907f6d8c92.png)

`Configure`ボタンをクリックしてテンプレートを選択したら、YAMLファイル名を変更して、`Commit changes`ボタンをクリックしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134221/44a56a35-30c7-a024-b1d8-d6c75bcf5585.png)

テンプレートのワークフローはそのままでは動かないことが多いです。というのも、サービス固有のシークレット情報や変数を定義する必要があるからです。

それでは、それらを設定する方法を確認していきます。

# シークレット情報の設定

今回のワークフローでいくと、シークレット情報はAWSのクレデンシャル情報が該当します。

```yml:secrets
    - name: Configure AWS credentials
      uses: aws-actions/configure-aws-credentials@v1
      with:
        aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
        aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
        aws-region: ${{ env.AWS_REGION }}
```
このように`${{ secrets.シークレット名 }}`で設定したシークレット値を参照することができます。

シークレット情報はSettingsタブのサイドバーからSecrets and variablesのアコーディオン内のActionsから設定できます。
`New repository secret`ボタンをクリックすると、入力ページに遷移します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134221/5d7b1cc5-2b01-6363-4e7b-ae61cd0825a0.png)
`AWS_ACCESS_KEY_ID`と`AWS_SECRET_ACCESS_KEY`のシークレット情報を設定してみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134221/5a3924da-21d2-f893-069f-0cf4cbd7eaaf.png)

すると、このようにシークレット情報が設定できます。一度設定したシークレット情報の値は参照することができないので、忘れてしまった場合は再発行してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134221/70ce5193-e2d5-949b-7495-6a9c3f946fb9.png)

# 変数の設定方法

`env`に関してはワークフローに値を直接設定しても動きますが、サービスごとのワークフローの記述を共通化することも視野にいれ、GitHub Actionsの変数を使って設定します。変数の参照方法は`${{ vars.変数名 }}`です。
```diff_yaml:変数を使ってenvを設定するように書き換える
env:
-  AWS_REGION: MY_AWS_REGION
-  ECR_REPOSITORY: MY_ECR_REPOSITORY
-  ECS_SERVICE: MY_ECS_SERVICE
-  ECS_CLUSTER: MY_ECS_CLUSTER
-  ECS_TASK_DEFINITION: MY_ECS_TASK_DEFINITION
-
-  CONTAINER_NAME: MY_CONTAINER_NAME
+  AWS_REGION: ${{ vars.MY_AWS_REGION  }}
+  ECR_REPOSITORY: ${{ vars.MY_ECR_REPOSITORY  }}
+  ECS_SERVICE: ${{ vars.MY_ECS_SERVICE  }}
+  ECS_CLUSTER: ${{ vars.MY_ECS_CLUSTER  }}
+  ECS_TASK_DEFINITION: ${{ vars.MY_ECS_TASK_DEFINITION  }}
+
+  CONTAINER_NAME: ${{ vars.MY_CONTAINER_NAME  }}
```

こちらもシークレット情報の設定と同じページにVariablesのタブがあるので、そこから設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134221/c98206a3-07c9-c87c-267f-81fa297ef32c.png)

# シークレットと変数の違い

シークレットと変数の違いは、大きくは設定した値を画面やログから参照できるか、できないかになります。下図は実際のデプロイワークフローの実行結果ですが、シークレット情報が`***`と表示されているのに対して、変数は値が表示されていることが分かります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134221/b2e37617-ba21-ae13-3f55-c2fe91648c4b.png)

# おわりに

今回はシークレット情報と変数の設定方法をご紹介しました。
実際には、開発環境、ステージング環境、本番環境など別々の設定値やワークフローがあるので、次回はそれらの設定方法をご紹介いたします↓

https://qiita.com/mkin/items/d3e79cfc032958953dfe