使用Terraform构建无服务器的会员制网站

首先

builders_flash.png

这篇学习指南的文章如下:
第一次尝试无服务器~创建无服务器会员制网站~第1部分
第一次尝试无服务器~创建无服务器会员制网站~第2部分
(直到实验1)第一次尝试无服务器~创建无服务器会员制网站~第3部分

如果你想使用管理控制台逐步构建步骤并进行确认,我认为参考这里可能会更加深入理解。

使用学习指南构建的配置图。

aws_serverless_diagram.png

构建AWS组件
Lambda函数
DynamoDB数据库
API网关
Cognito身份验证
IAM身份和访问管理

Terraform的代码

准备前事项

Terraform 安装
tfenv 安装
为执行 Terraform 所需的 IAM 访问密钥和秘钥

Terraform的执行环境

$ terraform -version
Terraform v0.12.30
+ provider.archive v2.1.0
+ provider.aws v2.70.0

使用Terraform构建无服务器环境。

1. 下载Terraform的源代码。

$ git clone https://github.com/okubo-t/aws-terraform-beginner-serverless.git

2. Terraform 的环境和代码结构如下所示。

$ tree aws-terraform-beginner-serverless
aws-terraform-beginner-serverless
├── README.md
├── apigw.tf
├── aws.tf
├── cognito.tf
├── dynamodb.tf
├── iam-policy
│   ├── cognito_auth_policy.json
│   ├── cognito_unauth_policy.json
│   └── lambda_policy.json
├── iam-role.tf
├── lambda.tf
├── output.tf
├── src
│   ├── read
│   │   └── index.js
│   └── write
│       └── index.js
├── terraform.tfvars-
└── variables.tf

移动到包含Terraform代码的目录中。

$ cd aws-terraform-beginner-serverless/

创建 terraform.tfvars 文件。

$ cp -p terraform.tfvars- terraform.tfvars

对于所创建的 terraform.tfvars 文件,可以根据环境的需要自由地更改”访问密钥”、”秘密密钥”和”资源名称前缀”。(以下所示的密钥仅为示例。)

# アクセスキー
aws_access_key = "AKIAIOSFODNN7EXAMPLE"

# シークレットキー
aws_secret_key = "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"

# リージョン
aws_region     = "ap-northeast-1"

# リソース名のPrefix
prefix = "prefix"

# リソースの環境
env = "demo"

# ステージ名
stage_name = "demo"

用以下命令对Terraform进行初始设置。

$ terraform init

Terraform has been successfully initialized!

You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.

If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.

7. 使用下面的指令来执行环境部署。

$ terraform apply

8. 在部署后,记录输出的内容。

Apply complete! Resources: 39 added, 0 changed, 0 destroyed.

Outputs:

appClientId = XXXXXXXXXXXXXXXXXXXXXXX
identityPoolId = ap-northeast-1:XXXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXX
userPoolId = ap-northeast-1_XXXXXXXXXX

通过Terraform,环境构建已经完成。

您可以使用以下命令来查看已构建的AWS环境的组件。

$ terraform state list

准备前台环境

1. 下载用于前台的zip文件。

下载链接在这里。

请将下载并解压的zip文件中的[Serverlesshandson]-[webpage]-[config.js]文件的内容替换为已记录的Outputs内容。

// TODO: 作成したユーザープールおよびIDプールのIDに書き換えてください
const CognitoConfig = {
    region: 'ap-northeast-1',

    // User Pool
    userPoolId: 'ap-northeast-1_XXXXXXXXXXXXX',
    appClientId: 'XXXXXXXXXXXXXXXXXXXXXXXX',

    // Federated Identity
    identityPoolId: 'ap-northeast-1:XXXXXXXXXXXXXXXXXXXXXX',
}

3. 访问 API 网关的管理控制台。

apigw_sdk_create.png

5. 下载的 [javascript_YYYY-MM-DD_HH-MMZ.zip] 文件进行解压缩,将生成的文件夹 [apiGateway-js-sdk] 内的 [apigClient.js] 文件复制到2中解压缩的 [Serverlesshandson]-[webpage]-[lib]-[apigateway] 文件夹下方(替换已有文件)。

在第2步骤中,将在解压缩的[Serverlesshandson]-[webpage]-[443]文件夹内的[apigateway.js]、[login.html]和[mypage.html]三个文件复制到[Serverlesshandson]-[webpage]文件夹的根目录。(将替换现有的文件。)

参考:
1-3. 请使用Web浏览器进行操作确认。

现在,无服务器环境中访问测试的前端环境已经准备好了。

试着进行动作验证

00_first_page.png
01_not_logged_in.png
02_post_method_403.png

如果无法正常运行,请为了以防万一重新部署API Gateway并进行确认。

03_Sign-up.png
04_Activation.png
05_Sign-in.png
06_logged_in.png
07_id_token.png
08_Access_token.png
09_post_method_200.png
10_get_method_200.png

您可以通过参考Terraform的代码了解环境的详细信息和每个操作的详情。

整理收拾

使用以下命令将通过Terraform创建的AWS环境删除。

$ terraform destroy

最后

希望能对初学者的无服务器学习有一点点帮助,那就太好了。

请提供参考网站

首次尝试无服务器架构 – 创建无服务器会员制网站 – 第一部分
首次尝试无服务器架构 – 创建无服务器会员制网站 – 第二部分
首次尝试无服务器架构 – 创建无服务器会员制网站 – 第三部分
AWS再入门博客系列- Amazon Cognito编辑
[AWS黑带在线研讨会] Amazon API Gateway
[AWS黑带在线研讨会] Amazon Cognito

广告
将在 10 秒后关闭
bannerAds