はじめに
Terraformの勉強を始めたので備忘録を兼ねて行ったことを投稿しようと思います。
以下の2つの投稿内容を実施した上でS3とS3アクセス用のIAMロールを構築を行なっています。
TerraformをインストールしてTerraformでAWS上にEC2作ってみる
TerraformでIAMを設定してEC2にセッションマネージャー経由で接続してみる
TerraformにS3の定義を追加
S3を作成する
バケット名demo-s3-bucket-20230226
でS3を作成します。
resource "aws_s3_bucket" "test" {
bucket = "test-s3-bucket-20230226"
tags = {
Name = "tf_test_s3"
}
}
TerraformにS3アクセス用のIAMロールを定義
アクセスを許可するS3と操作を定義
リソースには先程定義したS3test-s3-bucket-20230226
を指定します。
リソースで制限しているため、アクション全て許可
data "aws_iam_policy_document" "allow_rw_access_s3_role_policy" {
statement {
actions = ["s3:*"]
resources = ["arn:aws:s3:::test-s3-bucket-20230226", "arn:aws:s3:::test-s3-bucket-20230226/*"]
effect = "Allow"
}
}
ポリシーを定義
先程定義したS3アクセスの内容をもちいてポリシーを定義します。
resource "aws_iam_policy" "allow_rw_access_s3" {
name = "test_s3_policy"
policy = data.aws_iam_policy_document.allow_rw_access_s3_role_policy.json
}
ポリシーをロールにアタッチ
下記で定義したロールに先程定義したポリシーをアタッチします。
※このロールは既に下記でEC2に付与されています
resource "aws_iam_role_policy_attachment" "test_s3" {
role = aws_iam_role.test.name
policy_arn = aws_iam_policy.allow_rw_access_s3.arn
}
TerraformでS3とIAMロールを作成
Terraformのplan applyを実行
terraform plan
terraform apply
EC2からS3にアクセス
セッションマネージャーでEC2に接続する
以下と同様にEC2に接続します。
aws cliでS3にアクセス
aws cliコマンド使って、作成されたS3にアクセスします。
aws s3 ls s3://test-s3-bucket-20230226
エラーが出なければアクセス確認完了
作成したリソースを削除
terraform の destroyを実行して、AWS上のリソースを削除します。
terraform destroy
さいごに
今回、terraform destroy
した時にS3のバケットが空になっていなかったので削除できませんでした。
調べてみるとterraform destroy
でaws cliコマンドを実行、S3バケットを空にして削除するやり方で回避しているの見つけました。
terraformでコマンドの実行もできるのは知らなかったので良かったです。