从零开始!从创建AWS账户到使用Terraform创建EC2实例的实践过程
前提来自于希腊语中的“protheseos”,意为“倒置、提前”。
-
- AWSとTerraformについて、ぐぐって 概要 が だいたい わかる程度の人が対象です
-
- brewを使うのでmac前提です…。読み替えて頂ければ、windowsでも実現可能かと思われます
- Terraformを今日初めて触ったので勢いでやってる部分があります。誤りやアドバイスあればぜひコメントください!
请注意,由于执行本文所述内容可能导致诸如“收到大量付款请求!”等各种问题,本文不承担任何责任,请自行负责并执行!
在这里要做的事情 zuò de
-
- 创建AWS帐号,并在AWS上创建开发用户。
- 使用开发用户,在Terraform中创建EC2实例。
来吧,让我们试试看!
1. 创建AWS账号并在AWS平台上创建开发用户。
创建AWS账户 AWS
如果您已经拥有AWS账号的话,可以跳过此步骤。
-
- クレジットカードの登録が必要になります
-
- プランの選択はFreeで問題ありません
- 英語で住所登録をするので、住所の英語変換サービスが便利です → JuDress
创建用于开发的用户
我們之前創建的AWS帳戶具有 root 權限,並不是用於日常使用。
因此,我們需要創建一個開發用戶並使用該戶進行開發工作。
创建一个开发者用户群组,并将该群组分配给开发者用户。
使用IAM创建用户组
最后是确认,所以直接进入“下一步”。
使用IAM创建用户
因為這次不需要添加標籤,所以不做任何操作直接進入”下一步”。
最後一個步驟是確認,直接創建用戶。
请记下下面三个部分(用红线圈起来的地方),之后会用到。
下载cvs会很方便。
-
- コンソールアクセスのurl
-
- アクセスキーID
- シークレットアクセスキー
使用这些工具来对AWS进行外部操作
在GitHub上进行推送等操作非常危险,请务必保持他人无法知晓的状态。
让我们最后尝试访问控制台的URL!如果成功登录,第一阶段就完成了!
使用开发用用户,在Terraform中创建EC2实例。
使AWS CLI可用
在使用AWS时,我们将使用一个名为AWS CLI的命令行工具与AWS进行交互。
因此,我们将准备安装所需的Python pip等工具。
如果已经完成安装,可以跳过这一步。
安装Python
我使用pyenv。
$ brew install pyenv
$ pyenv install --list | egrep '^[ ]+[23]\.[0-9\.]+$' | grep ' 3' | tail -n 1
$ pyenv install 3.7.4 # 最新をインストール
$ pyenv global 3.7.4
$ pyenv global 3.7.4
$ pyenv versions
system
* 3.7.4 (set by /usr/local/var/pyenv/version)
$ python --version
Python 3.7.4
安装pip
我要用Python安装pip。
$ python -m pip install pip --upgrade
$ pip -V
pip 19.2.1 from /usr/local/var/pyenv/versions/3.7.4/lib/python3.7/site-packages/pip (python 3.7)
安装 AWS CLI
使用pip安装AWS CLI
$ sudo pip install awscli
$ aws --version
aws-cli/1.16.205 Python/3.7.4 Darwin/18.7.0 botocore/1.12.195
...
注册用于开发的AWS CLI用户
先前的「访问密钥ID」和「秘密访问密钥」将分别进行设置。
$ aws configure --profile terraform-test
AWS Access Key ID [None]: XXXXXXXXXXXXXXXXX # アクセスキー
AWS Secret Access Key [None]: YYYYYYYYYYYYYYYYYYYY # シークレットアクセスキー
Default region name [None]: ap-northeast-1 # デフォルトのリージョン:アジアパシフィック (東京)
Default output format [None]: json # とりあえずjson
确认设置
$ aws configure list --profile terraform-test
Name Value Type Location
---- ----- ---- --------
profile terraform-test manual --profile
access_key ****************XXXX shared-credentials-file
secret_key ****************YYYY shared-credentials-file
region ap-northeast-1 config-file ~/.aws/config
AWS CLI的准备工作已经完成!
使用Terraform创建实例。
安装Terraform
$ brew update
$ brew install terraform
$ terraform -v
Terraform v0.12.5
...
创建代码仓库
$ mkdir terraform-test
$ cd terraform-test
$ terraform init
创建.tf文件 un fichier .tf)
创建两个Ubuntu实例,并将其放置在terreform-test目录下,然后在该目录下创建以下两个文件:
GitHub – first-terraform
provider "aws" {
profile = "terraform-test" # aws cliで設定したprofile
version = "~> 2.0"
region = "ap-northeast-1" # リージョン:アジアパシフィック (東京)
}
resource "aws_instance" "sandbox" {
count = 2 # インスタンス数
ami = "ami-785c491f" # Ubuntu 16.04 LTS official ami
instance_type = "t2.micro" # インスタンスタイプ
tags = {
Name = "${format("sandbox-%02d", count.index + 1)}"
}
}
干路深走
我們將確認這是在.tf中記載的內容
$ terraform plan
...
Terraform will perform the following actions:
# aws_instance.sandbox[0] will be created
+ resource "aws_instance" "sandbox" {
+ ami = "ami-785c491f"
...
# aws_instance.sandbox[1] will be created
+ resource "aws_instance" "sandbox" {
+ ami = "ami-785c491f"
...
Plan: 2 to add, 0 to change, 0 to destroy.
...
执行
根据在Dry Run中确认的内容,进行实例的生成。
$ terraform apply
...
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.sandbox[0]: Creating...
aws_instance.sandbox[1]: Creating...
aws_instance.sandbox[1]: Still creating... [10s elapsed]
aws_instance.sandbox[0]: Still creating... [10s elapsed]
aws_instance.sandbox[0]: Still creating... [20s elapsed]
aws_instance.sandbox[1]: Still creating... [20s elapsed]
aws_instance.sandbox[0]: Creation complete after 23s [id=i-xxxxxxxxxxxxxxxxx]
aws_instance.sandbox[1]: Still creating... [30s elapsed]
aws_instance.sandbox[1]: Creation complete after 33s [id=i-xxxxxxxxxxxxxxxxx]
Apply complete! Resources: 2 added, 0 changed, 0 destroyed.
确认生成的实例
命令行
$ terraform show
# aws_instance.sandbox[0]:
resource "aws_instance" "sandbox" {
ami = "ami-785c491f"
...
# aws_instance.sandbox[1]:
resource "aws_instance" "sandbox" {
ami = "ami-785c491f"
...
AWS管理控制台
我们可以使用Terraform启动EC2实例!接下来,根据官方文档进行调整.tf文件。
删除实例
在云服务中,不使用实例而将其闲置不动可能会导致突然产生巨额费用的原因,非常危险。
因此,我们应该时常确保用于学习或不再使用的实例进行停止或删除。
$ terraform destroy
Terraform will perform the following actions:
# aws_instance.sandbox[0] will be destroyed
- resource "aws_instance" "sandbox" {
- ami = "ami-785c491f" -> null
...
# aws_instance.sandbox[1] will be destroyed
- resource "aws_instance" "sandbox" {
- ami = "ami-785c491f" -> null
...
Do you really want to destroy all resources?
Terraform will destroy all your managed infrastructure, as shown above.
There is no undo. Only 'yes' will be accepted to confirm.
Enter a value: yes # yesを入力
aws_instance.sandbox[0]: Destroying... [id=i-0f64c8ea558dcfb68]
aws_instance.sandbox[1]: Destroying... [id=i-063fb9265f57a867d]
aws_instance.sandbox[0]: Still destroying... [id=i-0f64c8ea558dcfb68, 10s elapsed]
aws_instance.sandbox[1]: Still destroying... [id=i-063fb9265f57a867d, 10s elapsed]
aws_instance.sandbox[0]: Still destroying... [id=i-0f64c8ea558dcfb68, 20s elapsed]
aws_instance.sandbox[1]: Still destroying... [id=i-063fb9265f57a867d, 20s elapsed]
aws_instance.sandbox[0]: Destruction complete after 30s
aws_instance.sandbox[1]: Still destroying... [id=i-063fb9265f57a867d, 31s elapsed]
aws_instance.sandbox[1]: Destruction complete after 31s
Destroy complete! Resources: 2 destroyed.
确认已删除的实例
命令行
$ terraform show
# 何も表示されない
AWS管理控制台
最後
感谢您阅读至此!对我个人来说,我之前从未接触过Terraform,对AWS的计费方式和IAM也不太了解,这让我感到害怕。但是,我还是努力将其运行起来了。希望这篇文章能对想要了解Terraform的人有所帮助!
请看以下新闻报道。
-
- 10分で理解するTerraform
-
- AWSでチーム開発する際のIAMによるアカウント設定方法
-
- AWS-CLIの初期設定のメモ
- AWS CLIで複数アカウントを利用する