diff --git a/solution/tech-solution/oss-nginx/README.md b/solution/tech-solution/oss-nginx/README.md new file mode 100644 index 000000000..8c428db40 --- /dev/null +++ b/solution/tech-solution/oss-nginx/README.md @@ -0,0 +1,62 @@ +## Introduction + + +本示例用于实现解决方案[应用日志数据归档](https://www.aliyun.com/solution/tech-solution/oss-nginx), 涉及到专有网络(VPC)、交换机(VSwitch)、云服务器(ECS)、RAM 用户等资源的创建。 + + + +This example is used to implement solution [Archive App Logs](https://www.aliyun.com/solution/tech-solution/oss-nginx). It involves the creation, and deployment of resources such as Virtual Private Cloud (VPC), VSwitch, Elastic Compute Service (ECS), and RAM users. + + + +## Providers + +| Name | Version | +|------|---------| +| [alicloud](#provider\_alicloud) | n/a | +| [random](#provider\_random) | n/a | + +## Modules + +No modules. + +## Resources + +| Name | Type | +|------|------| +| [alicloud_ecs_command.run_command_nginx_loongcollector](https://registry.terraform.io/providers/hashicorp/alicloud/latest/docs/resources/ecs_command) | resource | +| [alicloud_ecs_invocation.invoke_script_nginx_loongcollector](https://registry.terraform.io/providers/hashicorp/alicloud/latest/docs/resources/ecs_invocation) | resource | +| [alicloud_instance.ecs_instance](https://registry.terraform.io/providers/hashicorp/alicloud/latest/docs/resources/instance) | resource | +| [alicloud_log_machine_group.this](https://registry.terraform.io/providers/hashicorp/alicloud/latest/docs/resources/log_machine_group) | resource | +| [alicloud_log_project.sls_project](https://registry.terraform.io/providers/hashicorp/alicloud/latest/docs/resources/log_project) | resource | +| [alicloud_log_store.sls_log_store](https://registry.terraform.io/providers/hashicorp/alicloud/latest/docs/resources/log_store) | resource | +| [alicloud_log_store_index.sls_index](https://registry.terraform.io/providers/hashicorp/alicloud/latest/docs/resources/log_store_index) | resource | +| [alicloud_logtail_attachment.this](https://registry.terraform.io/providers/hashicorp/alicloud/latest/docs/resources/logtail_attachment) | resource | +| [alicloud_logtail_config.this](https://registry.terraform.io/providers/hashicorp/alicloud/latest/docs/resources/logtail_config) | resource | +| [alicloud_oss_bucket.oss_bucket](https://registry.terraform.io/providers/hashicorp/alicloud/latest/docs/resources/oss_bucket) | resource | +| [alicloud_ram_access_key.ramak](https://registry.terraform.io/providers/hashicorp/alicloud/latest/docs/resources/ram_access_key) | resource | +| [alicloud_ram_role.log_default_role](https://registry.terraform.io/providers/hashicorp/alicloud/latest/docs/resources/ram_role) | resource | +| [alicloud_ram_role_policy_attachment.attach_policy_to_role](https://registry.terraform.io/providers/hashicorp/alicloud/latest/docs/resources/ram_role_policy_attachment) | resource | +| [alicloud_ram_user.ram_user](https://registry.terraform.io/providers/hashicorp/alicloud/latest/docs/resources/ram_user) | resource | +| [alicloud_ram_user_policy_attachment.attach_policy_to_user](https://registry.terraform.io/providers/hashicorp/alicloud/latest/docs/resources/ram_user_policy_attachment) | resource | +| [alicloud_security_group.security_group](https://registry.terraform.io/providers/hashicorp/alicloud/latest/docs/resources/security_group) | resource | +| [alicloud_security_group_rule.allow_db](https://registry.terraform.io/providers/hashicorp/alicloud/latest/docs/resources/security_group_rule) | resource | +| [alicloud_security_group_rule.allow_http](https://registry.terraform.io/providers/hashicorp/alicloud/latest/docs/resources/security_group_rule) | resource | +| [alicloud_security_group_rule.allow_ssh](https://registry.terraform.io/providers/hashicorp/alicloud/latest/docs/resources/security_group_rule) | resource | +| [alicloud_sls_oss_export_sink.default](https://registry.terraform.io/providers/hashicorp/alicloud/latest/docs/resources/sls_oss_export_sink) | resource | +| [alicloud_vpc.vpc](https://registry.terraform.io/providers/hashicorp/alicloud/latest/docs/resources/vpc) | resource | +| [alicloud_vswitch.vswitch](https://registry.terraform.io/providers/hashicorp/alicloud/latest/docs/resources/vswitch) | resource | +| [random_string.suffix](https://registry.terraform.io/providers/hashicorp/random/latest/docs/resources/string) | resource | +| [alicloud_images.default](https://registry.terraform.io/providers/hashicorp/alicloud/latest/docs/data-sources/images) | data source | +| [alicloud_log_service.open](https://registry.terraform.io/providers/hashicorp/alicloud/latest/docs/data-sources/log_service) | data source | +| [alicloud_oss_service.open](https://registry.terraform.io/providers/hashicorp/alicloud/latest/docs/data-sources/oss_service) | data source | +| [alicloud_zones.default](https://registry.terraform.io/providers/hashicorp/alicloud/latest/docs/data-sources/zones) | data source | + +## Inputs + +| Name | Description | Type | Default | Required | +|------|-------------|------|---------|:--------:| +| [ecs\_instance\_password](#input\_ecs\_instance\_password) | 服务器登录密码,长度8-30,必须包含三项(大写字母、小写字母、数字、 ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ 中的特殊符号)` | `string` | n/a | yes | +| [ecs\_instance\_type](#input\_ecs\_instance\_type) | 实例类型 | `string` | `"ecs.t6-c1m2.large"` | no | +| [region](#input\_region) | n/a | `string` | `"cn-hangzhou"` | no | + \ No newline at end of file diff --git a/solution/tech-solution/oss-nginx/main.tf b/solution/tech-solution/oss-nginx/main.tf new file mode 100644 index 000000000..61000d02a --- /dev/null +++ b/solution/tech-solution/oss-nginx/main.tf @@ -0,0 +1,267 @@ +provider "alicloud" { + region = var.region +} + +data "alicloud_zones" "default" { + available_disk_category = "cloud_essd" + available_resource_creation = "VSwitch" + available_instance_type = var.ecs_instance_type +} + +resource "random_string" "suffix" { + length = 8 + lower = true + upper = false + numeric = false + special = false +} + +locals { + common_name = random_string.suffix.id +} + +resource "alicloud_vpc" "vpc" { + cidr_block = "192.168.0.0/16" + vpc_name = "vpc-${local.common_name}" +} + +resource "alicloud_vswitch" "vswitch" { + vpc_id = alicloud_vpc.vpc.id + cidr_block = "192.168.0.0/24" + zone_id = data.alicloud_zones.default.zones.0.id + vswitch_name = "vswitch-${local.common_name}" +} + +resource "alicloud_security_group" "security_group" { + vpc_id = alicloud_vpc.vpc.id + security_group_name = "sg-${local.common_name}" +} + +resource "alicloud_security_group_rule" "allow_ssh" { + type = "ingress" + ip_protocol = "tcp" + nic_type = "intranet" + policy = "accept" + port_range = "22/22" + priority = 1 + security_group_id = alicloud_security_group.security_group.id + cidr_ip = "0.0.0.0/0" +} + +resource "alicloud_security_group_rule" "allow_http" { + type = "ingress" + ip_protocol = "tcp" + nic_type = "intranet" + policy = "accept" + port_range = "80/80" + priority = 1 + security_group_id = alicloud_security_group.security_group.id + cidr_ip = "0.0.0.0/0" +} + +resource "alicloud_security_group_rule" "allow_db" { + type = "ingress" + ip_protocol = "tcp" + nic_type = "intranet" + policy = "accept" + port_range = "3306/3306" + priority = 1 + security_group_id = alicloud_security_group.security_group.id + cidr_ip = "0.0.0.0/0" +} + +data "alicloud_images" "default" { + name_regex = "^aliyun_3_x64_20G_alibase_.*" + most_recent = true + owners = "system" +} + +resource "alicloud_ram_user" "ram_user" { + name = "ram-user-${local.common_name}" +} + +resource "alicloud_ram_access_key" "ramak" { + user_name = alicloud_ram_user.ram_user.name +} + +resource "alicloud_ram_user_policy_attachment" "attach_policy_to_user" { + user_name = alicloud_ram_user.ram_user.name + policy_type = "System" + policy_name = "AliyunLogFullAccess" + depends_on = [ + alicloud_ram_access_key.ramak + ] +} + +resource "alicloud_instance" "ecs_instance" { + instance_name = "ecs-${local.common_name}" + image_id = data.alicloud_images.default.images[0].id + instance_type = var.ecs_instance_type + system_disk_category = "cloud_essd" + security_groups = [alicloud_security_group.security_group.id] + vswitch_id = alicloud_vswitch.vswitch.id + password = var.ecs_instance_password + internet_max_bandwidth_out = 5 +} + +resource "alicloud_ecs_command" "run_command_nginx_loongcollector" { + name = "command-run-nginx-loongcollector-${local.common_name}" + command_content = base64encode(<> genlog.sh +echo "127.0.0.1 - - [\$(date +'%d/%b/%Y:%H:%M:%S %z')] \"GET /HTTP/1.1\" 200 4897 \"-\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36\"" >> /var/log/nginx/access.log +EOJ +chmod +x genlog.sh + +cat << EOT >> crontest.cron +* * * * * ./genlog.sh +EOT + +crontab crontest.cron +EOF + ) + working_dir = "/root" + type = "RunShellScript" + timeout = 3600 +} + +resource "alicloud_ecs_invocation" "invoke_script_nginx_loongcollector" { + instance_id = [alicloud_instance.ecs_instance.id] + command_id = alicloud_ecs_command.run_command_nginx_loongcollector.id + timeouts { + create = "15m" + } + depends_on = [alicloud_instance.ecs_instance] +} + +data "alicloud_log_service" "open" { + enable = "On" +} + +resource "alicloud_log_project" "sls_project" { + project_name = "sls-project-${local.common_name}" +} + +resource "alicloud_log_store" "sls_log_store" { + logstore_name = "sls-logstore-${local.common_name}" + project_name = alicloud_log_project.sls_project.project_name + depends_on = [alicloud_log_project.sls_project] +} + +resource "alicloud_log_machine_group" "this" { + identify_list = alicloud_instance.ecs_instance[*].primary_ip_address + name = "lmg-${local.common_name}" + project = alicloud_log_project.sls_project.project_name + identify_type = "ip" +} + +resource "alicloud_logtail_config" "this" { + project = alicloud_log_project.sls_project.project_name + input_detail = <