Build on AWS Weekly — S1 E4 — Static S3 Site

Добро пожаловать в четвертый эпизод, да, четвертый, уже прошел месяц Build On Weekly! 🥳

К сожалению, сегодня вы сможете послушать только, как лысый мужчина кричит в камеру, так как Жаки в отъезде. Но он (Дарко), будет показывать вам, как делать некоторые волшебные вещи с помощью новейшего удивительного инструмента — Cloud Development Kit (CDK) для Terraform. Сегодня речь пойдет о создании инфраструктуры для вашего статического веб-сайта. И все это с помощью CDK и Terraform. 🪣

Мы будем писать здесь, на dev.to, чтобы поделиться с вами заметками, ссылками, социалками, кодом и любыми другими вещами, упомянутыми во время прямого эфира! 🚀

Если у вас есть вопросы, отзывы или комментарии — смело пишите их в комментариях к этому посту! 😇

Развернутый еженедельник

Сегодня на Deployed Weekly мы расскажем о AWS Power Tools, опять же, для всех вас, поклонников C#. Terraform и CDK есть что вам рассказать. Делимся кодом для Site to Site VPN через частные IP. Крутой семинар, который вы сможете пройти на следующей неделе, и чемпионат мира для всех вас, разработчиков и строителей!

  • AWS PowerTools для dotnet находится в альфа-версии: https://github.com/awslabs/aws-lambda-powertools-dotnet.
  • CDK для TF теперь GA: https://www.hashicorp.com/blog/cdk-for-terraform-now-generally-available
  • AWS Site to Site VPN через частный IP, через прямое подключение. Все в Terraform: https://github.com/aws-samples/aws-site-to-site-vpn-private-ip-vpn
  • Pulumi’s Introduction to Infrastructure as Code with Python — Workshop: https://www.pulumi.com/resources/introduction-to-infrastructure-as-code-with-python/
  • Чемпионат мира Game Day: https://pages.awscloud.com/GLOBAL-gamedev-OE-AWS-GameDay-WorldChampionship-2022-reg-event.html

Статический веб-сайт с CDK для Terraform

Сегодня мы проверяем недавно выпущенный CDK (Cloud Development Kit) для Terraform. 🥳 И с его помощью мы создадим статический веб-хостинг с использованием Amazon S3 🪣.

Цель — создать ведро S3 со всеми необходимыми конфигурациями для размещения статического веб-сайта. Это было первое знакомство Дарко с CDK for Terraform, поэтому сделайте ему поблажку.

Что такое CDK for Terraform? Ну, это Cloud Development Kit для Terraform… Хорошо, но что это значит? Это значит, что вы можете писать конфигурации Terraform на TypeScript, Python, C#, Java или Go и при этом пользоваться всей экосистемой провайдеров и модулей Terraform от HashiCorp. Замечательно.

Это означает, что инфраструктура для статического веб-сайта на AWS определяется этими строками кода:

import { Construct } from "constructs";
import * as path from "path";
import { sync as glob } from "glob";
import { lookup as mime } from "mime-types";
import { App, TerraformStack, TerraformOutput } from "cdktf";
import { AwsProvider, s3 } from "@cdktf/provider-aws"

class MyStack extends TerraformStack {
  constructor(scope: Construct, name: string) {
    super(scope, name);

    // AWS Provider
    new AwsProvider(this, 'AWS', {
      region: "us-west-2",
    });
    // Bucket
    const cobucket = new s3.S3Bucket(this, "cobus-website-bucket", {
      bucket: "cobus-website-bucket",
    });
    // Configure the bucket for a website
    new s3.S3BucketWebsiteConfiguration(this, "cobus-websiteconfig", {
      bucket: cobucket.bucket,
      indexDocument: {
        suffix: "index.html"
      },
      errorDocument: {
        key: "error.html"
      },
    });
    // Open up the bucket
    new s3.S3BucketPolicy(this, "cobus-policy", {
      bucket: cobucket.bucket,
      policy: JSON.stringify({
        Version: "2012-10-17",
        Id: "public-website-access",
        Statement: [
          {
            Sid: "PublicRead",
            Effect: "Allow",
            Principal: "*",
            Action: ["s3:GetObject"],
            Resource: [`${cobucket.arn}/*`, `${cobucket.arn}`],
          },
        ],
      }),
    });
    // Add files
    const absolutePath = path.resolve(__dirname, "website/");
    const files = glob("**/*.html", {
      cwd: path.resolve(__dirname, "website/"),
    });

    // file loop
    files.forEach((f) => {
      const filePath = path.join(absolutePath, f);

      new s3.S3Object(this, `${f}`, {
        bucket: cobucket.bucket,
        key: f,
        source: filePath,
        contentType: mime(path.extname(f)) || "text/html",
      });
    });

    // outputs
    new TerraformOutput(this, 'bucketname', {
      value: cobucket.bucket,
    });
  }
}

const app = new App();
new MyStack(app, "staticwebsite-with-cdktf");
app.synth();
Войти в полноэкранный режим Выход из полноэкранного режима

💾 Посмотрите остальной код, который Дарко написал сегодня, следя за видео: https://github.com/darko-mesaros/cdktf-s3-website.

Ссылки из обсуждения:

  • CDK для Terraform теперь общедоступен: https://www.hashicorp.com/blog/cdk-for-terraform-now-generally-available
  • Terraform AWS Provider на Construct hub: https://constructs.dev/packages/@cdktf/provider-aws/v/9.0.10/api/S3Bucket?lang=typescript&submodule=s3

🐦 Обращайтесь к ведущим и гостям:

Жаки: https://twitter.com/devopsjacquie
Дарко: https://twitter.com/darkosubotica

Оцените статью
devanswers.ru
Добавить комментарий