【基礎】GitHub Actions を利用して AWS SAM のデプロイ環境を構築する

## 概要
- 自分のPCでデプロイすると、スペックが低いためかビルド/デプロイにめちゃくちゃ時間がかかる
- ワンちゃんGitHubActionsのほうが性能が高い説があるので試してみる

## 方法
https://dev.classmethod.jp/articles/setup-aws-sam-deployment-environment-using-github-actions/

ひとまずこれを参考にしてやってみる
なるべく元サイトと同じような形でやろうと思います

### ID プロバイダの作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3125890/1d477465-8dca-4d8b-b6f2-ca3ef01d10ce.png)

公式にもこう書いてありますね

１．以下のURLの場所に遷移します。

https://us-east-1.console.aws.amazon.com/iam/home?region=ap-northeast-1#/identity_providers

２．プロバイダを追加を選択します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3125890/bbe6b51b-d306-4d5a-a6f7-1e89a8f2bef9.png)

３．次のように入力します
- プロバイダの URL：https://token.actions.githubusercontent.com
- 対象者：sts.amazonaws.com

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3125890/62d27e20-2279-41e7-b20d-f1cbb197199d.png)

４．ARNが必要なので保存しておきます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3125890/f9aec36c-0ca2-4e86-a850-ea43d3f573c6.png)

５．IAMロールを作ります
以下は公式サイトをそのまま持ってきました。
```diff
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
-                "Federated": "arn:aws:iam::123456123456:oidc-provider/token.actions.githubusercontent.com"
+                "Federated": "arn:aws:iam::自分のやつ:oidc-provider/token.actions.githubusercontent.com"
            },
            "Action": "sts:AssumeRoleWithWebIdentity",
            "Condition": {
                "StringLike": {
-                    "token.actions.githubusercontent.com:sub": "repo:octo-org/octo-repo:*"
+                    "token.actions.githubusercontent.com:sub": "repo:アカウント名/対象レポジトリ:*" 
                },
                "StringEquals": {
                    "token.actions.githubusercontent.com:aud": "sts.amazonaws.com"
                }
            }
        }
    ]
}

```

とか思っていたら、GUIでも可能見たいです
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3125890/67f2f78c-3f95-4a52-88e8-cd9089ae8809.png)

下に、組織等を入れる場所がある感じです。

今回はひとまずこんな感じにしました。
IAMがフルなのは怖いので後で直す予定です
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3125890/184bc3cc-4958-4cd6-a345-f955d524a9d4.png)

:::note 
このあと、CloudFrontなどほかに必要な奴めちゃ追加しました。
後からインラインポリシー等で調整できるので、最初は動かない前提でやるのがよさそう
:::

### ワークフローを設定する
ひとまずお試しなので、参考サイトまんまです。
```yaml:.github/workflows/deploy.yaml
name: Deploy-AWS-SAM-Application

on:
 push:
   branches:
     - 'develop'

env:
 TEMPLATE_FILE: template.yaml
 SAM_CLI_TELEMETRY: 0

permissions:
 id-token: write
 contents: read

jobs:
 deploy:
   runs-on: ubuntu-22.04
   permissions:
     id-token: write
     contents: read
   steps:
     - uses: actions/checkout@v3
     - uses: actions/setup-python@v3
     - uses: aws-actions/setup-sam@v2
       with:
         use-installer: true
     - uses: aws-actions/configure-aws-credentials@v4
       with:
         role-to-assume: arn:aws:iam::194722430871:role/github-actions-role
         aws-region: ap-northeast-1
         role-session-name: SamDeploy
     - run: sam build
     - run: sam deploy --no-confirm-changeset --no-fail-on-empty-changeset
```

### NextJs on lambda 試行錯誤
独自にカスタマイズする中で苦労した部分について

https://qiita.com/koinunopochi/items/011b0fc39adcff4f8862

Nextのほうは記載次第つい