スライド/自分のサーバーレスアプリケーションの作り方 version 13

2022/11/20 02:16 by sinofseven
  :追加された部分   :削除された部分
(差分が大きい場合、文字単位では表示しません)
スライド/自分のサーバーレスアプリケーションの作り方
## index
1. 自己紹介
1. 使用するもの
1. 大まかな流れ
1. AWSアカウントを作成したらすること
1. 作成するリポジトリ

## 自己紹介
- 夏目 祐樹 (ナツメ ユウタ)
- クラスメソッド株式会社
  - CX事業本部 Delivery部
  - サーバーレス エンジニア
- 最近やってるゲーム
  - FF14
  - 空の軌跡 FC Evolution
  - 黎の軌跡II

## 使用するもの (1)
- AWS Organiztion
  - アプリケーション用のアカウントを作成するのに使う
    - 支払いをまとめることが目的
- github.com
  - コードのホスティング
  - GitHub Actions (CI/CD)

## 使用するもの (2)
- Serverless Application Model (CloudFormation)
  - 原則としてAWSの管理はこれ
  - デプロイ等はsam-cliを使う
- Terraform (optional)
  - SSM ParameterのSecureStringなどを定義するのに使う
    - CloudFormationではSecureStringを作成できない
  - Terraform Cloudをバックエンドとして使う
- docker-compose (optional)
  - テストでlocalstackなどを使う際など

## 大まかな流れ
1. AWS Organiztionで新しいアカウントを作る
   - 作成したら、普段アクセスするためのIAM Roleを作成する
1. GitHubでOrganizationを作成する
   - 作成しなくてもいいけど、後々の管理を楽にするため
1. 各種リポジトリを作成しつつ、実装する

## AWSを作成したらすること 
- 普段使い用のIAM Roleを作成する
  - 基本的にSwitch Roleを使用して複数のAWSアカウントを扱っているため
  - `AdministratorAccess`
- LambdaなどのQuotaを確認する
  - 新規作成したアカウントではQuotaがデフォルト値よりも小さいことがあるので確認が必要

## 作成するリポジトリ (1)
- prepare
  - CI/CDのために必要なリソースの作成をする
  - このリポジトリだけは手動でデプロイする
- base (optional)
  - Lambda LayerやDocker Imageを作成する
- secrets (optional)
  - 各種トークンなどSecretをSSM Parameterに保存する
  - Terraformで管理する

## 作成するリポジトリ (2)
- cloud
  - アプリケーションに必要なLambdaやその他リソースを作成する
- web (optional)
  - Webアプリのコードを置く

## 作成するリポジトリ (3) - prepare (1) -
- CI/CDに使うものを作成する
  - GitHub ActionsでAWSにアクセスするためのもの
    - `AWS::IAM::OIDCProvider`
    - `AWS::IAM::Role`
  - LambdaのArtifactなどを置くためのS3 Bucket

## 作成するリポジトリ (3) - prepare (2) -
```yml
Resource:
  OidcProviderGitHub:
    Type: AWS::IAM::OIDCProvider
    Properties:
      Url: https://token.actions.githubusercontent.com
      ClientIdList: [ sts.amazonaws.com ]
      ThumbprintList: [ 6938fd4d98bab03faadb97b34396831e3780aea1 ]
```

## 作成するリポジトリ (3) - prepare (3)
GitHub ActionsでOIDCを使ったAssume Roleを行うためのProvider

```yaml
  RoleGitHubActions:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Statement:
          - Effect: Allow
            Action: sts:AssumeRoleWithWebIdentity
            Principal:
              Federated: !Ref OidcProviderGitHub
            Condition:
              StringLike:
                token.actions.githubusercontent.com:sub: repo:project-artemis-library/*
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/AdministratorAccess

  BucketLambdaArtifact:
    Type: AWS::S3::Bucket
    Properties:
      LifecycleConfiguration:
        Rules:
          - ExpirationInDays: 3
            Status: Enabled

Outputs:
  RoleArnGitHubActions:
    Value: !GetAtt RoleGitHubActions.Arn

  BucketNameLambdaArtifact:
    Value: !Ref BucketLambdaArtifact
```
      

