尝鲜-使用terraform创建aws lightsail实例

文章楔子

Terraform是能够高效并安全的创建,管理云服务基础设施,并将修改纳入到版本控制工作流的管理工具。Terraform对接了主流的云服务提供商,企业也可以针对自己的云平台定制对接方案。

一直在使用AWS的lightsail,后来了解到了Terraform这个工具,一言以蔽之,Terraform是利用编排文件帮助用户在云服务商上自动创建、控制、释放资源的工具。此前我对Terraform和AWS的控制台都不熟悉,今天体验一下,以一个纯新手的角色记录一下这个过程。

安装Terraform

首先安装Terraform,Terraform支持在Linux/MacOS/Win等平台上运行,在这里下载对应平台的二进制后,解压并放置到PATH下,然后便可以执行。

$ terraform version
Terraform v0.12.16

随后要选择一家云服务提供商,在这里我选择AWS,但Terraform支持很多云服务商,可以在这里查看完整的支持列表。Terraform也针对AWS、Azure和GCP和自家的Terraform Cloud提供了Getting Started入门指导,有需要的可以参考。

安装AWS CLI并配置鉴权

安装好了Terraform,如果要Terraform帮我操作AWS上的资源,势必要为Terraform提供AWS的凭证。为了创建凭证,先登录AWS console,点击Service -> IAM进入准入控制台(Identity and Access Management)

正常创建一个凭证只需要先创建一个group,给他授权对应的policy,然后在这个group上创建user就可以了。然而由于Lightsail是二等EC2公民,我们还需要先为它创建一个policy,具体可以参考 Create an IAM policy for Lightsail access

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "lightsail:*"
      ],
      "Resource": "*"
    }
  ]
}

随后可以创建一个名为terraform的group,并为它授权我刚刚创建的LightSailFullAccess这个policy。这里为了使用方便,我还添加了EC2的授权。

下面就可以创建User了,创建一个名为terraform的User,并将它放入terraform这个group里。

创建完成后,会进入一个一次性的页面,里面列出了该User的ID和Key,这两个字符串就是aws-cli和terraform访问aws使用的凭据,请记住这两个值并且不要泄露给他人,我们稍后就会用到它们。

为了使用这个凭据,请下载安装 AWS CLI,并运行 aws configure。这个命令会要求你输入刚刚生成的ID和key,并生成aws cli和terraform连接AWS控制台所需的凭据文件。

$ aws2 configure
AWS Access Key ID [None]: ■■■■■■■■■■■■■■
AWS Secret Access Key [None]: ■■■■■■■■■■■■■■
Default region name [None]: ap-northeast-1
Default output format [None]: text

至此AWS凭据配置完成,下面可以开始编写编排文件了。

创建Terraform配置文件

Terraform的LightSail示例配置文件可以在这里找到,我也贴出一份我的配置文件。值得注意的是,blueprint_id和bundle_id分别代表的是实例使用的操作系统和方案,这两个字段的值可以在示例配置文件的下方找到。这里我选用的分别是amazon linux和最便宜的3.5$方案(露出贫穷的微笑)。

$ cat aws.tf 
provider "aws" {
  profile    = "default"
  region     = "ap-northeast-1"
}

resource "aws_lightsail_instance" "vps" {
  name              = "vps"
  availability_zone = "ap-northeast-1a"
  blueprint_id      = "amazon_linux_2018_03_0_2"
  bundle_id         = "nano_2_0"
}

创建好后,首先执行一下terraform init进行初始化,这一步会根据配置文件中指定的服务商下载对应的适配插件(provider plugins),这里可能会有网络问题,我等了很久也没下完,不耐烦了挂科学上网重新执行的(恼)。

$ terraform init            

Initializing the backend...

Initializing provider plugins...

The following providers do not have any version constraints in configuration,
so the latest version was installed.

To prevent automatic upgrades to new major versions that may contain breaking
changes, it is recommended to add version = "..." constraints to the
corresponding provider blocks in configuration, with the constraint strings
suggested below.

* provider.aws: version = "~> 2.40"

< More result massages... >

然后就可以执行terraform plan计划资源申请了

$ terraform plan
Refreshing Terraform state in-memory prior to plan...
The refreshed state will be used to calculate this plan, but will not be
persisted to local or remote state storage.


------------------------------------------------------------------------

An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

  # aws_lightsail_instance.vps will be created
  + resource "aws_lightsail_instance" "vps" {
      + arn                = (known after apply)
      + availability_zone  = "ap-northeast-1a"
      + blueprint_id       = "amazon_linux_2018_03_0_2"
      + bundle_id          = "nano_2_0"
      + cpu_count          = (known after apply)
      + created_at         = (known after apply)
      + id                 = (known after apply)
      + ipv6_address       = (known after apply)
      + is_static_ip       = (known after apply)
      + name               = "vps"
      + private_ip_address = (known after apply)
      + public_ip_address  = (known after apply)
      + ram_size           = (known after apply)
      + username           = (known after apply)
    }

Plan: 1 to add, 0 to change, 0 to destroy.

------------------------------------------------------------------------

Note: You didn't specify an "-out" parameter to save this plan, so Terraform
can't guarantee that exactly these actions will be performed if
"terraform apply" is subsequently run.

确认好方案后,执行terraform apply,就可以创建lightsail实例啦

结语

嗯,好玩。不多说了,我还要研究研究怎么用这个神器给lightsail实例换IP。


参考文档

  1. GETTING STARTED – AWS Build Infrastructure
  2. AWS Provider – aws_lightsail_instance
  3. Create an IAM policy for Lightsail access
文章已创建 23

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部