スライド/自分のサーバーレスアプリケーションの作り方 version 12
:追加された部分
:削除された部分
(差分が大きい場合、文字単位では表示しません)
スライド/自分のサーバーレスアプリケーションの作り方
## 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
Resources:
Resource:
OidcProviderGitHub:
Type: AWS::IAM::OIDCProvider
Properties:
Url: https://token.actions.githubusercontent.com
ClientIdList: [ sts.amazonaws.com ]
ThumbprintList: [ 6938fd4d98bab03faadb97b34396831e3780aea1 ]
```
## 作成するリポジトリ (3) - prepare (3)
```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
- 自己紹介
- 使用するもの
- 大まかな流れ
- AWSアカウントを作成したらすること
- 作成するリポジトリ
自己紹介
- 夏目 祐樹 (ナツメ ユウタ)
- クラスメソッド株式会社
- 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をバックエンドとして使う
- SSM ParameterのSecureStringなどを定義するのに使う
- docker-compose (optional)
- テストでlocalstackなどを使う際など
大まかな流れ
- AWS Organiztionで新しいアカウントを作る
- 作成したら、普段アクセスするためのIAM Roleを作成する
- GitHubでOrganizationを作成する
- 作成しなくてもいいけど、後々の管理を楽にするため
- 各種リポジトリを作成しつつ、実装する
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
- GitHub ActionsでAWSにアクセスするためのもの
作成するリポジトリ (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)
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