使用AWS和Terraform来构建EC2实例

##概要
我整理了从安装Terraform到在AWS上创建EC2实例的步骤。

・如何开始使用Terraform
・如何从代码中创建AWS资源
以上两点是重点,会省略详细设置等。
请参考作为学习Terraform的第一步。
##环境和前提条件
###操作系统
・使用macOS
・已安装homebrew
###AWS
・已创建AWS账户
・已创建IAM用户并获取访问密钥和秘密密钥

目录

    1. 安装AWS CLI

 

    1. 安装Terraform

 

    1. 构建EC2实例

 

    更新EC2实例

##1. AWS CLI的安装
### AWS CLI是什么?
AWS CLI(命令行界面)是一种从命令行管理和操作AWS服务的工具。
它的优点之一是可以自动化管理控制台上的图形用户界面操作。

安装步骤:
安装AWS CLI。
确认安装完成。

$ curl "https://awscli.amazonaws.com/AWSCLIV2.pkg" -o "AWSCLIV2.pkg"
$ sudo installer -pkg AWSCLIV2.pkg -target /
$ aws --version

以下是关于IAM用户设置与CLI的绑定的一些方法,但最简单的方法是使用aws configure命令进行设置。
该命令需要输入下面4个信息。

$ aws configure
AWS Access Key ID: #アクセスキーID
AWS Secret Access Key: #シークレットアクセスキー
Default region name: #リージョン
Default output format: #デフォルトはjson

# 環境変数から設定する場合はこちら
$ export AWS_ACCESS_KEY_ID= #アクセスキーID
$ export AWS_SECRET_ACCESS_KEY= #シークレットアクセスキー
$ export AWS_DEFAULT_REGION= #リージョン

#設定後、下記コマンドを実行して確認
$ aws sts get-caller-identity
{ 
    "UserId": "ユーザーID", 
    "Account": "12桁のアカウントID",
    "Arn": "arn:aws:iam::12桁のアカウントID:user/IAMユーザー"
}

如果返回了预期的配置内容,IAM用户和AWS CLI的关联就成功了!

2. 安装Terraform
Terraform又是什么?
Terraform是一种能够通过代码声明基础设施配置并实现管理自动化的工具。
无论是进行初始配置、更新还是销毁,都可以通过使用Terraform来在代码中执行。
通过实现IaC(基础设施即代码)可以更容易地进行基础设施环境的版本管理,非常适合在DevOps中进行开发推进。

本次使用Homebrew进行安装。

#Terraformのインストール
$ brew install terraform
$ terraform --version

#tfenvもインストール
$ brew install tfenv
$ tfenv --version

通过使用tfenv,可以管理和切换Terraform的版本。
使用tfenv list-remote命令可以显示可安装的Terraform版本列表。
通过tfenv install选择并安装要使用的版本。
安装的版本可以通过tfenv use命令进行切换。
使用tfebv list命令确认已安装的版本。

$ tfenv list-remote #バージョン一覧を表示
1.0.4
1.0.3
1.0.2
...
...
0.2.0
0.1.1
0.1.0
$ tfenv install 1.0.4 #選択したバージョンをインストール
$ tfenv install 0.12.5
$ tfenv list #インストール済みバージョンの確認 1.0.4が設定されている
* 1.0.4 (set by /usr/local/Cellar/tfenv/2.2.2/version)
  0.12.5
$ tfenv use 0.12.5 #0.12.5へ切り替え
Switching default version to v0.12.5
Switching completed
$ tfenv list
  1.0.4
* 0.12.5 (set by /usr/local/Cellar/tfenv/2.2.2/version) #0.12.5が設定された

对于无法安装tfenv的人!

...
Error: Cannot install tfenv because conflicting formulae are installed.
  terraform: because tfenv symlinks terraform binaries

Please `brew unlink terraform` before continuing.
...

如果出现上述错误,则执行 brew unlink terraform 然后重新安装 tfenv。

在这里,Terraform的安装已经完成!

