{{ selected_gold.title }}

  • ¥ {{ selected_gold.original_price }}
  • ¥ {{ selected_gold.price }}
  • {{ selected_gold.number_of_order }} 人订阅
  • {{ selected_gold.total_likers_count }}
    由 {{ selected_gold.creator_name }} 编辑

    {{ title }}

    请登录购买({{ selected_gold.price }}元),即可解锁剩余教程
    点击购买

    • Air
    • 2020年11月21日

    冲向云霄(CloudComputing)之前的准备工作

    为了更好的使用开箱即用的云原生解决方案,你至少需要根据以下步骤来配置一个AWS账号,因为这些方案是在AWS的基础之上构建出来的。

    • 注册AWS账号和准备研发环境
    • 如何使用2cloudlab.com提供的服务

    在这个过程中,你可能会需要使用某些工具,比如Terraform,关于它的使用,你可以参考书籍《Terraform Up and Running》

    注册AWS账号和准备研发环境

    0)到这里下载Python 3.x运行时环境,如果你的机器上已经安装了,那么直接到下一步

    1) 执行这句指令pip install awscli来安装awscli,安装成功之后执行这句指令aws --version,你将看到以下结果:

    aws-cli/1.18.173 Python/3.7.6 Windows/10 botocore/1.19.13
    

    2) 注册AWS账号,登录到这里来生成Access ID和Secret Key,如下图所示:

    最终生成的ID和Key,格式如下所示:

    Access Key ID:BKIAKB9JUUANG7TB6COI
    Secret Access Key:AIJ8qvYQ8urOzw1QyIOXcBIIJu0xaYA9/7IYXWjP
    

    3) 按照以下步骤在本地配置命令行登录信息

    $ aws configure
    AWS Access Key ID [None]: BKIAKB9JUUANG7TB6COI
    AWS Secret Access Key [None]: AIJ8qvYQ8urOzw1QyIOXcBIIJu0xaYA9/7IYXWjP
    Default region name [None]: ap-northeast-1
    Default output format [None]: json
    

    4) 执行这句指令aws sts get-caller-identity来验证能够成功登录,成功登录的输出结果如下所示:

    {
        "UserId": "985678910112",
        "Account": "985678910112",
        "Arn": "arn:aws:iam::985678910112:root"
    }
    

    5) 到这里下载Terraform,将里面的可执行性文件Terraform放到环境变量PATH所指定的目录里,比如可以考虑和git所在的目录放在一起。然后,在命令行里输入这句指令terraform --version来确保命令行里可以找到Terraform,输出结果如下所示:

    Terraform v0.12.19
    

    6) 编写terraform脚本main.tf,内容如下:

    terraform {
      required_version = "= 0.12.19"
    }
    
    provider "aws" {
      version = "= 2.58"
      region = "ap-northeast-1"
    }
    
    resource "aws_instance" "virtual_machine" {
      ami           = "ami-02b658ac34935766f"
      instance_type = "t2.micro"
    }
    
    output "vm_info" {
        value = {
          ip = aws_instance.virtual_machine.public_ip
          cpu = aws_instance.virtual_machine.cpu_core_count
          instance_type = aws_instance.virtual_machine.instance_type
          root_block_device = aws_instance.virtual_machine.root_block_device
        }
    }
    

    注意,region = "ap-northeast-1"指定了使用区域,目前我指定了东京区域,如果你服务的用户在中国区,那么你有2个选择,一个是宁夏区域(cn-northwest-1),另外一个是北京区域(cn-north-1)。

    7) 在main.tf所在的目录里执行以下指令:

    $ terraform init
    $ terraform plan
    $ terraform apply
    

    最后一句指令会要求你输入yes才能往下执行,否则将终止,你只需要输入yes即可,如果一切顺利,那么你将看到以下结果:

    Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
    
    Outputs:
    
    vm_info = {
      "cpu" = 1
      "instance_type" = "t2.micro"
      "ip" = "3.113.19.135"
      "root_block_device" = [
        {
          "delete_on_termination" = true
          "device_name" = "/dev/sda1"
          "encrypted" = false
          "iops" = 100
          "kms_key_id" = ""
          "volume_id" = "vol-033d27e03e8f2de86"
          "volume_size" = 8
          "volume_type" = "gp2"
        },
      ]
    }
    

    8) 在前一步,你已经创建了一个虚拟机资源,为了避免你日后忘记销毁该资源,你需要执行这句指令terraform destroy,来销毁该资源,它同样要求你输入yes来确定销毁,你只需要输入yes并回车即可,成功销毁的输出结果如下所示:

    Destroy complete! Resources: 1 destroyed.
    

    9) 最后,你需要准备一个源码编辑器,我用的是VS Code,当然,你也可以选择你熟悉的源码编辑器

    如何使用2cloudlab.com提供的服务

    2cloudlab.com提供的模块都位于github上,那里有免费的云原生解决方案,当然也会有一些付费的云原生解决方案。它们的特点是开箱即用,能够帮助你把服务快速、稳定、安全地接入互联网。比如,你非常擅长研发WSGI兼容的Python程序,而对其它方面缺乏经验,此时,你可以借助module_load_balancer模块在互联网上创建该程序的运行环境,然后将它放入其中,为互联网公民提供服务。

    使用module_load_balancer模块的方式非常简单,你只需要创建main.tf文件,内容如下:

    terraform {
      required_version = "= 0.12.19"
    }
    
    provider "aws" {
      version = "= 2.58"
      region = "ap-northeast-1"
    }
    
    module "load_balance" {
      source       = "github.com/2cloudlab/module_load_balancer//modules/load_balancer?ref=<tag>"
      download_url = <your-WSGI-Compatible-Python-Package-URL>
      package_base_dir         = <your-root-folder-name-in-web-app-package>
      app_dir = <your-web-app-folder>
      envs     = <your-app-environment-variables>
      wsgi_app = <WSGI-Entry>
    }
    
    output "alb_dns_name" {
      value       = module.load_balance.alb_dns_name
      description = "The domain name of the load balancer"
    }
    

    你只需要指定以下几点

    1. ref=<tag>中的tag需要替换成该模块的版本号,比如v.0.0.3
    2. download_url指向了WSGI兼容的Web App的tar.gz包,比如https://github.com/digolds/digolds_sample/archive/v0.0.1.tar.gz
    3. package_base_dirtar.gz中的根目录
    4. app_dir是WSGI兼容的Web App所有执行文件所在tar.gz中的目录
    5. envs是WSGI兼容的Web App所依赖的环境变量
    6. wsgi_app是WSGI兼容的Web App的调用入口,关于该模块的详细用法,你可以参考这里

    指定之后,cdmain.tf所在的目录,然后执行以下命令来创建WSGI兼容的Web App:

    terraform init
    terraform plan
    terraform apply
    

    成功之后,你将看到以下类似的输出:

    Apply complete! Resources: 10 added, 0 changed, 0 destroyed.
    
    Outputs:
    
    alb_dns_name = alb-1-712872544.us-west-1.elb.amazonaws.com
    

    等待几分钟之后,你的WSGI兼容的Web App就已经在互联网中运行了,此时,你可以在浏览器里输入alb_dns_name所对应的值,来查看结果。

    以上脚本帮你做了2件事情:

    1. 下载你的WSGI兼容的Web App包
    2. 在互联网上创建一个负载均衡器ALB(用于分发请求)、一族EC2实例(每个实例对应一台虚拟机,并运行着你的WSGI兼容的Web App、Nignx、gunicorn、supervisor)、一个Auto Scale资源(用于自动增加或减少EC2实例)

    如下图所示(其中,红色部分圈起来的程序就是你的Web App,它是基于Python来编写的并且是WSGI兼容的):

    把你的Web App接入互联网的整个过程所需时间不超过一个小时,你要做的只是准备好你的Web App。如果你的Web App需要存储一些数据,那么你也可以通过类似的方法使用module_dynamodbmodule_s3模块。