DRYな備忘録

Don't Repeat Yourself.

【メモ】aws-sdk-goを使ったSecurityGroupの作成

tl;dr

docs.aws.amazon.com

動くコード

package main

import (
    "fmt"

    "github.com/aws/aws-sdk-go/aws"
    "github.com/aws/aws-sdk-go/aws/session"
    "github.com/aws/aws-sdk-go/service/ec2"
)

func main() {

    sess := session.Must(session.NewSessionWithOptions(session.Options{
        SharedConfigState: session.SharedConfigEnable,
        Config:            aws.Config{Region: aws.String("us-west-1")},
    }))
    client := ec2.New(sess)

    // 名前がコンフリクトするので同名のものがあれば削除しておく
    _, err := client.DeleteSecurityGroup(&ec2.DeleteSecurityGroupInput{
        GroupName: aws.String("test-sdk-go"),
    })
    fmt.Println("DELETE:", err)

    // SGの作成
    group, err := client.CreateSecurityGroup(&ec2.CreateSecurityGroupInput{
        GroupName:   aws.String("test-sdk-go"),
        Description: aws.String("Foo Bar Baz"),
    })
    if err != nil {
        panic(err)
    }
    fmt.Printf("GROUP: %v\n", group)

    // ルールの追加
    _, err = client.AuthorizeSecurityGroupIngress(&ec2.AuthorizeSecurityGroupIngressInput{
        GroupId: group.GroupId,
        IpPermissions: []*ec2.IpPermission{
            &ec2.IpPermission{
                IpRanges:   []*ec2.IpRange{&ec2.IpRange{CidrIp: aws.String("0.0.0.0/0")}},
                IpProtocol: aws.String("tcp"),
                FromPort:   aws.Int64(22),
                ToPort:     aws.Int64(22),
            },
        },
    })
    fmt.Println(err)
}

確認

このSGを持ったEC2インスタンスを立ち上げ、sshの疎通が確認できた。