3. 创建EC2实例
###创建main.tf文件
在工作文件夹中创建main.tf文件,并编写代码。
(HCL:HashiCorp配置语言)
我们的目标是接触Terraform,所以本次只创建EC2实例,不涉及其他服务。

#Amazon Linux2のAMIベースにt2.microのEC2を作成
resource "aws_instance" "example" {
    ami = "ami-09ebacdc178ae23b7" #Amazon Linux2
    instance_type = "t2.micro"
}

创建main.tf后,请执行terraform init。该命令将下载创建资源所需的二进制文件。

$ terraform init
Initializing the backend ...
...
...
Terraform has been successfully initialized! #terraform initが成功

接下来,使用terraform plan命令来显示执行计划。

$ terraform plan
provider.aws.region
  The region where AWS operations will take place. Examples
  are us-east-1, us-west-2, etc.

  Enter a value: #リージョン名を入力

Terraform will perform the following actions:
  # aws_instance.example will be created

...
#リソースの情報が続く...
...

Plan: 1 to add, 0 to change, 0 to destroy. #いくつの追加、変更、削除が実行されるかを表示

使用terraform apply命令执行资源创建。

$ terraform apply #コマンドではplan結果が表示され、実行して良いか確認が行われる
...
#リソースの情報が続く...
...
Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value: yes #yesと入力した場合のみリソース実行に進む

...
#進行状況を表示
aws_instance.example: Creating...
aws_instance.example: Still creating... [10s elapsed]
...

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
#Apply完了のメッセージが出力されたらリソース作成の完了

在管理控制台上成功创建了EC2!

4. EC2实例的更新

###添加名称标签
更新创建的EC2的信息。
在main.tf文件中添加名称标签的配置内容,并再次执行terraform apply。

#Amazon Linux2のAMIベースにt2.microのEC2を作成
resource "aws_instance" "example" {
    ami = "ami-09ebacdc178ae23b7" #Amazon Linux2
    instance_type = "t2.micro"

    #ここから追記
    tags = {
        Name: "my-ec2-001"
    }
}
$ terraform apply
Terraform will perform the following actions:

  # aws_instance.example will be updated in-place
  ~ resource "aws_instance" "example" {
...
...
Apply complete! Resources: 0 added, 1 changed, 0 destroyed.
#リソースが1つ更新(changed)された
スクリーンショット 2021-08-14 2.34.58.png

在启动EC2实例时,还要添加安装和启动Apache的设置,然后尝试再次执行terraform apply来安装。

#Amazon Linux2のAMIベースにt2.microのEC2を作成
resource "aws_instance" "example" {
    ami = "ami-09ebacdc178ae23b7" #Amazon Linux2
    instance_type = "t2.micro"

    tags = {
        Name: "my-ec2-001"
    }

    # ここから追記
    user_data = <<EOF
        #!/bin/bash
        sudo su -
        yum install -y httpd
        systemctl start httpd
    EOF
}
$ terraform apply
Terraform will perform the following actions:

Terraform will perform the following actions:

  # aws_instance.example must be replaced
-/+ resource "aws_instance" "example" {
...
...
aws_instance.example: Destroying...
...
...
aws_instance.example: Creating...
...
...
Apply complete! Resources: 1 added, 0 changed, 1 destroyed.
# リソースが1つ追加され、1つ削除された
スクリーンショット 2021-08-14 2.52.48.png

只需要一个选项来用中文表达以下内容:Terraform 中的资源更新可以按照以下方式完成:

    1. 继续更新现有资源

 

    删除现有资源并重新创建新的资源

为了避免可能导致意外服务中断的情况发生,应仔细检查terraform plan的结果。

其他操作:使用terraform destroy命令删除资源。

terraform apply(或destroy)–auto-approve可以跳过执行确认。

不需要每次输入yes,但为了避免意外重新创建资源或错误删除,我认为最好不要使用。

在这里,我们还没有实现网络或访问相关的服务,所以不能说我们构建了什么可以使用的东西。但是,我在这里总结了使用Tearraform在代码中构建基础架构的第一步。

我以后也会整理关于其他必要的AWS服务的文章。

广告
将在 10 秒后关闭
bannerAds