āĻļā§āĻ āĻŦāĻŋāĻāĻžāĻ˛ āĻŦāĻ¨ā§āĻ§ā§āĻ°āĻž. āĻšāĻžāĻ°ā§ āĻ¨āĻ¤ā§āĻ¨ āĻĒā§āĻ°āĻŦāĻžāĻš āĻļā§āĻ°ā§ āĻšāĻāĻ¯āĻŧāĻžāĻ° āĻĒā§āĻ°āĻ¤ā§āĻ¯āĻžāĻļāĻžāĻ¯āĻŧ
āĻĒāĻ°āĻŋāĻāĻžāĻ āĻžāĻŽā§ āĻā§āĻĄā§āĻ° āĻāĻ¨ā§āĻ¯ āĻĒā§āĻ˛ā§āĻŽāĻŋ āĻāĻŦāĻ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ-āĻāĻĻā§āĻĻā§āĻļā§āĻ¯ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻŋāĻ āĻāĻžāĻˇāĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻž (āĻā§āĻĄ āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻ
āĻŦāĻāĻžāĻ āĻžāĻŽā§) āĻ
āĻ¨ā§āĻ āĻ¸ā§āĻŦāĻŋāĻ§āĻž āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻāĻ°ā§: āĻĻāĻā§āĻˇāĻ¤āĻž āĻāĻŦāĻ āĻā§āĻāĻžāĻ¨ā§āĻ° āĻĒā§āĻ°āĻžāĻĒā§āĻ¯āĻ¤āĻž, āĻŦāĻŋāĻŽā§āĻ°ā§āĻ¤āĻāĻ°āĻŖā§āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§ āĻā§āĻĄā§ āĻŦāĻ¯āĻŧāĻ˛āĻžāĻ°āĻĒā§āĻ˛ā§āĻ āĻ¨āĻŋāĻ°ā§āĻŽā§āĻ˛ āĻāĻ°āĻž, āĻāĻĒāĻ¨āĻžāĻ° āĻĻāĻ˛ā§āĻ° āĻĒāĻ°āĻŋāĻāĻŋāĻ¤ āĻā§āĻ˛, āĻ¯ā§āĻŽāĻ¨ IDEs āĻāĻŦāĻ āĻ˛āĻŋāĻ¨ā§āĻāĻžāĻ°āĨ¤ āĻāĻ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ¸āĻĢā§āĻāĻāĻ¯āĻŧā§āĻ¯āĻžāĻ° āĻāĻā§āĻāĻŋāĻ¨āĻŋāĻ¯āĻŧāĻžāĻ°āĻŋāĻ āĻ¸āĻ°āĻā§āĻāĻžāĻŽāĻā§āĻ˛āĻŋ āĻā§āĻŦāĻ˛ āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻ°āĻ āĻāĻ¤ā§āĻĒāĻžāĻĻāĻ¨āĻļā§āĻ˛ āĻāĻ°ā§ āĻ¨āĻž, āĻ¤āĻŦā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻā§āĻĄā§āĻ° āĻā§āĻŖāĻŽāĻžāĻ¨āĻ āĻāĻ¨ā§āĻ¨āĻ¤ āĻāĻ°ā§ā§ˇ āĻ
āĻ¤āĻāĻŦ, āĻāĻāĻž āĻ¸ā§āĻŦāĻžāĻāĻžāĻŦāĻŋāĻ āĻ¯ā§ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ-āĻāĻĻā§āĻĻā§āĻļā§āĻ¯ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻŋāĻ āĻāĻžāĻˇāĻžāĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻ°ā§āĻāĻāĻŋ āĻā§āĻ°ā§āĻ¤ā§āĻŦāĻĒā§āĻ°ā§āĻŖ āĻ¸āĻĢā§āĻāĻāĻ¯āĻŧā§āĻ¯āĻžāĻ° āĻāĻ¨ā§āĻ¨āĻ¯āĻŧāĻ¨ āĻ
āĻ¨ā§āĻļā§āĻ˛āĻ¨ āĻĒā§āĻ°āĻŦāĻ°ā§āĻ¤āĻ¨ āĻāĻ°āĻ¤ā§ āĻĻā§āĻ¯āĻŧ- āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻŽā§āĻ˛āĻ.
āĻāĻ āĻĒā§āĻ°āĻŦāĻ¨ā§āĻ§ā§, āĻāĻŽāĻ°āĻž āĻĻā§āĻāĻŦ āĻāĻŋāĻāĻžāĻŦā§ āĻĒā§āĻ˛ā§āĻŽāĻŋ āĻāĻŽāĻžāĻĻā§āĻ° āĻĒāĻ°āĻŋāĻāĻžāĻ āĻžāĻŽā§-āĻā§āĻĄ-āĻāĻ° āĻŽāĻ¤ā§ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻ¤ā§ āĻ¸āĻžāĻšāĻžāĻ¯ā§āĻ¯ āĻāĻ°ā§āĨ¤
āĻā§āĻ¨ āĻĒāĻ°āĻŋāĻāĻžāĻ āĻžāĻŽā§ āĻĒāĻ°ā§āĻā§āĻˇāĻž?
āĻŦāĻŋāĻļāĻĻā§ āĻ¯āĻžāĻāĻ¯āĻŧāĻžāĻ° āĻāĻā§, āĻĒā§āĻ°āĻļā§āĻ¨āĻāĻŋ āĻāĻŋāĻā§āĻāĻžāĻ¸āĻž āĻāĻ°āĻž āĻŽā§āĻ˛ā§āĻ¯āĻŦāĻžāĻ¨: "āĻā§āĻ¨ āĻĒāĻ°āĻŋāĻāĻžāĻ āĻžāĻŽā§ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻž āĻ¯āĻžāĻ¯āĻŧ?" āĻāĻ° āĻāĻ¨ā§āĻ¯ āĻ āĻ¨ā§āĻāĻā§āĻ˛āĻŋ āĻāĻžāĻ°āĻŖ āĻ°āĻ¯āĻŧā§āĻā§ āĻāĻŦāĻ āĻāĻāĻžāĻ¨ā§ āĻ¤āĻžāĻĻā§āĻ° āĻāĻ¯āĻŧā§āĻāĻāĻŋ āĻ°āĻ¯āĻŧā§āĻā§:
- āĻāĻĒāĻ¨āĻžāĻ° āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽ āĻ˛āĻāĻŋāĻā§āĻ° āĻĒā§āĻĨāĻ āĻĢāĻžāĻāĻļāĻ¨ āĻŦāĻž āĻāĻŖā§āĻĄāĻā§āĻ˛āĻŋāĻ° āĻāĻāĻ¨āĻŋāĻ āĻĒāĻ°ā§āĻā§āĻˇāĻž
- āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻ¸ā§āĻŽāĻžāĻŦāĻĻā§āĻ§āĻ¤āĻžāĻ° āĻŦāĻŋāĻ°ā§āĻĻā§āĻ§ā§ āĻ āĻŦāĻāĻžāĻ āĻžāĻŽā§āĻ° āĻĒāĻāĻ¨ā§āĻĻāĻ¸āĻ āĻ āĻŦāĻ¸ā§āĻĨāĻž āĻ¯āĻžāĻāĻžāĻ āĻāĻ°ā§āĨ¤
- āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻ¤ā§āĻ°ā§āĻāĻŋāĻ° āĻ¸āĻ¨āĻžāĻā§āĻ¤āĻāĻ°āĻŖ, āĻ¯ā§āĻŽāĻ¨ āĻ¸ā§āĻā§āĻ°ā§āĻ āĻŦāĻžāĻā§āĻā§āĻ° āĻāĻ¨āĻā§āĻ°āĻŋāĻĒāĻļāĻ¨ā§āĻ° āĻ āĻāĻžāĻŦ āĻŦāĻž āĻ āĻ°āĻā§āĻˇāĻŋāĻ¤, āĻāĻžāĻ°ā§āĻā§āĻ¯āĻŧāĻžāĻ˛ āĻŽā§āĻļāĻŋāĻ¨ā§ āĻāĻ¨ā§āĻāĻžāĻ°āĻ¨ā§āĻ āĻĨā§āĻā§ āĻā§āĻ˛āĻž āĻ ā§āĻ¯āĻžāĻā§āĻ¸ā§āĻ¸āĨ¤
- āĻĒāĻ°āĻŋāĻāĻžāĻ āĻžāĻŽā§ āĻŦāĻŋāĻ§āĻžāĻ¨ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻž.
- āĻŦāĻŋāĻ§āĻžāĻ¨ āĻāĻ°āĻžāĻ° āĻĒāĻ°ā§ āĻāĻžāĻ°ā§āĻ¯āĻāĻžāĻ°āĻŋāĻ¤āĻž āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻĒāĻ¨āĻžāĻ° "āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽ āĻāĻ°āĻž" āĻĒāĻ°āĻŋāĻāĻžāĻ āĻžāĻŽā§āĻ° āĻāĻŋāĻ¤āĻ°ā§ āĻāĻ˛āĻŽāĻžāĻ¨ āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ āĻ˛āĻāĻŋāĻā§āĻ° āĻ°āĻžāĻ¨āĻāĻžāĻāĻŽ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻžāĨ¤
- āĻāĻŽāĻ°āĻž āĻĻā§āĻāĻ¤ā§ āĻĒāĻžāĻā§āĻāĻŋ, āĻĒāĻ°āĻŋāĻāĻžāĻ āĻžāĻŽā§ āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻ° āĻŦāĻŋāĻāĻ˛ā§āĻĒā§āĻ° āĻŦāĻŋāĻ¸ā§āĻ¤ā§āĻ¤ āĻĒāĻ°āĻŋāĻ¸āĻ° āĻ°āĻ¯āĻŧā§āĻā§āĨ¤ āĻĒāĻ˛ā§āĻŽāĻŋāĻ° āĻāĻ āĻ¸ā§āĻĒā§āĻāĻā§āĻ°āĻžāĻŽā§āĻ° āĻĒā§āĻ°āĻ¤āĻŋāĻāĻŋ āĻĒāĻ¯āĻŧā§āĻ¨ā§āĻā§ āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻŦā§āĻ¯āĻŦāĻ¸ā§āĻĨāĻž āĻ°āĻ¯āĻŧā§āĻā§āĨ¤ āĻļā§āĻ°ā§ āĻāĻ°āĻž āĻ¯āĻžāĻ āĻāĻŦāĻ āĻāĻāĻŋ āĻāĻŋāĻāĻžāĻŦā§ āĻāĻžāĻ āĻāĻ°ā§ āĻĻā§āĻā§āĻ¨.
āĻ āĻāĻļ āĻĒāĻ°āĻŋāĻā§āĻˇāĻžāĻāĻ°āĻŖ
āĻĒā§āĻ˛ā§āĻŽāĻŋ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻā§āĻ˛āĻŋ āĻāĻžāĻāĻžāĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻ, āĻĒāĻžāĻāĻĨāĻ¨, āĻāĻžāĻāĻĒāĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻ āĻŦāĻž āĻā§-āĻāĻ° āĻŽāĻ¤ā§ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ-āĻāĻĻā§āĻĻā§āĻļā§āĻ¯ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻŋāĻ āĻāĻžāĻˇāĻžāĻ¯āĻŧ āĻ˛ā§āĻāĻž āĻšāĻ¯āĻŧāĨ¤ āĻ āĻ¤āĻāĻŦ, āĻāĻ āĻāĻžāĻˇāĻžāĻā§āĻ˛āĻŋāĻ° āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖ āĻā§āĻˇāĻŽāĻ¤āĻž, āĻ¤āĻžāĻĻā§āĻ° āĻ¸āĻ°āĻā§āĻāĻžāĻŽ āĻāĻŦāĻ āĻ˛āĻžāĻāĻŦā§āĻ°ā§āĻ°āĻŋ āĻ¸āĻš, āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻ° āĻāĻžāĻ āĻžāĻŽā§ āĻ¸āĻš, āĻ¤āĻžāĻĻā§āĻ° āĻāĻžāĻā§ āĻāĻĒāĻ˛āĻŦā§āĻ§āĨ¤ āĻĒā§āĻ˛ā§āĻŽāĻŋ āĻšāĻ˛ āĻŽāĻžāĻ˛ā§āĻāĻŋ-āĻā§āĻ˛āĻžāĻāĻĄ, āĻ¯āĻžāĻ° āĻŽāĻžāĻ¨ā§ āĻāĻāĻŋ āĻ¯ā§āĻā§āĻ¨ā§ āĻā§āĻ˛āĻžāĻāĻĄ āĻĒā§āĻ°āĻĻāĻžāĻ¨āĻāĻžāĻ°ā§āĻ° āĻāĻžāĻ āĻĨā§āĻā§ āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤
(āĻāĻ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§, āĻŦāĻšā§āĻāĻžāĻˇāĻŋāĻ āĻāĻŦāĻ āĻŽāĻžāĻ˛ā§āĻāĻŋāĻā§āĻ˛āĻžāĻāĻĄ āĻšāĻāĻ¯āĻŧāĻž āĻ¸āĻ¤ā§āĻ¤ā§āĻŦā§āĻ, āĻāĻŽāĻ°āĻž āĻāĻžāĻāĻžāĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻ āĻāĻŦāĻ āĻŽā§āĻāĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻŋ āĻāĻŦāĻ AWS-āĻ āĻĢā§āĻāĻžāĻ¸ āĻāĻ°āĻŋāĨ¤ āĻāĻĒāĻ¨āĻŋ āĻĒāĻžāĻāĻĨāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨āĨ¤ unittest
, āĻā§āĻ¸ā§āĻ āĻĢā§āĻ°ā§āĻŽāĻāĻ¯āĻŧāĻžāĻ°ā§āĻ āĻŦāĻž āĻāĻĒāĻ¨āĻžāĻ° āĻĒāĻāĻ¨ā§āĻĻā§āĻ° āĻ
āĻ¨ā§āĻ¯ āĻā§āĻ¨ā§ āĻā§āĻ¸ā§āĻ āĻĢā§āĻ°ā§āĻŽāĻāĻ¯āĻŧāĻžāĻ°ā§āĻ āĻ¯āĻžāĻ¨āĨ¤ āĻāĻŦāĻ, āĻ
āĻŦāĻļā§āĻ¯āĻ, āĻĒā§āĻ˛ā§āĻŽāĻŋ āĻāĻā§āĻ°, āĻā§āĻāĻ˛ āĻā§āĻ˛āĻžāĻāĻĄ, āĻā§āĻŦāĻžāĻ°āĻ¨ā§āĻāĻ¸ā§āĻ° āĻ¸āĻžāĻĨā§ āĻĻā§āĻ°ā§āĻĻāĻžāĻ¨ā§āĻ¤ āĻāĻžāĻ āĻāĻ°ā§āĨ¤)
āĻ¯ā§āĻŽāĻ¨āĻāĻŋ āĻāĻŽāĻ°āĻž āĻĻā§āĻā§āĻāĻŋ, āĻāĻĒāĻ¨āĻŋ āĻāĻĒāĻ¨āĻžāĻ° āĻ
āĻŦāĻāĻžāĻ āĻžāĻŽā§ āĻā§āĻĄ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻ¤ā§ āĻāĻžāĻāĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨ āĻāĻŽāĻ¨ āĻŦāĻŋāĻāĻŋāĻ¨ā§āĻ¨ āĻāĻžāĻ°āĻŖ āĻ°āĻ¯āĻŧā§āĻā§āĨ¤ āĻ¤āĻžāĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻāĻāĻāĻŋ āĻšāĻ˛ āĻĒā§āĻ°āĻāĻ˛āĻŋāĻ¤ āĻāĻāĻ¨āĻŋāĻ āĻĒāĻ°ā§āĻā§āĻˇāĻžāĨ¤ āĻāĻžāĻ°āĻŖ āĻāĻĒāĻ¨āĻžāĻ° āĻā§āĻĄā§āĻ° āĻĢāĻžāĻāĻļāĻ¨ āĻĨāĻžāĻāĻ¤ā§ āĻĒāĻžāĻ°ā§ - āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, 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
. - āĻ¯ā§āĻšā§āĻ¤ā§ āĻāĻŽāĻ°āĻž āĻ¤ā§āĻ°ā§āĻāĻŋ āĻŦāĻžāĻ°ā§āĻ¤āĻžāĻ¯āĻŧ āĻ¸āĻāĻ¸ā§āĻĨāĻžāĻ¨ āĻāĻāĻāĻ°āĻāĻ¨ āĻĻā§āĻāĻžāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻŦā§āĻļ āĻāĻ¯āĻŧā§āĻāĻāĻŋ āĻŦā§āĻļāĻŋāĻˇā§āĻā§āĻ¯ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻāĻŋ, āĻ¤āĻžāĻ āĻāĻŽāĻžāĻĻā§āĻ° āĻĢāĻžāĻāĻļāĻ¨āĻāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻ¤ā§ āĻšāĻŦā§
pulumi.all
āĻ¤āĻžāĻĻā§āĻ° āĻāĻāĻ¤ā§āĻ°āĻŋāĻ¤ āĻāĻ°āĻ¤ā§āĨ¤ - āĻ
āĻŦāĻļā§āĻˇā§, āĻ¯ā§āĻšā§āĻ¤ā§ āĻāĻ āĻŽāĻžāĻ¨āĻā§āĻ˛āĻŋ āĻ
ā§āĻ¯āĻžāĻ¸āĻŋāĻā§āĻā§āĻ°ā§āĻ¨āĻžāĻ¸āĻāĻžāĻŦā§ āĻāĻŖāĻ¨āĻž āĻāĻ°āĻž āĻšāĻ¯āĻŧ, āĻ¤āĻžāĻ āĻāĻŽāĻžāĻĻā§āĻ° Mocha āĻāĻ° āĻ
āĻ¨ā§āĻ¤āĻ°ā§āĻ¨āĻŋāĻ°ā§āĻŽāĻŋāĻ¤ āĻ
ā§āĻ¯āĻžāĻ¸āĻŋāĻā§āĻ āĻāĻ˛āĻŦā§āĻ¯āĻžāĻ āĻŦā§āĻļāĻŋāĻˇā§āĻā§āĻ¯āĻāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻ¤ā§ āĻšāĻŦā§
done
āĻ āĻĨāĻŦāĻž āĻāĻāĻāĻŋ āĻĒā§āĻ°āĻ¤āĻŋāĻļā§āĻ°ā§āĻ¤āĻŋ āĻĢāĻŋāĻ°ā§.
āĻāĻāĻŦāĻžāĻ° āĻāĻŽāĻ°āĻž āĻ¸āĻŦāĻāĻŋāĻā§ āĻ¸ā§āĻ āĻāĻĒ āĻāĻ°āĻžāĻ° āĻĒāĻ°ā§, āĻāĻŽāĻžāĻĻā§āĻ° āĻ¸āĻšāĻ āĻāĻžāĻāĻžāĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻ āĻŽāĻžāĻ¨ āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻāĻ¨āĻĒā§āĻāĻā§āĻ˛āĻŋāĻ¤ā§ āĻ
ā§āĻ¯āĻžāĻā§āĻ¸ā§āĻ¸ āĻĨāĻžāĻāĻŦā§āĨ¤ āĻ¸āĻŽā§āĻĒāĻ¤ā§āĻ¤āĻŋ 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();
}
});
});
āĻāĻāĻžāĻ¨ā§āĻ āĻļā§āĻˇ. āĻāĻāĻ¨ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻžāĻ˛āĻžāĻ¨ā§ āĻ¯āĻžāĻ!
āĻāĻ˛āĻŽāĻžāĻ¨ āĻĒāĻ°ā§āĻā§āĻˇāĻž
āĻŦā§āĻļāĻŋāĻ°āĻāĻžāĻ āĻā§āĻˇā§āĻ¤ā§āĻ°ā§, āĻāĻĒāĻ¨āĻŋ āĻāĻĒāĻ¨āĻžāĻ° āĻĒāĻāĻ¨ā§āĻĻā§āĻ° āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻ° āĻāĻžāĻ āĻžāĻŽā§ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻ¸ā§āĻŦāĻžāĻāĻžāĻŦāĻŋāĻ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻ¤ā§ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻžāĻ˛āĻžāĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨āĨ¤ āĻ¤āĻŦā§ āĻĒā§āĻ˛ā§āĻŽāĻŋāĻ° āĻāĻāĻāĻŋ āĻŦā§āĻļāĻŋāĻˇā§āĻā§āĻ¯ āĻ°āĻ¯āĻŧā§āĻā§ āĻ¯āĻž āĻŽāĻ¨ā§āĻ¯ā§āĻ āĻĻā§āĻāĻ¯āĻŧāĻžāĻ° āĻŽāĻ¤ā§āĨ¤
āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻ¤, āĻĒā§āĻ˛ā§āĻŽāĻŋ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻā§āĻ˛āĻŋ āĻāĻžāĻ˛āĻžāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯, āĻĒā§āĻ˛āĻŋāĻŽāĻŋ āĻ¸āĻŋāĻāĻ˛āĻāĻ (āĻāĻŽāĻžāĻ¨ā§āĻĄ āĻ˛āĻžāĻāĻ¨ āĻāĻ¨ā§āĻāĻžāĻ°āĻĢā§āĻ¸) āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻž āĻšāĻ¯āĻŧ, āĻ¯āĻž āĻāĻžāĻˇāĻžāĻ° āĻ°āĻžāĻ¨āĻāĻžāĻāĻŽ āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ° āĻāĻ°ā§, āĻĒā§āĻ˛ā§āĻŽāĻŋ āĻāĻā§āĻāĻŋāĻ¨ āĻāĻžāĻ˛ā§ āĻāĻ°āĻž āĻ¨āĻŋāĻ¯āĻŧāĻ¨ā§āĻ¤ā§āĻ°āĻŖ āĻāĻ°ā§ āĻ¯āĻžāĻ¤ā§ āĻ¸āĻāĻ¸ā§āĻĨāĻžāĻ¨āĻā§āĻ˛āĻŋāĻ° āĻ¸āĻžāĻĨā§ āĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻāĻ˛āĻžāĻĒāĻā§āĻ˛āĻŋ āĻ°ā§āĻāĻ°ā§āĻĄ āĻāĻ°āĻž āĻ¯āĻžāĻ¯āĻŧ āĻāĻŦāĻ āĻĒāĻ°āĻŋāĻāĻ˛ā§āĻĒāĻ¨āĻžāĻ¯āĻŧ āĻ
āĻ¨ā§āĻ¤āĻ°ā§āĻā§āĻā§āĻ¤ āĻāĻ°āĻž āĻ¯āĻžāĻ¯āĻŧ āĻāĻ¤ā§āĻ¯āĻžāĻĻāĻŋāĨ¤ āĻ¯āĻžāĻāĻšā§āĻ, āĻāĻāĻāĻŋ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻāĻā§. āĻāĻĒāĻ¨āĻžāĻ° āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻ° āĻāĻžāĻ āĻžāĻŽā§āĻ° āĻ¨āĻŋāĻ¯āĻŧāĻ¨ā§āĻ¤ā§āĻ°āĻŖā§ āĻāĻ˛āĻžāĻāĻžāĻ˛ā§āĻ¨, CLI āĻāĻŦāĻ āĻĒā§āĻ˛ā§āĻŽāĻŋ āĻāĻā§āĻāĻŋāĻ¨ā§āĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻā§āĻ¨ā§ āĻ¯ā§āĻāĻžāĻ¯ā§āĻ āĻĨāĻžāĻāĻŦā§ āĻ¨āĻžāĨ¤
āĻāĻ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĻāĻŋ āĻĒā§āĻ¤ā§, āĻāĻŽāĻžāĻĻā§āĻ° āĻā§āĻŦāĻ˛ āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻāĻŋāĻ¤āĻā§āĻ˛āĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§:
- āĻĒā§āĻ°āĻāĻ˛ā§āĻĒā§āĻ° āĻ¨āĻžāĻŽ, āĻ¯āĻž āĻĒāĻ°āĻŋāĻŦā§āĻļ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨āĻļā§āĻ˛ā§ āĻ°āĻ¯āĻŧā§āĻā§
PULUMI_NODEJS_PROJECT
(āĻŦāĻž, āĻāĻ°ā§ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻāĻžāĻŦā§,PULUMI__PROJECT Đ´ĐģŅ Đ´ŅŅĐŗиŅ ŅСŅĐēОв).
āĻĒāĻ°āĻŋāĻŦā§āĻļ āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛ā§ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻāĻ°āĻž āĻ¸ā§āĻā§āĻ¯āĻžāĻā§āĻ° āĻ¨āĻžāĻŽPULUMI_NODEJS_STACK
(āĻŦāĻž, āĻāĻ°ā§ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻāĻžāĻŦā§,PULUMI__ STACK).
āĻāĻĒāĻ¨āĻžāĻ° āĻ¸ā§āĻā§āĻ¯āĻžāĻ āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ°ā§āĻļāĻ¨ āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛. āĻ¤āĻžāĻ°āĻž āĻāĻāĻāĻŋ āĻĒāĻ°āĻŋāĻŦā§āĻļ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨āĻļā§āĻ˛ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻĒā§āĻ°āĻžāĻĒā§āĻ¤ āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§PULUMI_CONFIG
āĻāĻŦāĻ āĻ¤āĻžāĻĻā§āĻ° āĻŦāĻŋāĻ¨ā§āĻ¯āĻžāĻ¸ āĻšāĻ˛ āĻā§/āĻŽāĻžāĻ¨ āĻā§āĻĄāĻŧāĻž āĻ¸āĻš JSON āĻŽāĻžāĻ¨āĻāĻŋāĻ¤ā§āĻ°āĨ¤āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻāĻŋ āĻ¸āĻ¤āĻ°ā§āĻāĻ¤āĻž āĻāĻžāĻ°āĻŋ āĻāĻ°āĻŦā§ āĻ¯āĻž āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļ āĻāĻ°ā§ āĻ¯ā§ āĻ¸āĻŋāĻāĻ˛āĻāĻ/āĻāĻā§āĻāĻŋāĻ¨ā§āĻ° āĻ¸āĻžāĻĨā§ āĻ¸āĻāĻ¯ā§āĻāĻāĻŋ āĻāĻžāĻ°ā§āĻ¯āĻāĻ° āĻāĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻāĻĒāĻ˛āĻŦā§āĻ§ āĻ¨āĻ¯āĻŧāĨ¤ āĻāĻāĻŋ āĻā§āĻ°ā§āĻ¤ā§āĻŦāĻĒā§āĻ°ā§āĻŖ āĻāĻžāĻ°āĻŖ āĻāĻĒāĻ¨āĻžāĻ° āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽ āĻāĻ¸āĻ˛ā§ āĻāĻŋāĻā§ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°āĻž āĻšāĻŦā§ āĻ¨āĻž āĻāĻŦāĻ āĻāĻāĻŋ āĻāĻļā§āĻāĻ°ā§āĻ¯āĻāĻ¨āĻ āĻšāĻ¤ā§ āĻĒāĻžāĻ°ā§ āĻ¯āĻĻāĻŋ āĻāĻĒāĻ¨āĻŋ āĻ¯āĻž āĻāĻ°āĻ¤ā§ āĻāĻžāĻ¨ āĻ¤āĻž āĻ¨āĻž āĻšāĻ¯āĻŧ! āĻĒā§āĻ˛ā§āĻŽāĻŋāĻā§ āĻŦāĻ˛āĻ¤ā§ āĻ¯ā§ āĻāĻāĻŋāĻ āĻāĻĒāĻ¨āĻžāĻ° āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨, āĻāĻĒāĻ¨āĻŋ āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨
PULUMI_TEST_MODE
вtrue
.āĻāĻ˛ā§āĻĒāĻ¨āĻž āĻāĻ°ā§āĻ¨ āĻāĻŽāĻžāĻĻā§āĻ° āĻĒā§āĻ°āĻāĻ˛ā§āĻĒā§āĻ° āĻ¨āĻžāĻŽ āĻāĻ˛ā§āĻ˛ā§āĻ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§
my-ws
, āĻ¸ā§āĻā§āĻ¯āĻžāĻā§āĻ° āĻ¨āĻžāĻŽdev
, āĻāĻŦāĻ AWS āĻ āĻā§āĻāĻ˛us-west-2
. Mocha āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻžāĻ˛āĻžāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻŽāĻžāĻ¨ā§āĻĄ āĻ˛āĻžāĻāĻ¨ āĻāĻ āĻŽāĻ¤ āĻĻā§āĻāĻžāĻŦā§:$ 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