GitHubActionsからCloudFormationを実行する

# はじめに
今回はS3をCloudFormationとGithubActionsを使って、構築していきたいと思います。
GitHubActionsとAWSの連携からS3作成までやっていきたいと思います。

# 目次
1.AWSとGitHubActionsの連携
2.S3の構築
3.最後に
4.参考

# 1.AWSとGithubActionsの連携
AWSとGitHubActionsの連携はOpenID Connectを使用します。
前提として、GitHubのリポジトリ、AWSアカウントは作成済みとします

### 1-1.AWSにてIDプロバイダの追加
AWSのマネジメントコンソールからIAMロール＞IDプロバイダ＞プロバイダを追加へと進みます。
プロバイダ設定にて下記設定を入力し、プロバイダを追加をクリックし登録します。
| 項目 |入力内容|
|:-----------:|:------------:|
|プロバイダのタイプ | OpenID Connect |
|プロバイダのURL | https://token.actions.githubusercontent.com |
|対象者 | sts.amazonaws.com |

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2513082/77fdbf9e-8fe1-8177-fffb-64db0f0d4335.png)

### 1-2.GithubActions用IAMロールの作成
次にGithubActions用のIAMロールの作成をします。
信頼されたエンティティを選択にて、下記設定を選択または入力し、次へをクリックします。
| 項目 |入力内容|
|:-----------:|:------------:|
|信頼されたエンティティタイプ | ウェブアイデンティティ |
|アイデンティティプロバイダー| token.actions.githubusercontent.com |
|Audience | sts.amazonaws.com |
|GitHub組織 | 自身のGitHubアカウント名を記載 |
|GitHubリポジトリ -オプション | 必要に応じて記載 |
|GitHubブランチ -オプション  | 必要に応じて記載 |

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2513082/8ee5245b-550d-15aa-f4b9-13c94f3b1599.png)

任意の許可ポリシーを追加します。
今回はテストのためAdministratorAccessを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2513082/9f3c0149-e911-f630-c30c-40e7e32c5025.png)

ロール名を入力し、ロールを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2513082/9cdd783f-4f2f-63e8-22f5-cd8665bf504d.png)

以上で、AWSとGitHubActionsの連携は完了です。

# 2.S3の構築
GitHubActionsからCloudFormationを実行していきます。
実行するS3構築用のCloudFormationは下記サイトを参照してください。

https://qiita.com/ogataro/items/71dd28babfcdf6410a3c

### 2-1.GitHubActions実行ファイルの作成
リポジトリのroot配下に .github/workflows ディレクトリを作成し、Deploy-S3.yamlファイルを作成します。
今回のワークフローは自動実行ではなく、手動実行とします。
｛｝で囲っている箇所については適宜変更してください。

```yaml:Deploy-s3.yaml
name: S3デプロイ

on: workflow_dispatch

permissions:
  id-token: write
  contents: read
jobs:
  aws-deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: aws-actions/configure-aws-credentials@v1-node16
        with:
          role-to-assume: arn:aws:iam::{AwsAccountId}:role/{IAMRole}
          aws-region: ap-northeast-1
      #S3作成
      - name: AWS Cloudformation Development S3
        run: aws cloudformation deploy --stack-name Deployment-S3 --template-file s3.yaml
        working-directory: ./infra

```

### 2-2.GitHubActionsの実行
GitHubのWeb画面にてActions画面に遷移します。
S3デプロイを選択し、画面右のRun workflowのプルダウンボタンからRun workflowをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2513082/f1178a18-8a05-908b-9ec1-41fe3a5a31a0.png)

暫く待つと、実行中のworkfowが表示されるのでそれをクリックし、Job画面に遷移します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2513082/578e0757-8300-7bd6-2e39-46ef9f6a8cca.png)

下記の画面のように正常に完了したら、マネジメントコンソールからS3が作られたことを確認してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2513082/40cc94fb-0e01-64a4-4213-2bedaeab76ec.png)


以上で、S3の構築は完了です。

# 3.最後に
こちらでGithubActionsを使って、CloudFormationを実行する手順は完了です。
参考になれば、幸いです。

# 4.参考サイト
OpenID Connect

https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_roles_providers_create_oidc.html

AWS CLI

https://docs.aws.amazon.com/cli/latest/reference/cloudformation/deploy/