แจแฃแแแฆแ แแจแแแแแแแกแ แแแแแแ แแแ. แแฃแ แกแแ แแฎแแแ แแแแแแแก แแแฌแงแแแแก แแแแแแแแจแ
Pulumi แแ แแแแแแ แแแแแจแแฃแแแแแก แแ แแแ แแแแ แแแแก แแแแแแก แแแแแงแแแแแ แแแคแ แแกแขแ แฃแฅแขแฃแ แแก แแแแแกแแแแก (Infrastructure as Code) แแแแ แฃแแแ แแขแแกแแแแก แแซแแแแ: แฃแแแ แแแแกแ แแ แชแแแแแก แฎแแแแแกแแฌแแแแแแแ, แแแกแขแ แแฅแชแแแก แกแแจแฃแแแแแแ แแแแจแ แฅแแแแแก แคแแ แคแแขแแก แแฆแแแคแฎแแ แ, แแฅแแแแ แแฃแแแแกแแแแก แแแชแแแแ แฎแแแกแแฌแงแแแแ, แ แแแแ แแชแแ IDE แแ แแแแขแแ แแแ. แแ แแแ แแแฃแแ แฃแแ แฃแแแแแงแแคแแก แแแแแแแ แแแก แงแแแแ แแก แแแกแขแ แฃแแแแขแ แแ แ แแฎแแแแ แแแแแซแฃแแแแก แฃแคแ แ แแ แแแฃแฅแขแแฃแแก, แแ แแแแ แแฃแแฏแแแแกแแแก แฉแแแแ แแแแแก แฎแแ แแกแฎแก. แแแแขแแ, แกแแแกแแแแ แแฃแแแแ แแแแ, แ แแ แแแแแแ แแแแแจแแฃแแแแแก แแ แแแ แแแแ แแแแก แแแแแแก แแแแแงแแแแแ แกแแจแฃแแแแแแก แแแซแแแแ แแแแชแแแ แแ แแแ แแแฃแแ แฃแแ แฃแแแแแงแแคแแก แแแแแแแแ แแแแก แแแแแ แแ แแ แแแแจแแแแแแแแแ แแ แแฅแขแแแ - แขแแกแขแแ แแแ.
แแ แกแขแแขแแแจแ แฉแแแ แแแแแแฎแแแแแ, แแฃ แ แแแแ แแแแฎแแแ แแแ แแฃแแฃแแ แฉแแแแ แแแคแ แแกแขแ แฃแฅแขแฃแ แแก แแแแแก แแแแแชแแแจแ.
แ แแขแแ แจแแแแแฌแแแ แแแคแ แแกแขแ แฃแฅแขแฃแ แ?
แกแแแแ แแแขแแแแแก แจแแแแฎแแแแ, แฆแแ แก แแแแฎแแ: "แ แแขแแ แแขแแกแขแแ แแแคแ แแกแขแ แฃแฅแขแฃแ แ แกแแแ แแแ?" แแแแก แแ แแแแแ แแแแแแ แแ แกแแแแแก แแ แแฅ แแ แแก แ แแแแแแแแ แแแแแแแ:
- แแแแแแแแฃแแแฃแ แ แคแฃแแฅแชแแแแแก แแ แแฅแแแแ แแ แแแ แแแแก แแแแแแแก แคแ แแแแแแขแแแแก แขแแกแขแแ แแแ
- แแแแฌแแแแก แแแคแ แแกแขแ แฃแฅแขแฃแ แแก แกแแกแฃแ แแแ แแแแแแแ แแแแแก แแแ แแแแฃแแ แจแแแฆแฃแแแแแแกแแแ.
- แแแแ แชแแแแแฃแแ แจแแชแแแแแแแก แแแแแแแแแ, แ แแแแ แแชแแ แจแแแแฎแแแก แแแแแฃแแแก แแแจแแคแแ แแก แแแแแแแแแ แแ แแแฃแชแแแแ, แฆแแ แฌแแแแแ แแแขแแ แแแขแแแแ แแแ แขแฃแแแฃแ แแแแฅแแแแแแ.
- แแแคแ แแกแขแ แฃแฅแขแฃแ แแก แฃแแ แฃแแแแแงแแคแแก แแแแฎแแ แชแแแแแแแก แจแแแแฌแแแแ.
- แแฅแแแแ โแแแแ แแแ แแแแแฃแแโ แแแคแ แแกแขแ แฃแฅแขแฃแ แแก แจแแแแแ แแแจแแแแฃแแ แแแแแแแชแแแก แแแแแแแก แแแจแแแแแก แขแแกแขแแก แจแแกแ แฃแแแแ, แ แแแ แจแแแแแฌแแแก แคแฃแแฅแชแแแแแ แแแ แฃแแ แฃแแแแแงแแคแแก แจแแแแแ.
- แ แแแแ แช แแฎแแแแแ, แแแคแ แแกแขแ แฃแฅแขแฃแ แแก แขแแกแขแแ แแแแก แแแ แแแแขแแแแก แคแแ แแ แกแแแฅแขแ แแ. Polumi-แก แแฅแแก แแ แกแแแฅแขแ แแก แงแแแแ แฌแแ แขแแแจแ แขแแกแขแแ แแแแก แแแฅแแแแแแแแ. แแแแแฌแงแแ แแ แแแแฎแแ, แ แแแแ แแฃแจแแแแก.
แแ แแแฃแแแก แขแแกแขแแ แแแ
Pulumi แแ แแแ แแแแแ แแฌแแ แแแ แแแแแแ แแแแแจแแฃแแแแแก แแ แแแ แแแแ แแแแก แแแแแแ, แ แแแแ แแชแแ JavaScript, Python, TypeScript แแ Go. แแฅแแแแ แแแแแแแแแแ แ, แแแแแแแก แฎแแแแแกแแฌแแแแแแ แแ แแแแแแก แกแ แฃแแ แซแแแ, แแแ แจแแ แแก แแแแ แแแกแขแ แฃแแแแขแแแ แแ แแแแแแแแแแแแ, แแแ แจแแ แแก แขแแกแขแแก แฉแแ แฉแแแแ. Pulumi แแ แแก แแ แแแแ แฆแ แฃแแแแแแ, แ แแช แแแจแแแแก, แ แแ แแแกแ แแแแแงแแแแแ แจแแกแแซแแแแแแแ แแแแแกแแแแ แ แฆแ แฃแแแแแแแ แแ แแแแแแแ แแก แขแแกแขแแ แแแแกแแแแก.
(แแ แกแขแแขแแแจแ, แแแฃแฎแแแแแแ แแแแกแ, แ แแ แแ แแแแแแแแแแแ แแ แแ แแแแแฆแ แฃแแแแแ, แฉแแแ แแแงแแแแแ JavaScript-แก แแ Mocha-แก แแ แคแแแฃแกแแ แแแแก แแแแแแแแ AWS-แแ. แจแแแแซแแแแ แแแแแแงแแแแ Python unittest
, แแแแแแแ แขแแกแขแแก แฉแแ แฉแแจแ, แแ แแแแแกแแแแ แ แกแฎแแ แขแแกแขแแก แฉแแ แฉแ, แ แแแแแแช แแแแฌแแแ. แแ, แ แ แแฅแแ แฃแแแ, แแฃแแฃแแ แแจแแแแแแ แแ แแฃแจแแแแก Azure-แแแ, Google Cloud-แแแ, Kubernetes-แแแ.)
แ แแแแ แช แแแแฎแแ, แแ แกแแแแแก แ แแแแแแแแ แแแแแแ, แ แแก แแแแแช แจแแแซแแแแ แแแแญแแ แแแ แแฅแแแแ แแแคแ แแกแขแ แฃแฅแขแฃแ แแก แแแแแก แจแแแแฌแแแแ. แแ แ-แแ แแ แแแแแแแแ แฉแแแฃแแแแ แแแ แแ แแแฃแแแก แขแแกแขแแ แแแ. แแแแก แแแแ, แ แแ แแฅแแแแก แแแแก แจแแแซแแแแ แฐแฅแแแแแก แคแฃแแฅแชแแแแ - แแแแแแแแแ, CIDR-แแก แแแแแแแแ, แกแแฎแแแแแแก, แขแแแแแแก แแแแแแแฃแ แแ แแแแแแแแ แแ แ.แจ. - แแฅแแแ แแแแแ แแกแฃแ แ แแแแ แแแแแชแแ. แแก แแแแแแ, แ แแช แแแแแแแชแแแแแกแแแแก แ แแแฃแแแ แฃแแ แแ แแแฃแแ แขแแกแขแแแแก แแแฌแแ แ แแฅแแแแก แกแแงแแแ แแ แแ แแแ แแแแ แแแแก แแแแแ.
แชแแขแ แฃแคแ แ แ แแฃแแ แ แแ แแแฎแแแ, แจแแแแซแแแแ แจแแแแแฌแแแ แ แแแแ แแแแฌแแแแแก แแฅแแแแ แแ แแแ แแแ แ แแกแฃแ แกแแแก. แกแแแแฃแกแขแ แแชแแแ, แฌแแ แแแแแแแแแแ, แ แแ แฉแแแ แฃแแแ แจแแแฅแแแแ แแแ แขแแแ EC2 แกแแ แแแ แ แแ แแแแแแ แแแ แฌแแฃแแแแฃแแ แแแงแแ แจแแแแแแจแ:
- แจแแแแฎแแแแแแก แแฅแแ แขแแแ
Name
. - แแแกแขแแแชแแแแแ แแ แฃแแแ แแแแแแงแแแแ แจแแแ แกแแ แแแขแ
userData
- แฃแแแ แแแแแแแงแแแแ AMI (แกแฃแ แแแ). - แแ แฃแแแ แแงแแก SSH แแแฃแชแแแแ แแแขแแ แแแขแจแ.
แแก แแแแแแแแ แแคแฃแซแแแแ
index.js:
"use strict";
let aws = require("@pulumi/aws");
let group = new aws.ec2.SecurityGroup("web-secgrp", {
ingress: [
{ protocol: "tcp", fromPort: 22, toPort: 22, cidrBlocks: ["0.0.0.0/0"] },
{ protocol: "tcp", fromPort: 80, toPort: 80, cidrBlocks: ["0.0.0.0/0"] },
],
});
let userData =
`#!/bin/bash
echo "Hello, World!" > index.html
nohup python -m SimpleHTTPServer 80 &`;
let server = new aws.ec2.Instance("web-server-www", {
instanceType: "t2.micro",
securityGroups: [ group.name ], // reference the group object above
ami: "ami-c55673a0" // AMI for us-east-2 (Ohio),
userData: userData // start a simple web server
});
exports.group = group;
exports.server = server;
exports.publicIp = server.publicIp;
exports.publicHostName = server.publicDns;
แแก แแ แแก แแฃแแฃแแแก แซแแ แแแแแ แแ แแแ แแแ: แแก แฃแแ แแแแ แแแแแงแแคแก EC2 แฃแกแแคแ แแฎแแแแแก แฏแแฃแคแก แแ แแแแแแแแก. แแฃแแชแ, แฃแแแ แแฆแแแแจแแแก, แ แแ แแฅ แฉแแแ แแแ แฆแแแแ แแแแแ แฉแแแแแแแแ แกแแแแแ แฌแแกแก. แแแแแ แแแแฌแแ แแ แขแแกแขแแแ!
แฌแแ แแแ แขแแกแขแแแ
แฉแแแแ แขแแกแขแแแแก แแแแแแ แกแขแ แฃแฅแขแฃแ แ แฐแแแแก แฉแแแฃแแแแ แแ แแแแแก แขแแกแขแแแก:
ec2tests.js
test.js:
let assert = require("assert");
let mocha = require("mocha");
let pulumi = require("@pulumi/pulumi");
let infra = require("./index");
describe("Infrastructure", function() {
let server = infra.server;
describe("#server", function() {
// TODO(check 1): ะะพะปะถะตะฝ ะฑััั ััะณ Name.
// TODO(check 2): ะะต ะดะพะปะถะฝะพ ะฑััั inline-ัะบัะธะฟัะฐ userData.
});
let group = infra.group;
describe("#group", function() {
// TODO(check 3): ะะต ะดะพะปะถะฝะพ ะฑััั SSH, ะพัะบัััะพะณะพ ะฒ ะะฝัะตัะฝะตั.
});
});
แแฎแแ แแแแแ แแแแฌแแ แแ แฉแแแแ แแแ แแแแ แขแแกแขแ: แแแ แฌแแฃแแแแ, แ แแ แแแกแขแแแชแแแแก แแฅแแ แขแแแ Name
. แแแแก แจแแกแแแแฌแแแแแแ แฉแแแ แฃแแ แแแแ แแแฆแแแ EC2 แแแกแขแแแชแแแก แแแแแฅแขแก แแ แแแแแฌแแแแ แจแแกแแแแแแก แแแแกแแแแก tags
:
// check 1: ะะพะปะถะตะฝ ะฑััั ััะณ Name.
it("must have a name tag", function(done) {
pulumi.all([server.urn, server.tags]).apply(([urn, tags]) => {
if (!tags || !tags["Name"]) {
done(new Error(`Missing a name tag on server ${urn}`));
} else {
done();
}
});
});
แ แแแแ แช แฉแแแก, แฉแแแฃแแแแ แแแ แขแแกแขแแ, แแแแ แแ แ แแแแแแแแ แแแฎแแกแแแแแแแแ, แ แแแแแแช แแฆแกแแแแจแแแแแ:
- แแแแก แแแแ, แ แแ แฉแแแ แแแแแฎแฃแแแแ แ แแกแฃแ แกแแก แแแแแแแ แแแแแก แแแแแแแกแแแแแแ, แฉแแแแ แขแแกแขแแแ แงแแแแแแแแก แขแแ แแแแ โแแแแแแกโ (แแ โแแแแแฎแแแแแกโ) แ แแแแแจแ. แแแ แแแแ, แแ แกแแแแแก แแ แแแแแ แแแแกแแแ, แ แแแแแแ แแแแจแแแแแแแแแ แฃแแ แแแแ แแ แแฅแแแแ แแแซแแแแฃแแ แแ แแ แแฅแแแแ แแแแกแแแฆแแ แฃแแ. แแก แแแแชแแแก แงแแแแ แแแแแแแแแ แแแแกแแแแก, แ แแแแแแช แแแแแแแแแแแ แแฅแแแแ แฆแ แฃแแแแแแแ แแ แแแแแแแ แแก แแแแ . แแก แแแ แแแแฃแ แแ แฉแแแแ แขแแกแขแแแแกแแแแก - แฉแแแ แแแแแฌแแแแ แแฎแแแแ แจแแงแแแแแก แแแแแชแแแแแก. แแ แกแแแแแฎแก แแแแแแแแแแแ แแแแฃแแ แฃแแแแแแ, แ แแแแกแแช แกแแฅแแ แแฎแแแ แแแขแแแ แแชแแแก แขแแกแขแแแก.
- แแแแแแแแ แแฃแแฃแแแก แ แแกแฃแ แกแแก แงแแแแ แแแแกแแแ แแแแแแแแแแแ แแ แแแแ แ แแแแแแแ แแกแแแฅแ แแแฃแแแ แคแแกแแแแ, แฉแแแ แฃแแแ แแแแแแแงแแแแ แแแแแชแฎแแแแก แแแแแแ แแแแจแแแแแแแแแแ แฌแแแแแแกแแแแก. แแก แซแแแแแ แฐแแแแก แแแแแ แแแแแก แแ แคแฃแแฅแชแแแแแ แแแแก
then
. - แแแแแแแแ แฉแแแ แแแงแแแแแ แ แแแแแแแแ แแแแกแแแแก, แ แแแ แแแแแแแงแแแแ แ แแกแฃแ แกแแก URN แจแแชแแแแแก แจแแขแงแแแแแแแแจแ, แฉแแแ แฃแแแ แแแแแแแงแแแแ แคแฃแแฅแชแแ
pulumi.all
แแแแ แจแแ แฌแงแแ. - แแแแแแแก, แ แแแแแ แแก แแแแจแแแแแแแแแ แแแแแแแแแแแ แแกแแแฅแ แแแฃแแแ, แฉแแแ แฃแแแ แแแแแแแงแแแแ Mocha-แก แฉแแจแแแแแฃแแ แแกแแแฅแ แแแฃแแ แแแแแซแแฎแแแแก แคแฃแแฅแชแแ.
done
แแ แแแแแ แแแแก แแแแ แฃแแแแ.
แแแก แจแแแแแ แ แแช แงแแแแแคแแ แก แแแแแงแแแแแ, แฉแแแ แแแแฅแแแแ แฌแแแแแ แจแแงแแแแแแแ, แ แแแแ แช แแแ แขแแแ JavaScript แแแแจแแแแแแแแแแ. แกแแแฃแแ แแแ tags
แแ แแก แ แฃแแ (แแกแแชแแแชแแฃแ แ แแแกแแแ), แแแแขแแ แฉแแแ แฃแแ แแแแ แแแแ แฌแแฃแแแแแแ, แ แแ แแก (1) แแ แแ แแก แแชแแแ แ แแ (2) แแ แแก แแแกแแฆแแแ Name
. แแก แซแแแแแ แแแ แขแแแแ แแ แแฎแแ แฉแแแ แจแแแแแซแแแ แแแแแแชแแแแ แงแแแแแคแแ แ!
แแฎแแ แแแแฌแแ แแ แฉแแแแ แแแแ แ แจแแแแฌแแแแ. แแก แแแแแ แฃแคแ แ แแแ แขแแแแ:
// check 2: ะะต ะดะพะปะถะฝะพ ะฑััั inline-ัะบัะธะฟัะฐ userData.
it("must not use userData (use an AMI instead)", function(done) {
pulumi.all([server.urn, server.userData]).apply(([urn, userData]) => {
if (userData) {
done(new Error(`Illegal use of userData on server ${urn}`));
} else {
done();
}
});
});
แแ แแแแแก, แแแแฌแแ แแ แแแกแแแ แขแแกแขแ. แแก แชแแขแ แฃแคแ แ แ แแฃแแ แแฅแแแแ, แ แแแแแ แฉแแแ แแแซแแแ แจแแกแแแแก แฌแแกแแแก, แ แแแแแแแช แแแแแแจแแ แแแฃแแแ แฃแกแแคแ แแฎแแแแแก แฏแแฃแคแแแ, แ แแแแแแแแแ แแแแ แ แจแแแซแแแแ แแงแแก, แแ CIDR แแแแแแแแแ แแ แฌแแกแแแจแ, แ แแแแแแแแแ แแกแแแ แจแแแซแแแแ แแแแ แ แแงแแก. แแแแ แแ แฉแแแ แจแแแซแแแแ:
// check 3: ะะต ะดะพะปะถะฝะพ ะฑััั SSH, ะพัะบัััะพะณะพ ะฒ ะะฝัะตัะฝะตั.
it("must not open port 22 (SSH) to the Internet", function(done) {
pulumi.all([ group.urn, group.ingress ]).apply(([ urn, ingress ]) => {
if (ingress.find(rule =>
rule.fromPort == 22 && rule.cidrBlocks.find(block =>
block === "0.0.0.0/0"))) {
done(new Error(`Illegal SSH port 22 open to the Internet (CIDR 0.0.0.0/0) on group ${urn}`));
} else {
done();
}
});
});
แฒกแฃแ แแก แแ แแก. แแฎแแ แแแแแ แฉแแแแขแแ แแ แขแแกแขแแแ!
แแแจแแแแฃแแ แขแแกแขแแแ
แฃแแแขแแก แจแแแแฎแแแแแจแ, แแฅแแแ แจแแแแซแแแแ แฉแแแขแแ แแ แขแแกแขแแแ แฉแแแฃแแแแ แแแ แแแแ, แแฅแแแแ แแ แฉแแแแแแก แกแแขแแกแขแ แฉแแ แฉแแก แแแแแงแแแแแแ. แแแแ แแ แแ แแก แแฃแแฃแแแก แแ แแ แแแแกแแแ, แ แแแแแก แงแฃแ แแแฆแแแแก แแแฅแชแแแแช แฆแแ แก.
แ แแแแ แช แฌแแกแ, Pulumi แแ แแแ แแแแแแก แแแกแแจแแแแแ แแแแแแงแแแแแ pulimi CLI (Command Line แแแขแแ แคแแแกแ), แ แแแแแแช แแแแแคแแแฃแ แแ แแแก แแแแก แแฃแจแแแแแก แแ แแก, แแแแแขแ แแแแแก Pulumi แซแ แแแแก แแแจแแแแแก แแกแ, แ แแ แ แแกแฃแ แกแแแแ แแแแ แแชแแแแ แจแแแซแแแแ แฉแแแฌแแ แแก แแ แจแแแขแแแแก แแแแแแจแ แแ แ.แจ. แแฃแแชแ แแ แแก แแ แแ แแ แแแแแแ. แ แแแแกแแช แแฃแจแแแแ แแฅแแแแ แขแแกแขแแก แฉแแ แฉแแก แแแแขแ แแแแก แฅแแแจ, แแ แแฅแแแแ แแแแฃแแแแแชแแ CLI-แกแ แแ Pulumi แซแ แแแแก แจแแ แแก.
แแ แแ แแแแแแแก แแแแแกแแญแ แแแแ, แฉแแแ แฃแแ แแแแ แฃแแแ แแแแแแแแแ แแขแแ แจแแแแแแ:
- แแ แแแฅแขแแก แกแแฎแแแ, แ แแแแแแช แจแแแชแแแก แแแ แแแแก แชแแแแแจแ
PULUMI_NODEJS_PROJECT
(แแ, แแแแแแแ,PULUMI__PROJECT ะดะปั ะดััะณะธั ัะทัะบะพะฒ).
แแแขแแก แกแแฎแแแ, แ แแแแแแช แแแแแแแแฃแแแ แแแ แแแแก แชแแแแแจแPULUMI_NODEJS_STACK
(แแ, แแแแแแแ,PULUMI__ STACK).
แแฅแแแแ แกแขแแแแก แแแแคแแแฃแ แแชแแแก แชแแแแแแแ. แแแแ แแแฆแแแ แจแแกแแซแแแแแแแ แแแ แแแแก แชแแแแแแก แแแแแงแแแแแแPULUMI_CONFIG
แแ แแแแ แคแแ แแแขแ แแ แแก JSON แ แฃแแ แแแกแแฆแแแ/แแแแจแแแแแแแแก แฌแงแแแแแแแ.แแ แแแ แแแ แแแแแกแชแแแก แแแคแ แแฎแแแแแแแก, แ แแแแแแแช แแแฃแแแแแแก แแแแแ, แ แแ CLI/แซแ แแแแแ แแแแจแแ แ แแ แแ แแก แฎแแแแแกแแฌแแแแแ แจแแกแ แฃแแแแแก แแ แแก. แแก แแแแจแแแแแแแแแแ, แ แแแแแ แแฅแแแแ แแ แแแ แแแ แ แแแแฃแ แแ แแ แแแแแแแแกแแแก แแ แแคแแ แก แแ แจแแแซแแแแ แแแกแแแแแ แ แแงแแก, แแฃ แแก แแ แแ แแก แแก, แ แแก แแแแแแแแแกแแช แแแแ แแแแแ! แแแแกแแแแแก, แ แแ แแฃแแฃแแก แฃแแฎแ แแ, แ แแ แแก แแ แแก แแฃแกแขแแ แแก, แ แแช แแญแแ แแแแแ, แจแแแแซแแแแ แแแแแแกแขแแแแ แแ
PULUMI_TEST_MODE
ะฒtrue
.แฌแแ แแแแแแแแแ, แ แแ แฉแแแ แแแญแแ แแแแ แแ แแแฅแขแแก แกแแฎแแแแก แแแแแแแแ
my-ws
, แกแขแแแแก แกแแฎแแแdev
แแ AWS แ แแแแแแus-west-2
. แแแฉแแก แขแแกแขแแแแก แแแจแแแแแก แแ แซแแแแแแก แฎแแแ แแกแ แแแแแแงแฃแ แแแ:$ PULUMI_TEST_MODE=true PULUMI_NODEJS_STACK="my-ws" PULUMI_NODEJS_PROJECT="dev" PULUMI_CONFIG='{ "aws:region": "us-west-2" }' mocha tests.js
แแแแก แแแแแแแแ, แ แแแแ แช แแแกแแแแแแแแ แแงแ, แแแแฉแแแแแแก, แ แแ แกแแแ แฉแแแแ แแแแแ แขแแกแขแ แแแแฅแแก!
Infrastructure #server 1) must have a name tag 2) must not use userData (use an AMI instead) #group 3) must not open port 22 (SSH) to the Internet 0 passing (17ms) 3 failing 1) Infrastructure #server must have a name tag: Error: Missing a name tag on server urn:pulumi:my-ws::my-dev::aws:ec2/instance:Instance::web-server-www 2) Infrastructure #server must not use userData (use an AMI instead): Error: Illegal use of userData on server urn:pulumi:my-ws::my-dev::aws:ec2/instance:Instance::web-server-www 3) Infrastructure #group must not open port 22 (SSH) to the Internet: Error: Illegal SSH port 22 open to the Internet (CIDR 0.0.0.0/0) on group
แแแแแ แแแแแกแฌแแ แแ แฉแแแแ แแ แแแ แแแ:
"use strict"; let aws = require("@pulumi/aws"); let group = new aws.ec2.SecurityGroup("web-secgrp", { ingress: [ { protocol: "tcp", fromPort: 80, toPort: 80, cidrBlocks: ["0.0.0.0/0"] }, ], }); let server = new aws.ec2.Instance("web-server-www", { tags: { "Name": "web-server-www" }, instanceType: "t2.micro", securityGroups: [ group.name ], // reference the group object above ami: "ami-c55673a0" // AMI for us-east-2 (Ohio), }); exports.group = group; exports.server = server; exports.publicIp = server.publicIp; exports.publicHostName = server.publicDns;
แแ แจแแแแแ แแแแแ แแแแแ แแ แขแแกแขแแแ:
Infrastructure #server โ must have a name tag โ must not use userData (use an AMI instead) #group โ must not open port 22 (SSH) to the Internet 3 passing (16ms)
แงแแแแแคแแ แแ แแแ แแแ แฉแแแแ แ... แ แ! โโโ
แแฆแแแกแแแแก แกแฃแ แแกแแ, แแแแ แแ แแแแแแแแแแก แขแแกแขแแ แแแแแ แแแกแแฃแแ แแแ แแแ แแแแแแก แแแแ แ แแแฌแแแจแ ๐
แฌแงแแ แ: www.habr.com