使用AWS和Terraform来构建EC2实例
##概要
我整理了从安装Terraform到在AWS上创建EC2实例的步骤。
・如何开始使用Terraform
・如何从代码中创建AWS资源
以上两点是重点,会省略详细设置等。
请参考作为学习Terraform的第一步。
##环境和前提条件
###操作系统
・使用macOS
・已安装homebrew
###AWS
・已创建AWS账户
・已创建IAM用户并获取访问密钥和秘密密钥
目录
-
- 安装AWS CLI
-
- 安装Terraform
-
- 构建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)された
在启动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つ削除された
只需要一个选项来用中文表达以下内容:Terraform 中的资源更新可以按照以下方式完成:
-
- 继续更新现有资源
- 删除现有资源并重新创建新的资源
为了避免可能导致意外服务中断的情况发生,应仔细检查terraform plan的结果。
其他操作:使用terraform destroy命令删除资源。
terraform apply(或destroy)–auto-approve可以跳过执行确认。
不需要每次输入yes,但为了避免意外重新创建资源或错误删除,我认为最好不要使用。
在这里,我们还没有实现网络或访问相关的服务,所以不能说我们构建了什么可以使用的东西。但是,我在这里总结了使用Tearraform在代码中构建基础架构的第一步。
我以后也会整理关于其他必要的AWS服务的文章。