sorta kinda...

主にAWS関連ですが、これに限らずいろいろ勉強したことや思ったことを書いていきます。

Integromat を使って backlog の課題更新内容を slack に投げる

久々にノマドワークしてます、那須です。

つい最近、Integromat という IFTTT や Zapier に似たサービスがあることを知りました。 IFTTT や Zapier はシンプルで使いやすいけど Integromat はちょっとややこしいという感想がいくつかのブログで見られましたが、私的にはわりとすんなり使えたのでこれでいろいろやりたいなーと思っています。

今回は、backlog で課題追加や更新があった際に、その内容を slack に通知する仕組みを作ってみました。

 

Integromat のサインアップや基本的な使い方

いくつかのブログで丁寧に書かれているので省略します。(めんどいだけ…

 

どんな構成にしたか

左のWebhooks が backlog です。真ん中の Router が内容によって処理をかえるための if 文みたいなやつです。右の Slack が実際の処理内容です。 f:id:nasrinjp1:20180627113430p:plain

 

Router での分岐条件

backlog の課題が追加された場合に右上の Slack の処理をさせるようにしています。課題追加の type は 1 なので、type が 1 だったらこっち、みたいな感じです。 f:id:nasrinjp1:20180627113901p:plain

backlog の課題が更新された場合は、右の Slack を処理させるようにします。type は 2(更新) か 3(完了) です。 f:id:nasrinjp1:20180627113914p:plain

 

Slack での処理

こちらは backlog 課題追加時のアクションです。 f:id:nasrinjp1:20180627115705p:plain

こっちが backlog で課題更新(完了含む)された場合のアクションです。 f:id:nasrinjp1:20180627115534p:plain

 

slack での見え方

上記のように設定すると、backlog で課題追加されるとこんな風に投稿されます。 f:id:nasrinjp1:20180627115500p:plain

backlog で課題が更新されるとこんな風に投稿されます。 f:id:nasrinjp1:20180627115511p:plain

 

感想

最近ではチャットツールでやりとりしていて、メールをほとんど見なくなった会社が増えてきていると思います。 backlog は通知されないとメールでしか課題更新に気づけませんが、こうやって slack 等のチャットツールに自動投稿するようにしておけばすぐに気づけますね。 backlog だけでなく、Webhook が使えるサービスでも同じような仕組みを作ることができるので、いろんな場面で使えるんじゃないかなーと思います。便利な世の中になりましたね!

PrivateLink を CloudFormation で作ってみた

少しづつ CloudFormation から離れつつあります、那須です。

ちょっと前に CloudFormation で PrivateLink が作れるって AWS さんからニュースが出てました。
AWS PrivateLink リソースに対する CloudFormation サポートの導入

最近手作業で PrivateLink を構築したばっかりだったので、実際にやってみました!

 

作る AWS リソース

f:id:nasrinjp1:20180626213546p:plain

 

テンプレート内容

NLB、VPC Endpoint Service、VPC Endpoint の 3 つのリソースを一気に作成するテンプレートでテストしてみました。 NLB のパラメータは雑に入れてしまいましたが、とりあえず作りたいだけだったのでこれでよしとします。

{
    "AWSTemplateFormatVersion": "2010-09-09",
    "Parameters": {
        "NlbArn": {
            "Type": "String",
            "Description": "NLB ARN"
        },
        "VpcId": {
            "Type": "String",
            "Description": "VPC-ID for VPC Endpoint"
        },
        "SecurityGroupId": {
            "Type": "String",
            "Description": "SG-ID for VPC Endpoint"
        },
        "SubnetId": {
            "Type": "String",
            "Description": "SubnetID for VPC Endpoint"
        }
    },
    "Resources": {
        "Nlb": {
            "Type": "AWS::ElasticLoadBalancingV2::LoadBalancer",
            "Properties": {
                "Name": "testnlb",
                "Scheme": "internal",
                "Type": "network",
                "Subnets": [
                    "subnet-xxxxxxxx",
                    "subnet-xxxxxxxx"
                ]
            }
        },
        "VpcEndpointService": {
            "Type": "AWS::EC2::VPCEndpointService",
            "Properties": {
                "NetworkLoadBalancerArns": [
                    {
                        "Ref": "Nlb"
                    }
                ],
                "AcceptanceRequired": true
            },
            "DependsOn": [
                "Nlb"
            ]
        },
        "VpcEndpoint": {
            "Type": "AWS::EC2::VPCEndpoint",
            "Properties": {
                "VpcId": {
                    "Ref": "VpcId"
                },
                "ServiceName": {
                    "Fn::Sub": "com.amazonaws.vpce.${AWS::Region}.${VpcEndpointService}"
                },
                "VpcEndpointType": "Interface",
                "SubnetIds": [
                    {
                        "Ref": "SubnetId"
                    }
                ],
                "SecurityGroupIds": [
                    {
                        "Ref": "SecurityGroupId"
                    }
                ]
            },
            "DependsOn": [
                "VpcEndpointService"
            ]
        }
    }
}

 

結果

NLB、VPC Endpoint Service、VPC Endpoint の 3 つのリソースは作成されました! が、よく見ると VPC Endpoint Service で エンドポイントの接続承認待ちの状態で止まってしまいました。 そのまま放っておくとエラーになってロールバックされますが、承認待ちの状態で手作業で承認すると CloudFormation のスタック作成は成功しました。

 

承認タスクは CloudFormation で対応できないか?

エンドポイントサービスのドキュメントを見ると下記のように書かれていました。
docs.aws.amazon.com

To accept a request, use AcceptVpcEndpointConnections.

というわけで、現時点では手作業か API コールするしかなさそうです。 AcceptanceRequired を false にすればいいと思いますが、そのような運用になっている場面ってあまりなさそうなので、そのうち対応されることを期待しておこうと思います。

 

まとめ

PrivateLink を CloudFormation で作成する機会ってあまりなさそうですが、もしそういう場面に直面された方の参考になればうれしいです。