本站以分享各种运维经验和运维所需要的技能为主
《python》:python零基础入门学习
《shell》:shell学习
《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战
《k8》暂未更新
《docker学习》暂未更新
《ceph学习》ceph日常问题解决分享
《日志收集》ELK+各种中间件
《运维日常》持续更新中
下面继续开始我们的terraform的学习,这次是学习创建s3.
使用 Terraform创建 S3 存储桶事件
实验步骤
前提条件
安装 Terraform: 地址
下载仓库代码模版
本实验代码位于
task_sns_s3
文件夹中。变量文件
variables.tf
在上面的代码中,您将声明,
aws_access_key
,aws_secret_key
和区域变量
。还声明了电子邮件地址变量。
terraform.tfvars
在上面的代码中,您将定义变量的值。
main.tf
在上面的代码中,您将执行以下任务:
创建 Amazon S3 存储桶
由于存储桶名称为全局唯一,因此还创建了一个随机字符串,该字符串将生成并添加到存储桶名称的末尾。
创建一个 SNS 主题并添加 SNS 主题的访问策略。让您的 SNS 主题有权根据 S3 存储桶事件发送通知。
创建 SNS 主题后,让我们创建对该主题的订阅。
我们将以电子邮件作为协议创建订阅。
电子邮件终端节点,即电子邮件地址将由您在变量中定义。
最后,创建 S3 存储桶事件通知并添加 SNS 主题。
这样,每当有对象上传到 S3 存储桶时,它都会向订阅 SNS 主题的电子邮件发送事件通知。
outputs.tf
,将输出S3 存储桶名称和 SNS 主题 ARN
使用 Terraform 部署
确保您这些文件在同一位置。
通过运行以下命令初始化 Terraform:
terraform init
注意:
terraform init
将检查所有插件依赖项并下载它们。查看生成计划,请运行以下命令:
terraform plan
创建在
main.tf
配置文件中声明的所有资源 ,请运行以下命令:
terraform apply
您将能够看到将要创建的资源,通过输入
yes
批准所有资源的创建。
terraform apply
命令最多可能需要 2 分钟才能创建资源。
检查 AWS 控制台中的资源
确保您位于美国东部(弗吉尼亚北部)us-east-1 区域。
通过单击 AWS 控制台顶部导航到 S3。
单击您创建的存储桶。
切换到属性选项卡并向下滚动查找事件通知选项。
导航到 SNS。
您将能够看到我们使用Terraform创建的SNS主题。
单击该主题,在“订阅”选项卡中,您将看到已创建的订阅以及您的电子邮件地址。
订阅的状态为“等待确认”。
您将收到一封电子邮件,以确认您的 SNS 订阅。如果您在收件箱中没有看到该电子邮件,请检查您的垃圾邮件。
单击“确认订阅”。
您的电子邮件地址现已订阅 SNS 主题
my-s3-event-notification
。您可以导航到 SNS 主题的订阅选项卡进行确认。刷新页面,订阅状态将显示为“已确认”。
将对象上传到 S3 存储桶并测试 SNS 通知
菜单导航到 S3。
单击您创建的存储桶。
在存储桶中的“对象”下,单击“上传”
现在,单击“添加文件”并从本地系统上传任何文件。
文件成功上传到 S3 存储桶后,单击关闭。现在,您可以在“对象”下看到上传的对象文件。
导航到您的电子邮箱并检查 SNS 通知。请保持刷新,因为接收通知可能需要一些时间。
您已成功收到基于 S3 存储桶中的 PUT 对象事件的 SNS 通知。
补充: 简易理解-常用的创建s3过程
要使用 Terraform 创建 S3 存储桶事件,您需要使用 Terraform 的 S3 存储桶资源模块和事件通知模块。
以下是一个示例 Terraform 配置文件,用于创建一个名为 "my-bucket" 的 S3 存储桶,并设置其事件通知:
# 定义 AWS provider
provider "aws" {
region = "us-east-1"
}
# 定义 S3 存储桶
resource "aws_s3_bucket" "my_bucket" {
bucket = "my-bucket"
acl = "private"
}
# 定义 SNS 主题
resource "aws_sns_topic" "my_topic" {
name = "my-topic"
}
# 定义 S3 存储桶事件通知
resource "aws_s3_bucket_notification" "bucket_notification" {
bucket = "${aws_s3_bucket.my_bucket.id}"
lambda_function {
lambda_function_arn = "${aws_lambda_function.my_lambda.arn}"
events = ["s3:ObjectCreated:*"]
}
sns_topic {
topic_arn = "${aws_sns_topic.my_topic.arn}"
events = ["s3:ObjectCreated:*"]
}
}
在上面的配置中,我们首先定义了一个名为 "my-bucket" 的 S3 存储桶,并将其 ACL(访问控制列表)设置为 "private"。然后,我们创建了一个名为 "my-topic" 的 SNS 主题。最后,我们使用 aws_s3_bucket_notification
资源模块创建了一个 S3 存储桶事件通知。该通知将 S3 存储桶的 "s3:ObjectCreated:*" 事件路由到两个地方:一个 Lambda 函数和一个 SNS 主题。您可以将这些值替换为您自己的 Lambda 函数和 SNS 主题的 ARN。
要应用此配置并创建 S3 存储桶事件,请在终端中运行以下命令:
terraform apply
这将创建一个名为 "my-bucket" 的 S3 存储桶,并将事件通知配置应用于该存储桶。