在Windows系统的WSL上,通过Ubuntu来执行terraform
前提条件 (Qian ti tiao jian)
描述:Ubuntu 22.04.1 LTS
安装Terraform和Tfenv
本次我们将使用Tfenv来安装Terraform。
安装Tfenv
# unzipのインストール(tfenvでterraformをインストールするときにunzipがないと失敗します。)
$sudo apt-get install zip unzip
# tfenvをClone
$git clone --depth=1 https://github.com/tfutils/tfenv.git ~/.tfenv
# Pathをに追加
$echo 'export PATH=$PATH:$HOME/.tfenv/bin' >> ~/.bashrc
# シンボリックリンクを追加
$ln -s ~/.tfenv/bin/* /usr/local/bin
使用Tfenv安装Terraform。
# 最新版をインストール(バージョンを指定する場合は`latest`の部分を変更してください)
$tfenv install latest
# インストールしたバージョンを表示
$tfenv list
1.4.6
No default set. Set with 'tfenv use <version>'
# インストールしたバージョンを有効化
$tfenv use 1.4.6
Switching default version to v1.4.6
Default version (when not overridden by .terraform-version or TFENV_TERRAFORM_VERSION) is now: 1.4.6
将Terraform配置访问AWS的设置
这次我们将使用切换角色而不是直接使用访问密钥。
创建IAM角色
从以下的CloudFormation模板中创建一个用于执行SwitchRole的IAM角色。
AWSTemplateFormatVersion: "2010-09-09"
Resources:
IAMUser:
Type: "AWS::IAM::User"
Properties:
UserName: "CodeDeveloper"
IAMUserPolicy:
Type: "AWS::IAM::Policy"
Properties:
PolicyName: "CodeDeveloperAssumeRolePolicy"
PolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: "Allow"
Action: "sts:AssumeRole"
Resource: !GetAtt SwitchRole.Arn
Users:
- Ref: "IAMUser"
IAMUserAccessKey:
Type: 'AWS::IAM::AccessKey'
Properties:
UserName: !Ref IAMUser
SwitchRole:
Type: "AWS::IAM::Role"
Properties:
RoleName: "SwitchRole"
AssumeRolePolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: "Allow"
Principal:
AWS:
- !GetAtt IAMUser.Arn
Action: "sts:AssumeRole"
S3AccessPolicy:
Type: "AWS::IAM::Policy"
Properties:
PolicyName: "S3AccessPolicy"
PolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: "Allow"
Action:
- "s3:GetObject"
- "s3:CreateBucket"
- "s3:GetBucketPolicy"
- "s3:PutBucketPolicy"
- "s3:GetBucketAcl"
- "s3:GetBucketCors"
- "s3:PutBucketCors"
- "s3:GetBucketVersioning"
- "s3:GetBucketAcl"
- "s3:PutBucketAcl"
- "s3:GetAccelerateConfiguration"
- "s3:GetBucketRequestPayment"
- "s3:GetBucketLogging"
- "s3:GetLifecycleConfiguration"
- "s3:GetReplicationConfiguration"
- "s3:GetEncryptionConfiguration"
- "s3:GetBucketObjectLockConfiguration"
- "s3:GetBucketWebsite"
- "s3:PutBucketWebsite"
- "s3:PutObject"
- "s3:ListBucket"
- "s3:ListAllMyBuckets"
- "s3:DeleteObject"
- "s3:DeleteBucket"
- "s3:GetBucketTagging"
- "s3:PutBucketTagging"
Resource: "*"
Roles:
- Ref: "SwitchRole"
Outputs:
AccessKeyId:
Value: !Ref IAMUserAccessKey
Description: IAM User Access Key ID
SecretAccessKey:
Value: !GetAtt IAMUserAccessKey.SecretAccessKey
Description: IAM User Secret Access Key
SwitchRoleArn:
Value: !GetAtt SwitchRole.Arn
Description: SwitchRole Arn
详细说明
使用AWS CLI创建连接配置文件。
请参考官方页面上Linux的步骤,安装AWS CLI。
- 使用aws configure命令创建配置文件。您也可以直接通过vi ~/.aws/credentials修改凭证,没有问题。此次我们正在更改默认设置,但也可以选择其他设置。
aws configure --profile default
AWS Access Key ID :
AWS Secret Access Key :
Default region name :
Default output format :
创建Terraform模板
创建一个用于创建S3 Bucket的Terraform模板。
-
- 标明连接信息在providers.tf中。如果在之前的步骤中创建了一个非默认的配置文件,请在以下的profile中指定所创建的配置文件名。
-
- providers.tf
-
- provider “aws” {
-
- region = “ap-northeast-1”
-
- assume_role {
-
- role_arn = “arn:aws:iam:::role/SwitchRole”
-
- }
-
- profile = “default”
-
- }
在main.tf中标明S3的创建信息。本次没有指定Backend或者required_version等。
# 创建s3 bucket
resource “aws_s3_bucket” “my_bucket” {
bucket = “my-bucket-da0s9uf08ua083u”
tags = {
Name = “My bucket”
Environment = “Dev”
}
}
执行Terraform
按照顺序执行 terraform 的 init、plan 和 apply 命令,创建 S3 存储桶。
terraform init
terraform plan
terraform apply
确认已创建S3存储桶。
我們將使用管理控制台進入S3,並確認是否已建立存儲桶。
删除已创建的S3存储桶。
最后,删除该次创建的S3存储桶以完成工作。
terraform destroy
请提供下列材料的中文同义句。只需要一个选项:
请提供中文参考。
-
- tfenv(github)_manualインストール手順
-
- Amazon S3 のアクション、リソース、条件キー
-
- Terraform用のAWSアクセスキーの権限管理を、スイッチロール形式で最適化する方法
- TerraformDocument リソース: aws_s3_bucket