index

  1. 自己紹介
  2. 使用するもの
  3. 大まかな流れ
  4. AWSアカウントを作成したらすること
  5. 作成するリポジトリ

自己紹介

  • 夏目 祐樹 (ナツメ ユウタ)
  • クラスメソッド株式会社
    • CX事業本部 Delivery部
    • サーバーレス エンジニア
  • 最近やってるゲーム
    • FF14
    • 空の軌跡 FC Evolution
    • 黎の軌跡II

使用するもの (1)

  • AWS Organiztion
    • アプリケーション用のアカウントを作成するのに使う
      • 支払いをまとめることが目的
  • github.com
    • コードのホスティング
    • GitHub Actions (CI/CD)

使用するもの (2)

  • Serverless Application Model (CloudFormation)
    • 原則としてAWSの管理はこれ
    • デプロイ等はsam-cliを使う
  • Terraform (optional)
    • SSM ParameterのSecureStringなどを定義するのに使う
      • CloudFormationではSecureStringを作成できない
    • Terraform Cloudをバックエンドとして使う
  • docker-compose (optional)
    • テストでlocalstackなどを使う際など

大まかな流れ

  1. AWS Organiztionで新しいアカウントを作る
    • 作成したら、普段アクセスするためのIAM Roleを作成する
  2. GitHubでOrganizationを作成する
    • 作成しなくてもいいけど、後々の管理を楽にするため
  3. 各種リポジトリを作成しつつ、実装する

AWSを作成したらすること

  • 普段使い用のIAM Roleを作成する
    • 基本的にSwitch Roleを使用して複数のAWSアカウントを扱っているため
    • AdministratorAccess
  • LambdaなどのQuotaを確認する
    • 新規作成したアカウントではQuotaがデフォルト値よりも小さいことがあるので確認が必要

作成するリポジトリ (1)

  • prepare
    • CI/CDのために必要なリソースの作成をする
    • このリポジトリだけは手動でデプロイする
  • base (optional)
    • Lambda LayerやDocker Imageを作成する
  • secrets (optional)
    • 各種トークンなどSecretをSSM Parameterに保存する
    • Terraformで管理する

作成するリポジトリ (2)

  • cloud
    • アプリケーションに必要なLambdaやその他リソースを作成する
  • web (optional)
    • Webアプリのコードを置く

作成するリポジトリ (3) - prepare (1) -

  • CI/CDに使うものを作成する
    • GitHub ActionsでAWSにアクセスするためのもの
      • AWS::IAM::OIDCProvider
      • AWS::IAM::Role
    • LambdaのArtifactなどを置くためのS3 Bucket

作成するリポジトリ (3) - prepare (2) -

Resource:
  OidcProviderGitHub:
    Type: AWS::IAM::OIDCProvider
    Properties:
      Url: https://token.actions.githubusercontent.com
      ClientIdList: [ sts.amazonaws.com ]
      ThumbprintList: [ 6938fd4d98bab03faadb97b34396831e3780aea1 ]

作成するリポジトリ (3) - prepare (3)

GitHub ActionsでOIDCを使ったAssume Roleを行うためのProvider

  RoleGitHubActions:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Statement:
          - Effect: Allow
            Action: sts:AssumeRoleWithWebIdentity
            Principal:
              Federated: !Ref OidcProviderGitHub
            Condition:
              StringLike:
                token.actions.githubusercontent.com:sub: repo:project-artemis-library/*
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/AdministratorAccess

  BucketLambdaArtifact:
    Type: AWS::S3::Bucket
    Properties:
      LifecycleConfiguration:
        Rules:
          - ExpirationInDays: 3
            Status: Enabled

Outputs:
  RoleArnGitHubActions:
    Value: !GetAtt RoleGitHubActions.Arn

  BucketNameLambdaArtifact:
    Value: !Ref BucketLambdaArtifact